Skip to content

Commit 76972cb

Browse files
authored
Merge pull request #34 from devopshobbies/abolfazl-helm
fix(helm_prompt): add a short prompt for helpers.tpl generation, it c…
2 parents 95f73bb + b7f2b94 commit 76972cb

9 files changed

Lines changed: 83 additions & 94 deletions

File tree

174 Bytes
Binary file not shown.
Lines changed: 52 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,26 @@
11
import os
22

3-
# Define the project structure
4-
project_name = "MyHelm"
5-
base_path = f"app/media/{project_name}"
3+
project_name = "app/media/MyHelm"
64

5+
# Define the directory structure and file content
76
directories = [
8-
"charts/",
9-
"templates/web/"
7+
"charts",
8+
"templates/web"
109
]
1110

12-
files = [
13-
"Chart.yaml",
14-
"values.yaml",
15-
"templates/web/service.yaml",
16-
"templates/web/deployment.yaml",
17-
"templates/web/secret.yaml" # Only if there are environment variables
18-
]
19-
20-
# Create the directories
21-
for directory in directories:
22-
os.makedirs(os.path.join(base_path, directory), exist_ok=True)
23-
24-
# Create the Chart.yaml file
25-
chart_yaml_content = """apiVersion: v2
26-
name: mychart
11+
files = {
12+
"Chart.yaml": """apiVersion: v2
13+
name: my-helm
2714
description: A Helm chart for Kubernetes
2815
version: 0.1.0
29-
"""
30-
with open(os.path.join(base_path, "Chart.yaml"), "w") as chart_file:
31-
chart_file.write(chart_yaml_content)
32-
33-
# Create the values.yaml file
34-
values_yaml_content = """web:
16+
appVersion: "1.0"
17+
""",
18+
"values.yaml": """web:
3519
image: nginx
3620
service:
37-
targetPort: 80
21+
port: 80
3822
replicas: 1
3923
persistence:
40-
enabled: true
4124
size: 1Gi
4225
accessModes:
4326
- ReadWriteOnce
@@ -47,72 +30,71 @@
4730
ingress:
4831
enabled: false
4932
host: www.example.com
50-
"""
51-
with open(os.path.join(base_path, "values.yaml"), "w") as values_file:
52-
values_file.write(values_yaml_content)
53-
54-
# Create service.yaml file
55-
service_yaml_content = """apiVersion: v1
33+
""",
34+
"templates/web/service.yaml": """apiVersion: v1
5635
kind: Service
5736
metadata:
58-
name: web
37+
name: {{ include \"my-helm.fullname\" . }}
5938
spec:
6039
type: ClusterIP
6140
ports:
62-
- port: 80
63-
targetPort: {{ .Values.web.service.targetPort }}
41+
- port: {{ .Values.web.service.port }}
6442
selector:
65-
app: {{ .Release.Name }}
66-
"""
67-
68-
with open(os.path.join(base_path, "templates/web/service.yaml"), "w") as service_file:
69-
service_file.write(service_yaml_content)
70-
71-
# Create deployment.yaml file
72-
deployment_yaml_content = """apiVersion: apps/v1
43+
app: {{ include \"my-helm.name\" . }}
44+
""",
45+
"templates/web/deployment.yaml": """apiVersion: apps/v1
7346
kind: Deployment
7447
metadata:
75-
name: web
48+
name: {{ include \"my-helm.fullname\" . }}
7649
spec:
7750
replicas: {{ .Values.web.replicas }}
7851
selector:
7952
matchLabels:
80-
app: {{ .Release.Name }}
53+
app: {{ include \"my-helm.name\" . }}
8154
template:
8255
metadata:
8356
labels:
84-
app: {{ .Release.Name }}
57+
app: {{ include \"my-helm.name\" . }}
8558
spec:
8659
containers:
87-
- name: web
60+
- name: {{ include \"my-helm.name\" . }}
8861
image: {{ .Values.web.image }}
8962
ports:
90-
- containerPort: {{ .Values.web.service.targetPort }}
63+
- containerPort: {{ .Values.web.service.port }}
9164
env:
9265
- name: ENV1
93-
value: {{ .Values.web.env[0].value }}
94-
volumeClaimTemplates:
95-
- metadata:
96-
name: web-pvc
97-
spec:
98-
accessModes: {{ .Values.web.persistence.accessModes | toYaml }}
99-
resources:
100-
requests:
101-
storage: {{ .Values.web.persistence.size }}
102-
"""
103-
104-
with open(os.path.join(base_path, "templates/web/deployment.yaml"), "w") as deployment_file:
105-
deployment_file.write(deployment_yaml_content)
106-
107-
# Create secret.yaml file
108-
secret_yaml_content = """apiVersion: v1
66+
value: Hi
67+
""",
68+
"templates/web/secret.yaml": """apiVersion: v1
10969
kind: Secret
11070
metadata:
111-
name: web-secret
71+
name: {{ include \"my-helm.fullname\" . }}-secret
11272
type: Opaque
11373
data:
114-
ENV1: aGl
74+
ENV1: {{ .Values.web.env[0].value | b64enc | quote }}
75+
""",
76+
"templates/web/helpers.tpl": """{{/*
77+
Helper Template
78+
*/}}
79+
{{- define "my-helm.name" -}}
80+
{{- .Chart.Name | replace \"-\" \"_\" | quote -}}
81+
{{- end -}}
82+
83+
{{- define "my-helm.fullname" -}}
84+
{{- if .Chart.Name -}}
85+
{{- .Release.Name | default \"my-release\" | lower | quote }}-{{ .Chart.Name | lower | quote }}
86+
{{- else -}}
87+
{{- .Release.Name | default \"my-release\" | lower | quote }}
88+
{{- end -}}
89+
{{- end -}}
11590
"""
91+
}
92+
93+
# Create directories
94+
for directory in directories:
95+
os.makedirs(os.path.join(project_name, directory), exist_ok=True)
11696

117-
with open(os.path.join(base_path, "templates/web/secret.yaml"), "w") as secret_file:
118-
secret_file.write(secret_yaml_content)
97+
# Create files
98+
for file_path, content in files.items():
99+
with open(os.path.join(project_name, file_path), 'w') as f:
100+
f.write(content)

app/media/MyHelm/Chart.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
apiVersion: v2
2-
name: mychart
2+
name: my-helm
33
description: A Helm chart for Kubernetes
44
version: 0.1.0
5+
appVersion: "1.0"
Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,22 @@
11
apiVersion: apps/v1
22
kind: Deployment
33
metadata:
4-
name: web
4+
name: {{ include "my-helm.fullname" . }}
55
spec:
66
replicas: {{ .Values.web.replicas }}
77
selector:
88
matchLabels:
9-
app: {{ .Release.Name }}
9+
app: {{ include "my-helm.name" . }}
1010
template:
1111
metadata:
1212
labels:
13-
app: {{ .Release.Name }}
13+
app: {{ include "my-helm.name" . }}
1414
spec:
1515
containers:
16-
- name: web
16+
- name: {{ include "my-helm.name" . }}
1717
image: {{ .Values.web.image }}
1818
ports:
19-
- containerPort: {{ .Values.web.service.targetPort }}
19+
- containerPort: {{ .Values.web.service.port }}
2020
env:
2121
- name: ENV1
22-
value: {{ .Values.web.env[0].value }}
23-
volumeClaimTemplates:
24-
- metadata:
25-
name: web-pvc
26-
spec:
27-
accessModes: {{ .Values.web.persistence.accessModes | toYaml }}
28-
resources:
29-
requests:
30-
storage: {{ .Values.web.persistence.size }}
22+
value: Hi
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{{/*
2+
Helper Template
3+
*/}}
4+
{{- define "my-helm.name" -}}
5+
{{- .Chart.Name | replace "-" "_" | quote -}}
6+
{{- end -}}
7+
8+
{{- define "my-helm.fullname" -}}
9+
{{- if .Chart.Name -}}
10+
{{- .Release.Name | default "my-release" | lower | quote }}-{{ .Chart.Name | lower | quote }}
11+
{{- else -}}
12+
{{- .Release.Name | default "my-release" | lower | quote }}
13+
{{- end -}}
14+
{{- end -}}
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: web-secret
4+
name: {{ include "my-helm.fullname" . }}-secret
55
type: Opaque
66
data:
7-
ENV1: aGl
7+
ENV1: {{ .Values.web.env[0].value | b64enc | quote }}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
apiVersion: v1
22
kind: Service
33
metadata:
4-
name: web
4+
name: {{ include "my-helm.fullname" . }}
55
spec:
66
type: ClusterIP
77
ports:
8-
- port: 80
9-
targetPort: {{ .Values.web.service.targetPort }}
8+
- port: {{ .Values.web.service.port }}
109
selector:
11-
app: {{ .Release.Name }}
10+
app: {{ include "my-helm.name" . }}

app/media/MyHelm/values.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
web:
22
image: nginx
33
service:
4-
targetPort: 80
4+
port: 80
55
replicas: 1
66
persistence:
7-
enabled: true
87
size: 1Gi
98
accessModes:
109
- ReadWriteOnce

app/prompt_generators.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def IaC_installation_generator(input : IaCInstallationInput) -> str:
2929

3030
prompt = f"""
3131
generate a clear shell acript about installation {input.service} in {input.os} based on {input.service} document.
32-
without any additional note. just script for installation.
32+
without any additional note. just script for installation. please consider new lines with out any additional comment.
3333
3434
"""
3535
return prompt
@@ -95,6 +95,8 @@ def helm_template_generator(input : HelmTemplateGeneration) -> str:
9595
creating secret.yaml based on environemt variables in the {envs} in the template is very important.
9696
creating deployment.yaml based on our pods in the template is very important.
9797
please set a something default in chart.yaml and values.yaml based on the requirement.
98+
99+
in the final stage, put helpers.tpl in all templates and set the content based on information given.
98100
99101
just Generate a python code without any additional notes or ```python3 entry
100102
"""

0 commit comments

Comments
 (0)