Skip to content

Commit c4941ad

Browse files
authored
Merge pull request #52 from abolfazl8131/abolfazl/helm-grhd
fix(helm-prompt): fix a little problem of statefull or deployment gen…
2 parents 02f568b + 8f17284 commit c4941ad

File tree

11 files changed

+164
-202
lines changed

11 files changed

+164
-202
lines changed
16 Bytes
Binary file not shown.
Lines changed: 113 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -1,162 +1,116 @@
11
import os
22

33
project_name = "app/media/MyHelm"
4-
chart_structure = {
5-
"charts": {},
6-
"templates": {
7-
"web": {}
8-
}
9-
}
10-
11-
values_data = {
12-
'web': {
13-
'image': 'nginx',
14-
'targetPort': 80,
15-
'replicaCount': 1,
16-
'persistence': {
17-
'size': '1Gi',
18-
'accessModes': 'ReadWriteOnce'
19-
},
20-
'env': [
21-
{'name': 'ENV1', 'value': 'Hi'}
22-
],
23-
'ingress': {
24-
'enabled': False,
25-
'host': 'www.example.com'
26-
},
27-
'stateless': True
28-
}
29-
}
30-
31-
def create_file(path, content=""):
32-
with open(path, 'w') as file:
33-
file.write(content)
34-
35-
os.makedirs(os.path.join(project_name, "charts"), exist_ok=True)
36-
os.makedirs(os.path.join(project_name, "templates", "web"), exist_ok=True)
37-
38-
chart_yaml_content = """apiVersion: v2
39-
name: mychart
40-
description: A Helm chart for Kubernetes
41-
version: 0.1.0
42-
"""
43-
44-
values_yaml_content = """web:
45-
image: nginx
46-
targetPort: 80
47-
replicaCount: 1
48-
persistence:
49-
size: 1Gi
50-
accessModes:
51-
- ReadWriteOnce
52-
env:
53-
- name: ENV1
54-
value: Hi
55-
ingress:
56-
enabled: false
57-
host: www.example.com
58-
stateless: true
59-
"""
60-
61-
create_file(os.path.join(project_name, "Chart.yaml"), chart_yaml_content)
62-
create_file(os.path.join(project_name, "values.yaml"), values_yaml_content)
63-
64-
deployment_yaml_content = """apiVersion: apps/v1
65-
kind: Deployment
66-
metadata:
67-
name: {{ .Release.Name }}-web
68-
spec:
69-
replicas: {{ .Values.web.replicaCount }}
70-
selector:
71-
matchLabels:
72-
app: {{ .Release.Name }}-web
73-
template:
74-
metadata:
75-
labels:
76-
app: {{ .Release.Name }}-web
77-
spec:
78-
containers:
79-
- name: web
80-
image: {{ .Values.web.image }}
81-
ports:
82-
- containerPort: {{ .Values.web.targetPort }}
83-
env:
84-
{{- range .Values.web.env }}
85-
- name: {{ .name }}
86-
value: {{ .value | quote }}
87-
{{- end }}
88-
"""
89-
90-
service_yaml_content = """apiVersion: v1
91-
kind: Service
92-
metadata:
93-
name: {{ .Release.Name }}-web
94-
spec:
95-
ports:
96-
- port: {{ .Values.web.targetPort }}
97-
selector:
98-
app: {{ .Release.Name }}-web
99-
"""
100-
101-
secrets_yaml_content = """apiVersion: v1
102-
kind: Secret
103-
metadata:
104-
name: {{ .Release.Name }}-secret
105-
type: Opaque
106-
data:
107-
example-key: {{ .Values.secret.exampleKey | b64enc | quote }}
108-
"""
109-
110-
create_file(os.path.join(project_name, "templates", "web", "deployment.yaml"), deployment_yaml_content)
111-
create_file(os.path.join(project_name, "templates", "web", "service.yaml"), service_yaml_content)
112-
create_file(os.path.join(project_name, "templates", "web", "secrets.yaml"), secrets_yaml_content)
113-
114-
if values_data['web']['stateless']:
115-
create_file(os.path.join(project_name, "templates", "web", "statefulset.yaml"), "")
116-
else:
117-
create_file(os.path.join(project_name, "templates", "web", "statefulset.yaml"), "")
118-
119-
if values_data['web']['ingress']['enabled']:
120-
ingress_yaml_content = """apiVersion: networking.k8s.io/v1
121-
kind: Ingress
122-
metadata:
123-
name: {{ .Release.Name }}-web
124-
spec:
125-
rules:
126-
- host: {{ .Values.web.ingress.host }}
127-
http:
128-
paths:
129-
- path: /
130-
pathType: Prefix
131-
backend:
132-
service:
133-
name: {{ .Release.Name }}-web
134-
port:
135-
number: {{ .Values.web.targetPort }}
136-
"""
137-
create_file(os.path.join(project_name, "templates", "web", "ingress.yaml"), ingress_yaml_content)
138-
139-
pvc_yaml_content = """apiVersion: v1
140-
kind: PersistentVolumeClaim
141-
metadata:
142-
name: {{ .Release.Name }}-web
143-
spec:
144-
accessModes:
145-
- {{ .Values.web.persistence.accessModes | first }}
146-
resources:
147-
requests:
148-
storage: {{ .Values.web.persistence.size }}
149-
"""
150-
151-
create_file(os.path.join(project_name, "templates", "web", "pvc.yaml"), pvc_yaml_content)
152-
153-
helpers_tpl_content = """{{/*
154-
Common utility functions for templates
155-
*/}}
156-
157-
{{- define "mychart.name" -}}
158-
{{ .Release.Name }}-{{ .Chart.Name }}
159-
{{- end -}}
160-
"""
161-
162-
create_file(os.path.join(project_name, "templates", "web", "helpers.tpl"), helpers_tpl_content)
4+
charts_dir = os.path.join(project_name, "charts")
5+
templates_dir = os.path.join(project_name, "templates")
6+
web_dir = os.path.join(templates_dir, "web")
7+
8+
# Create project directories
9+
os.makedirs(charts_dir, exist_ok=True)
10+
os.makedirs(templates_dir, exist_ok=True)
11+
os.makedirs(web_dir, exist_ok=True)
12+
13+
# Create Chart.yaml
14+
with open(os.path.join(project_name, "Chart.yaml"), "w") as chart_file:
15+
chart_file.write("apiVersion: v2\n")
16+
chart_file.write("name: MyHelm\n")
17+
chart_file.write("description: A Helm chart for Kubernetes\n")
18+
chart_file.write("version: 0.1.0\n")
19+
20+
# Create values.yaml
21+
with open(os.path.join(project_name, "values.yaml"), "w") as values_file:
22+
values_file.write("web:\n")
23+
values_file.write(" image: nginx\n")
24+
values_file.write(" targetPort: 80\n")
25+
values_file.write(" replicas: 1\n")
26+
values_file.write(" persistence:\n")
27+
values_file.write(" size: 1Gi\n")
28+
values_file.write(" accessModes:\n")
29+
values_file.write(" - ReadWriteOnce\n")
30+
values_file.write(" env:\n")
31+
values_file.write(" - name: ENV1\n")
32+
values_file.write(" value: Hi\n")
33+
values_file.write(" ingress:\n")
34+
values_file.write(" enabled: false\n")
35+
values_file.write(" host: www.example.com\n")
36+
values_file.write(" stateless:\n")
37+
values_file.write(" enabled: false\n")
38+
39+
# Create service.yaml
40+
with open(os.path.join(web_dir, "service.yaml"), "w") as service_file:
41+
service_file.write("apiVersion: v1\n")
42+
service_file.write("kind: Service\n")
43+
service_file.write("metadata:\n")
44+
service_file.write(" name: web-service\n")
45+
service_file.write("spec:\n")
46+
service_file.write(" type: ClusterIP\n")
47+
service_file.write(" ports:\n")
48+
service_file.write(" - port: 80\n")
49+
service_file.write(" targetPort: {{ .Values.web.targetPort }}\n")
50+
service_file.write(" selector:\n")
51+
service_file.write(" app: web\n")
52+
53+
# Create statefulset.yaml (since stateless is false)
54+
with open(os.path.join(web_dir, "statefulset.yaml"), "w") as statefulset_file:
55+
statefulset_file.write("apiVersion: apps/v1\n")
56+
statefulset_file.write("kind: StatefulSet\n")
57+
statefulset_file.write("metadata:\n")
58+
statefulset_file.write(" name: web\n")
59+
statefulset_file.write("spec:\n")
60+
statefulset_file.write(" serviceName: web-service\n")
61+
statefulset_file.write(" replicas: {{ .Values.web.replicas }}\n")
62+
statefulset_file.write(" selector:\n")
63+
statefulset_file.write(" matchLabels:\n")
64+
statefulset_file.write(" app: web\n")
65+
statefulset_file.write(" template:\n")
66+
statefulset_file.write(" metadata:\n")
67+
statefulset_file.write(" labels:\n")
68+
statefulset_file.write(" app: web\n")
69+
statefulset_file.write(" spec:\n")
70+
statefulset_file.write(" containers:\n")
71+
statefulset_file.write(" - name: web\n")
72+
statefulset_file.write(" image: {{ .Values.web.image }}\n")
73+
statefulset_file.write(" ports:\n")
74+
statefulset_file.write(" - containerPort: {{ .Values.web.targetPort }}\n")
75+
statefulset_file.write(" env:\n")
76+
statefulset_file.write(" - name: {{ .Values.web.env[0].name }}\n")
77+
statefulset_file.write(" value: {{ .Values.web.env[0].value }}\n")
78+
statefulset_file.write(" volumeClaimTemplates:\n")
79+
statefulset_file.write(" - metadata:\n")
80+
statefulset_file.write(" name: web-pvc\n")
81+
statefulset_file.write(" spec:\n")
82+
statefulset_file.write(" accessModes:\n")
83+
statefulset_file.write(" - {{ .Values.web.persistence.accessModes[0] }}\n")
84+
statefulset_file.write(" resources:\n")
85+
statefulset_file.write(" requests:\n")
86+
statefulset_file.write(" storage: {{ .Values.web.persistence.size }}\n")
87+
88+
# Create pvc.yaml
89+
with open(os.path.join(web_dir, "pvc.yaml"), "w") as pvc_file:
90+
pvc_file.write("apiVersion: v1\n")
91+
pvc_file.write("kind: PersistentVolumeClaim\n")
92+
pvc_file.write("metadata:\n")
93+
pvc_file.write(" name: web-pvc\n")
94+
pvc_file.write("spec:\n")
95+
pvc_file.write(" accessModes:\n")
96+
pvc_file.write(" - {{ .Values.web.persistence.accessModes[0] }}\n")
97+
pvc_file.write(" resources:\n")
98+
pvc_file.write(" requests:\n")
99+
pvc_file.write(" storage: {{ .Values.web.persistence.size }}\n")
100+
101+
# Create secrets.yaml
102+
with open(os.path.join(web_dir, "secrets.yaml"), "w") as secrets_file:
103+
secrets_file.write("apiVersion: v1\n")
104+
secrets_file.write("kind: Secret\n")
105+
secrets_file.write("metadata:\n")
106+
secrets_file.write(" name: web-secrets\n")
107+
secrets_file.write("type: Opaque\n")
108+
secrets_file.write("data:\n")
109+
secrets_file.write(" # Add your base64 encoded secrets here\n")
110+
111+
# Create helpers.tpl
112+
with open(os.path.join(web_dir, "helpers.tpl"), "w") as helpers_file:
113+
helpers_file.write("# Define any helpers here\n")
114+
helpers_file.write("define \"web.fullname\" \n")
115+
helpers_file.write(" {{ .Release.Name }}-{{ .Values.web.name }} \n")
116+
helpers_file.write("end\n")

app/media/MyHelm/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
apiVersion: v2
2-
name: mychart
2+
name: MyHelm
33
description: A Helm chart for Kubernetes
44
version: 0.1.0

app/media/MyHelm/templates/web/deployment.yaml

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
{{/*
2-
Common utility functions for templates
3-
*/}}
4-
5-
{{- define "mychart.name" -}}
6-
{{ .Release.Name }}-{{ .Chart.Name }}
7-
{{- end -}}
1+
# Define any helpers here
2+
define "web.fullname"
3+
{{ .Release.Name }}-{{ .Values.web.name }}
4+
end
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
apiVersion: v1
22
kind: PersistentVolumeClaim
33
metadata:
4-
name: {{ .Release.Name }}-web
4+
name: web-pvc
55
spec:
66
accessModes:
7-
- {{ .Values.web.persistence.accessModes | first }}
7+
- {{ .Values.web.persistence.accessModes[0] }}
88
resources:
99
requests:
1010
storage: {{ .Values.web.persistence.size }}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: v1
22
kind: Secret
33
metadata:
4-
name: {{ .Release.Name }}-secret
4+
name: web-secrets
55
type: Opaque
66
data:
7-
example-key: {{ .Values.secret.exampleKey | b64enc | quote }}
7+
# Add your base64 encoded secrets here
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
apiVersion: v1
22
kind: Service
33
metadata:
4-
name: {{ .Release.Name }}-web
4+
name: web-service
55
spec:
6+
type: ClusterIP
67
ports:
7-
- port: {{ .Values.web.targetPort }}
8+
- port: 80
9+
targetPort: {{ .Values.web.targetPort }}
810
selector:
9-
app: {{ .Release.Name }}-web
11+
app: web
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: web
5+
spec:
6+
serviceName: web-service
7+
replicas: {{ .Values.web.replicas }}
8+
selector:
9+
matchLabels:
10+
app: web
11+
template:
12+
metadata:
13+
labels:
14+
app: web
15+
spec:
16+
containers:
17+
- name: web
18+
image: {{ .Values.web.image }}
19+
ports:
20+
- containerPort: {{ .Values.web.targetPort }}
21+
env:
22+
- name: {{ .Values.web.env[0].name }}
23+
value: {{ .Values.web.env[0].value }}
24+
volumeClaimTemplates:
25+
- metadata:
26+
name: web-pvc
27+
spec:
28+
accessModes:
29+
- {{ .Values.web.persistence.accessModes[0] }}
30+
resources:
31+
requests:
32+
storage: {{ .Values.web.persistence.size }}

0 commit comments

Comments
 (0)