11import os
22
3- project_name = "app/media/MyHelm"
3+ def create_helm_project_structure (base_path ):
4+ project_path = os .path .join (base_path , 'app/media/MyHelm' )
5+ os .makedirs (os .path .join (project_path , 'charts' ), exist_ok = True )
6+ os .makedirs (os .path .join (project_path , 'templates' , 'web' ), exist_ok = True )
47
5- # Define the directory structure and file content
6- directories = [
7- "charts" ,
8- "templates/web"
9- ]
10-
11- files = {
12- "Chart.yaml" : """apiVersion: v2
13- name: my-helm
8+ chart_yaml_content = """apiVersion: v2
9+ name: MyHelm
1410description: A Helm chart for Kubernetes
1511version: 0.1.0
16- appVersion: "1.0 "
17- """ ,
18- "values.yaml" : """web:
12+ "" "
13+
14+ values_yaml_content = """web:
1915 image: nginx
2016 service:
21- port : 80
17+ targetPort : 80
2218 replicas: 1
2319 persistence:
2420 size: 1Gi
3026 ingress:
3127 enabled: false
3228 host: www.example.com
33- """ ,
34- "templates/web/service.yaml" : """apiVersion: v1
29+ """
30+
31+ service_yaml_content = """apiVersion: v1
3532kind: Service
3633metadata:
37- name: {{ include \" my-helm .fullname\ " . }}
34+ name: {{ include "MyHelm .fullname" . }}-web
3835spec:
3936 type: ClusterIP
4037 ports:
41- - port: {{ .Values.web.service.port }}
38+ - port: {{ .Values.web.service.targetPort }}
4239 selector:
43- app: {{ include \" my-helm.name\" . }}
44- """ ,
45- "templates/web/deployment.yaml" : """apiVersion: apps/v1
40+ app: {{ include "MyHelm.name" . }}
41+ """
42+
43+ deployment_yaml_content = """apiVersion: apps/v1
4644kind: Deployment
4745metadata:
48- name: {{ include \" my-helm .fullname\ " . }}
46+ name: {{ include "MyHelm .fullname" . }}-web
4947spec:
5048 replicas: {{ .Values.web.replicas }}
51- selector:
52- matchLabels:
53- app: {{ include \" my-helm.name\" . }}
5449 template:
5550 metadata:
5651 labels:
57- app: {{ include \" my-helm .name\ " . }}
52+ app: {{ include "MyHelm .name" . }}
5853 spec:
5954 containers:
60- - name: {{ include \" my-helm.name \" . }}
55+ - name: web
6156 image: {{ .Values.web.image }}
6257 ports:
63- - containerPort: {{ .Values.web.service.port }}
58+ - containerPort: {{ .Values.web.service.targetPort }}
6459 env:
65- - name: ENV1
66- value: Hi
67- """ ,
68- "templates/web/secret.yaml" : """apiVersion: v1
60+ {{- range .Values.web.env }}
61+ - name: {{ .name }}
62+ value: {{ .value }}
63+ {{- end }}
64+ """
65+
66+ secret_yaml_content = """apiVersion: v1
6967kind: Secret
7068metadata:
71- name: {{ include \" my-helm .fullname\ " . }}-secret
69+ name: {{ include "MyHelm .fullname" . }}-web-env
7270type: Opaque
7371data:
74- ENV1: {{ .Values.web.env[0].value | b64enc | quote }}
75- """ ,
76- "templates/web/helpers.tpl" : """{{/*
77- Helper Template
72+ ENV1: {{ .Values.web.env | toJson | b64enc | quote }}
73+ """
74+
75+ helpers_tpl_content = """{{/*
76+ Expand the name of the chart.
7877*/}}
79- {{- define "my-helm .name" -}}
80- {{- .Chart.Name | replace \" - \" \" _ \ " | quote -}}
78+ {{- define "MyHelm .name" -}}
79+ {{- .Chart.Name | replace "-" "_ " | lower -}}
8180{{- end -}}
8281
83- {{- define "my-helm.fullname" -}}
82+ {{/*
83+ Create a default fully qualified domain name
84+ */}}
85+ {{- define "MyHelm.fullname" -}}
8486{{- if .Chart.Name -}}
85- {{- .Release.Name | default \" my-release \" | lower | quote }}-{{ .Chart.Name | lower | quote }}
87+ {{- .Release.Name | lower | replace "-" "_" | trimSuffix "-" | append (include "MyHelm.name" . | lower) | toLower - }}
8688{{- else -}}
87- {{- .Release.Name | default \" my-release \" | lower | quote }}
89+ {{- .Release.Name | lower - }}
8890{{- end -}}
8991{{- end -}}
9092"""
91- }
9293
93- # Create directories
94- for directory in directories :
95- os .makedirs (os .path .join (project_name , directory ), exist_ok = True )
94+ with open (os .path .join (project_path , 'Chart.yaml' ), 'w' ) as file :
95+ file .write (chart_yaml_content )
96+
97+ with open (os .path .join (project_path , 'values.yaml' ), 'w' ) as file :
98+ file .write (values_yaml_content )
99+
100+ with open (os .path .join (project_path , 'templates' , 'web' , 'service.yaml' ), 'w' ) as file :
101+ file .write (service_yaml_content )
102+
103+ with open (os .path .join (project_path , 'templates' , 'web' , 'deployment.yaml' ), 'w' ) as file :
104+ file .write (deployment_yaml_content )
105+
106+ with open (os .path .join (project_path , 'templates' , 'web' , 'secret.yaml' ), 'w' ) as file :
107+ file .write (secret_yaml_content )
108+
109+ with open (os .path .join (project_path , 'templates' , 'web' , 'helpers.tpl' ), 'w' ) as file :
110+ file .write (helpers_tpl_content )
96111
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 )
112+ create_helm_project_structure ('.' )
0 commit comments