11import 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
76directories = [
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
2714description: A Helm chart for Kubernetes
2815version: 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
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
5635kind: Service
5736metadata:
58- name: web
37+ name: {{ include \" my-helm.fullname \" . }}
5938spec:
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
7346kind: Deployment
7447metadata:
75- name: web
48+ name: {{ include \" my-helm.fullname \" . }}
7649spec:
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
10969kind: Secret
11070metadata:
111- name: web -secret
71+ name: {{ include \" my-helm.fullname \" . }} -secret
11272type: Opaque
11373data:
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 )
0 commit comments