Skip to content

Commit

Permalink
Merge pull request #110 from abolfazl8131/master
Browse files Browse the repository at this point in the history
fix(helm prompt): fix helm prompt to not put json in .yaml
  • Loading branch information
abolfazl8131 authored Nov 29, 2024
2 parents ed0ebc7 + 1bc3fe4 commit e6ae118
Show file tree
Hide file tree
Showing 31 changed files with 436 additions and 491 deletions.
190 changes: 98 additions & 92 deletions app/directory_generators/helm_generator.py
Original file line number Diff line number Diff line change
@@ -1,116 +1,122 @@
import os

project_name = "app/media/MyHelm"
charts_dir = os.path.join(project_name, "charts")
templates_dir = os.path.join(project_name, "templates")
web_dir = os.path.join(templates_dir, "web")
directories = ["charts", "templates", "templates/web"]
files = ["Chart.yaml", "values.yaml"]
template_files = ["service.yaml", "deployment.yaml", "secrets.yaml", "helpers.tpl"]
ingress_enabled = False
stateless_enabled = True
persistence = True

# Create project directories
os.makedirs(charts_dir, exist_ok=True)
os.makedirs(templates_dir, exist_ok=True)
os.makedirs(web_dir, exist_ok=True)
os.makedirs(project_name, exist_ok=True)

for directory in directories:
os.makedirs(os.path.join(project_name, directory), exist_ok=True)

# Create Chart.yaml
with open(os.path.join(project_name, "Chart.yaml"), "w") as chart_file:
chart_file.write("apiVersion: v2\n")
chart_file.write("name: MyHelm\n")
chart_file.write("description: A Helm chart for Kubernetes\n")
chart_file.write("version: 0.1.0\n")

# Create values.yaml
with open(os.path.join(project_name, "values.yaml"), "w") as values_file:
values_file.write("web:\n")
values_file.write(" image: nginx\n")
values_file.write(" targetPort: 80\n")
values_file.write(" replicas: 1\n")
values_file.write(" persistence:\n")
values_file.write(" size: 1Gi\n")
values_file.write(" accessModes:\n")
values_file.write(" - ReadWriteOnce\n")
if persistence:
values_file.write(" persistence:\n")
values_file.write(" size: 1Gi\n")
values_file.write(" accessModes: \n")
values_file.write(" - ReadWriteOnce\n")
if ingress_enabled:
values_file.write(" ingress:\n")
values_file.write(" enabled: true\n")
values_file.write(" host: www.example.com\n")
values_file.write(" stateless:\n")
values_file.write(" enabled: true\n")
values_file.write(" env:\n")
values_file.write(" - name: ENV1\n")
values_file.write(" value: Hi\n")
values_file.write(" ingress:\n")
values_file.write(" enabled: false\n")
values_file.write(" host: www.example.com\n")
values_file.write(" stateless:\n")
values_file.write(" enabled: false\n")

# Create service.yaml
with open(os.path.join(web_dir, "service.yaml"), "w") as service_file:
service_file.write("apiVersion: v1\n")
service_file.write("kind: Service\n")
service_file.write("metadata:\n")
service_file.write(" name: web-service\n")
service_file.write("spec:\n")
service_file.write(" type: ClusterIP\n")
service_file.write(" ports:\n")
service_file.write(" - port: 80\n")
service_file.write(" targetPort: {{ .Values.web.targetPort }}\n")
service_file.write(" selector:\n")
service_file.write(" app: web\n")
for template in template_files:
with open(os.path.join(project_name, "templates", template), "w") as template_file:
if template == "service.yaml":
template_file.write("apiVersion: v1\n")
template_file.write("kind: Service\n")
template_file.write("metadata:\n")
template_file.write(" name: {{ .Release.Name }}-web\n")
template_file.write("spec:\n")
template_file.write(" ports:\n")
template_file.write(" - port: 80\n")
template_file.write(" targetPort: {{ .Values.web.targetPort }}\n")
template_file.write(" selector:\n")
template_file.write(" app: {{ .Release.Name }}-web\n")

if stateless_enabled and template == "deployment.yaml":
template_file.write("apiVersion: apps/v1\n")
template_file.write("kind: Deployment\n")
template_file.write("metadata:\n")
template_file.write(" name: {{ .Release.Name }}-web\n")
template_file.write("spec:\n")
template_file.write(" replicas: {{ .Values.web.replicas }}\n")
template_file.write(" selector:\n")
template_file.write(" matchLabels:\n")
template_file.write(" app: {{ .Release.Name }}-web\n")
template_file.write(" template:\n")
template_file.write(" metadata:\n")
template_file.write(" labels:\n")
template_file.write(" app: {{ .Release.Name }}-web\n")
template_file.write(" spec:\n")
template_file.write(" containers:\n")
template_file.write(" - name: web\n")
template_file.write(" image: {{ .Values.web.image }}\n")
template_file.write(" ports:\n")
template_file.write(" - containerPort: {{ .Values.web.targetPort }}\n")
template_file.write(" env:\n")
template_file.write(" - name: {{ .Values.env[0].name }}\n")
template_file.write(" value: {{ .Values.env[0].value }}\n")

# Create statefulset.yaml (since stateless is false)
with open(os.path.join(web_dir, "statefulset.yaml"), "w") as statefulset_file:
statefulset_file.write("apiVersion: apps/v1\n")
statefulset_file.write("kind: StatefulSet\n")
statefulset_file.write("metadata:\n")
statefulset_file.write(" name: web\n")
statefulset_file.write("spec:\n")
statefulset_file.write(" serviceName: web-service\n")
statefulset_file.write(" replicas: {{ .Values.web.replicas }}\n")
statefulset_file.write(" selector:\n")
statefulset_file.write(" matchLabels:\n")
statefulset_file.write(" app: web\n")
statefulset_file.write(" template:\n")
statefulset_file.write(" metadata:\n")
statefulset_file.write(" labels:\n")
statefulset_file.write(" app: web\n")
statefulset_file.write(" spec:\n")
statefulset_file.write(" containers:\n")
statefulset_file.write(" - name: web\n")
statefulset_file.write(" image: {{ .Values.web.image }}\n")
statefulset_file.write(" ports:\n")
statefulset_file.write(" - containerPort: {{ .Values.web.targetPort }}\n")
statefulset_file.write(" env:\n")
statefulset_file.write(" - name: {{ .Values.web.env[0].name }}\n")
statefulset_file.write(" value: {{ .Values.web.env[0].value }}\n")
statefulset_file.write(" volumeClaimTemplates:\n")
statefulset_file.write(" - metadata:\n")
statefulset_file.write(" name: web-pvc\n")
statefulset_file.write(" spec:\n")
statefulset_file.write(" accessModes:\n")
statefulset_file.write(" - {{ .Values.web.persistence.accessModes[0] }}\n")
statefulset_file.write(" resources:\n")
statefulset_file.write(" requests:\n")
statefulset_file.write(" storage: {{ .Values.web.persistence.size }}\n")
if template == "secrets.yaml":
template_file.write("apiVersion: v1\n")
template_file.write("kind: Secret\n")
template_file.write("metadata:\n")
template_file.write(" name: {{ .Release.Name }}-secret\n")
template_file.write("type: Opaque\n")
template_file.write("data:\n")
template_file.write(" # Insert your base64 encoded secrets here\n")

# Create pvc.yaml
with open(os.path.join(web_dir, "pvc.yaml"), "w") as pvc_file:
pvc_file.write("apiVersion: v1\n")
pvc_file.write("kind: PersistentVolumeClaim\n")
pvc_file.write("metadata:\n")
pvc_file.write(" name: web-pvc\n")
pvc_file.write("spec:\n")
pvc_file.write(" accessModes:\n")
pvc_file.write(" - {{ .Values.web.persistence.accessModes[0] }}\n")
pvc_file.write(" resources:\n")
pvc_file.write(" requests:\n")
pvc_file.write(" storage: {{ .Values.web.persistence.size }}\n")
if template == "helpers.tpl":
template_file.write("{{/* Add your helper functions here */}}\n")

# Create secrets.yaml
with open(os.path.join(web_dir, "secrets.yaml"), "w") as secrets_file:
secrets_file.write("apiVersion: v1\n")
secrets_file.write("kind: Secret\n")
secrets_file.write("metadata:\n")
secrets_file.write(" name: web-secrets\n")
secrets_file.write("type: Opaque\n")
secrets_file.write("data:\n")
secrets_file.write(" # Add your base64 encoded secrets here\n")
if persistence:
with open(os.path.join(project_name, "templates", "pvc.yaml"), "w") as pvc_file:
pvc_file.write("apiVersion: v1\n")
pvc_file.write("kind: PersistentVolumeClaim\n")
pvc_file.write("metadata:\n")
pvc_file.write(" name: {{ .Release.Name }}-web-pvc\n")
pvc_file.write("spec:\n")
pvc_file.write(" accessModes:\n")
pvc_file.write(" - {{ .Values.web.persistence.accessModes | first }}\n")
pvc_file.write(" resources:\n")
pvc_file.write(" requests:\n")
pvc_file.write(" storage: {{ .Values.web.persistence.size }}\n")

# Create helpers.tpl
with open(os.path.join(web_dir, "helpers.tpl"), "w") as helpers_file:
helpers_file.write("# Define any helpers here\n")
helpers_file.write("define \"web.fullname\" \n")
helpers_file.write(" {{ .Release.Name }}-{{ .Values.web.name }} \n")
helpers_file.write("end\n")
if ingress_enabled:
with open(os.path.join(project_name, "templates", "ingress.yaml"), "w") as ingress_file:
ingress_file.write("apiVersion: networking.k8s.io/v1\n")
ingress_file.write("kind: Ingress\n")
ingress_file.write("metadata:\n")
ingress_file.write(" name: {{ .Release.Name }}-web-ingress\n")
ingress_file.write("spec:\n")
ingress_file.write(" rules:\n")
ingress_file.write(" - host: {{ .Values.web.ingress.host }}\n")
ingress_file.write(" http:\n")
ingress_file.write(" paths:\n")
ingress_file.write(" - path: /\n")
ingress_file.write(" pathType: Prefix\n")
ingress_file.write(" backend:\n")
ingress_file.write(" service:\n")
ingress_file.write(" name: {{ .Release.Name }}-web\n")
ingress_file.write(" port:\n")
ingress_file.write(" number: 80\n")
37 changes: 37 additions & 0 deletions app/directory_generators/jcasc_generator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import os
project_name = "app/media/MyJcasc"
jcasc_dir = os.path.join(project_name, "jcasc")
os.makedirs(jcasc_dir, exist_ok=True)

jcasc_content = """
systemMessage: "Welcome to Jenkins configured via JCasC"
author:
name: "admin"
password: "password"
allowSignup: true
allowAnonymousRead: true
cache_size: 1
executors: 1
required_plugins:
- "string"
views:
- list:
name: "All"
authorizationStrategy:
projectMatrix:
grantedPermissions:
- "Overall/Administer:admin"
- "Job/Read:developer"
- "Job/Build:developer"
tools:
git:
installations:
- name: "Default"
home: "/usr/bin/git"
security:
globalJobDslSecurityConfiguration:
useScriptSecurity: false
"""

with open(os.path.join(jcasc_dir, "config.yaml"), "w") as f:
f.write(jcasc_content.strip())
Loading

0 comments on commit e6ae118

Please sign in to comment.