11import os
22
33project_name = "app/media/MyHelm"
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" )
4+ directories = ["charts" , "templates" , "templates/web" ]
5+ files = ["Chart.yaml" , "values.yaml" ]
6+ template_files = ["service.yaml" , "deployment.yaml" , "secrets.yaml" , "helpers.tpl" ]
7+ ingress_enabled = False
8+ stateless_enabled = True
9+ persistence = True
710
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 )
11+ os . makedirs ( project_name , exist_ok = True )
12+
13+ for directory in directories :
14+ os .makedirs (os . path . join ( project_name , directory ) , exist_ok = True )
1215
13- # Create Chart.yaml
1416with open (os .path .join (project_name , "Chart.yaml" ), "w" ) as chart_file :
1517 chart_file .write ("apiVersion: v2\n " )
1618 chart_file .write ("name: MyHelm\n " )
1719 chart_file .write ("description: A Helm chart for Kubernetes\n " )
1820 chart_file .write ("version: 0.1.0\n " )
1921
20- # Create values.yaml
2122with open (os .path .join (project_name , "values.yaml" ), "w" ) as values_file :
2223 values_file .write ("web:\n " )
2324 values_file .write (" image: nginx\n " )
2425 values_file .write (" targetPort: 80\n " )
2526 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 " )
27+ if persistence :
28+ values_file .write (" persistence:\n " )
29+ values_file .write (" size: 1Gi\n " )
30+ values_file .write (" accessModes: \n " )
31+ values_file .write (" - ReadWriteOnce\n " )
32+ if ingress_enabled :
33+ values_file .write (" ingress:\n " )
34+ values_file .write (" enabled: true\n " )
35+ values_file .write (" host: www.example.com\n " )
36+ values_file .write (" stateless:\n " )
37+ values_file .write (" enabled: true\n " )
3038 values_file .write (" env:\n " )
3139 values_file .write (" - name: ENV1\n " )
3240 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 " )
3841
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 " )
42+ for template in template_files :
43+ with open (os .path .join (project_name , "templates" , template ), "w" ) as template_file :
44+ if template == "service.yaml" :
45+ template_file .write ("apiVersion: v1\n " )
46+ template_file .write ("kind: Service\n " )
47+ template_file .write ("metadata:\n " )
48+ template_file .write (" name: {{ .Release.Name }}-web\n " )
49+ template_file .write ("spec:\n " )
50+ template_file .write (" ports:\n " )
51+ template_file .write (" - port: 80\n " )
52+ template_file .write (" targetPort: {{ .Values.web.targetPort }}\n " )
53+ template_file .write (" selector:\n " )
54+ template_file .write (" app: {{ .Release.Name }}-web\n " )
55+
56+ if stateless_enabled and template == "deployment.yaml" :
57+ template_file .write ("apiVersion: apps/v1\n " )
58+ template_file .write ("kind: Deployment\n " )
59+ template_file .write ("metadata:\n " )
60+ template_file .write (" name: {{ .Release.Name }}-web\n " )
61+ template_file .write ("spec:\n " )
62+ template_file .write (" replicas: {{ .Values.web.replicas }}\n " )
63+ template_file .write (" selector:\n " )
64+ template_file .write (" matchLabels:\n " )
65+ template_file .write (" app: {{ .Release.Name }}-web\n " )
66+ template_file .write (" template:\n " )
67+ template_file .write (" metadata:\n " )
68+ template_file .write (" labels:\n " )
69+ template_file .write (" app: {{ .Release.Name }}-web\n " )
70+ template_file .write (" spec:\n " )
71+ template_file .write (" containers:\n " )
72+ template_file .write (" - name: web\n " )
73+ template_file .write (" image: {{ .Values.web.image }}\n " )
74+ template_file .write (" ports:\n " )
75+ template_file .write (" - containerPort: {{ .Values.web.targetPort }}\n " )
76+ template_file .write (" env:\n " )
77+ template_file .write (" - name: {{ .Values.env[0].name }}\n " )
78+ template_file .write (" value: {{ .Values.env[0].value }}\n " )
5279
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 " )
80+ if template == "secrets.yaml" :
81+ template_file .write ("apiVersion: v1\n " )
82+ template_file .write ("kind: Secret\n " )
83+ template_file .write ("metadata:\n " )
84+ template_file .write (" name: {{ .Release.Name }}-secret\n " )
85+ template_file .write ("type: Opaque\n " )
86+ template_file .write ("data:\n " )
87+ template_file .write (" # Insert your base64 encoded secrets here\n " )
8788
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 " )
89+ if template == "helpers.tpl" :
90+ template_file .write ("{{/* Add your helper functions here */}}\n " )
10091
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 " )
92+ if persistence :
93+ with open (os .path .join (project_name , "templates" , "pvc.yaml" ), "w" ) as pvc_file :
94+ pvc_file .write ("apiVersion: v1\n " )
95+ pvc_file .write ("kind: PersistentVolumeClaim\n " )
96+ pvc_file .write ("metadata:\n " )
97+ pvc_file .write (" name: {{ .Release.Name }}-web-pvc\n " )
98+ pvc_file .write ("spec:\n " )
99+ pvc_file .write (" accessModes:\n " )
100+ pvc_file .write (" - {{ .Values.web.persistence.accessModes | first }}\n " )
101+ pvc_file .write (" resources:\n " )
102+ pvc_file .write (" requests:\n " )
103+ pvc_file .write (" storage: {{ .Values.web.persistence.size }}\n " )
110104
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 " )
105+ if ingress_enabled :
106+ with open (os .path .join (project_name , "templates" , "ingress.yaml" ), "w" ) as ingress_file :
107+ ingress_file .write ("apiVersion: networking.k8s.io/v1\n " )
108+ ingress_file .write ("kind: Ingress\n " )
109+ ingress_file .write ("metadata:\n " )
110+ ingress_file .write (" name: {{ .Release.Name }}-web-ingress\n " )
111+ ingress_file .write ("spec:\n " )
112+ ingress_file .write (" rules:\n " )
113+ ingress_file .write (" - host: {{ .Values.web.ingress.host }}\n " )
114+ ingress_file .write (" http:\n " )
115+ ingress_file .write (" paths:\n " )
116+ ingress_file .write (" - path: /\n " )
117+ ingress_file .write (" pathType: Prefix\n " )
118+ ingress_file .write (" backend:\n " )
119+ ingress_file .write (" service:\n " )
120+ ingress_file .write (" name: {{ .Release.Name }}-web\n " )
121+ ingress_file .write (" port:\n " )
122+ ingress_file .write (" number: 80\n " )
0 commit comments