Skip to content
Snippets Groups Projects
Commit 27191090 authored by Sigmund, Dominik's avatar Sigmund, Dominik
Browse files

Added k8s files

parent 64fd3c3c
No related branches found
No related tags found
No related merge requests found
Pipeline #82198 canceled
......@@ -43,19 +43,36 @@ func InitProject(name string, dbType string) {
// Create LICENSE.md file from template
createLicenseFile(slug, name)
// Create .gitignore file from template
createGitignoreFile(slug)
// Create .dockerignore file from template
createDockerignoreFile(slug)
// Create k8s/persistentvolumeclaim.template.yaml file from template
createK8sPersistentVolumeFile(slug)
// Create k8s/persistentvolumeclaim.template.yaml file from template
createK8sPersistentVolumeClaimFile(slug)
// Create k8s/service.template.yaml file from template
createK8sServiceFile(slug)
// Create k8s/deployment.template.yaml file from template based on dbType
createK8sDeploymentFile(slug, dbType)
// TODO: copy base files from https://gitlab.ard.de/br/buzzboard/database/-/tree/develop?ref_type=heads
/*
- .gitignore
- .dockerignore
- .sqlfluff (by database type)
- Containerfile (by database type)
- README.md
- CONTRIBUTING.md
- CHANGELOG.md
- import-sql.sh (by database type)
- .gilab-ci.yml (by database type) (also import tests from blessing of the day)
- k8s/deployment.template.yaml
- k8s/service.template.yaml
- k8s/persistentVolume.template.yaml
- k8s/persistentVolumeClaim.template.yaml
- sql/database.sql (by database type)
*/
......@@ -140,6 +157,74 @@ func createLicenseFile(projectDir, projectName string) {
}
}
// createGitignoreFile creates the .gitignore file from template
func createGitignoreFile(projectDir string) {
err := templates.CreateFileFromTemplate(projectDir, "", ".gitignore", "gitignore", nil)
if err != nil {
fmt.Printf("Error creating .gitignore file: %v\n", err)
} else {
fmt.Printf("Created file: %s/.gitignore\n", projectDir)
}
}
// createDockerignoreFile creates the .dockerignore file from template
func createDockerignoreFile(projectDir string) {
err := templates.CreateFileFromTemplate(projectDir, "", ".dockerignore", ".dockerignore", nil)
if err != nil {
fmt.Printf("Error creating .dockerignore file: %v\n", err)
} else {
fmt.Printf("Created file: %s/.dockerignore\n", projectDir)
}
}
// createK8sPersistentVolumeClaimFile creates the k8s/persistentVolume.template.yaml file from template
func createK8sPersistentVolumeFile(projectDir string) {
err := templates.CreateFileFromTemplate(projectDir, "k8s", "persistentVolume.template.yaml", "k8s/persistentVolume.template.yaml", nil)
if err != nil {
fmt.Printf("Error creating k8s/persistentVolume.template.yaml file: %v\n", err)
} else {
fmt.Printf("Created file: %s/k8s/persistentVolume.template.yaml\n", projectDir)
}
}
// createK8sPersistentVolumeClaimFile creates the k8s/persistentVolumeClaim.template.yaml file from template
func createK8sPersistentVolumeClaimFile(projectDir string) {
err := templates.CreateFileFromTemplate(projectDir, "k8s", "persistentVolumeClaim.template.yaml", "k8s/persistentVolumeClaim.template.yaml", nil)
if err != nil {
fmt.Printf("Error creating k8s/persistentVolumeClaim.template.yaml file: %v\n", err)
} else {
fmt.Printf("Created file: %s/k8s/persistentVolumeClaim.template.yaml\n", projectDir)
}
}
// createK8sPerviceFile creates the k8s/service.template.yaml file from template
func createK8sServiceFile(projectDir string) {
err := templates.CreateFileFromTemplate(projectDir, "k8s", "service.template.yaml", "k8s/service.template.yaml", nil)
if err != nil {
fmt.Printf("Error creating k8s/service.template.yaml file: %v\n", err)
} else {
fmt.Printf("Created file: %s/k8s/service.template.yaml\n", projectDir)
}
}
// createK8sDeploymentFile creates the k8s/deployment.template.yaml file from the appropriate template
func createK8sDeploymentFile(projectDir, dbType string) {
templateFile := "k8s/deployment.mysql.template.yaml"
if dbType == "postgres" {
templateFile = "k8s/deployment.postgres.template.yaml"
}
err := templates.CreateFileFromTemplate(projectDir, "k8s", "deployment.template.yaml", templateFile, nil)
if err != nil {
fmt.Printf("Error creating k8s/deployment.template.yaml file: %v\n", err)
} else {
fmt.Printf("Created file: %s/k8s/deployment.template.yaml\n", projectDir)
}
}
// Help returns the help information for the init command
func InitHelp() string {
return "init [name] [--type mysql|postgres] : Create a new project with the specified name and database type."
......
# .dockerignore
# Node modules
node_modules/
# Logs
logs
*.log
# Environment files
.env
# Database files
*.dbml
# Kubernetes files
k8s/
# Docs
README.md
LICENSE.md
CHANGELOG.md
CONTRIBUTING.md
# Temporary files
tmp/
temp/
*.tmp
*.temp
# Build output
dist/
build/
\ No newline at end of file
# .gitignore
# Node modules
node_modules/
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Environment files
.env
# Temporary files
tmp/
temp/
*.tmp
*.temp
# IDE specific files
.vscode/
.idea/
# Build output
dist/
build/
\ No newline at end of file
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${CI_PROJECT_NAME}
namespace: ${K8S_NAMESPACE}
labels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/version: ${VERSION}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
spec:
replicas: ${REPLICAS}
strategy:
type: RollingUpdate
selector:
matchLabels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
template:
metadata:
name: ${CI_PROJECT_NAME}_
namespace: ${K8S_NAMESPACE}
labels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/version: ${VERSION}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
spec:
volumes:
- name: ${CI_PROJECT_NAME}
persistentVolumeClaim:
claimName: ${CI_PROJECT_NAME}
containers:
- name: ${CI_PROJECT_NAME}
image: ${CI_REGISTRY_IMAGE}:${TAG}
imagePullPolicy: Always
ports:
- containerPort: ${PORT}
volumeMounts:
- name: ${CI_PROJECT_NAME}
mountPath: /var/lib/mysql
livenessProbe:
exec:
command:
- bash
- -c
- mysqladmin -u ${DB_USER} -p${DB_PASSWORD} ping
periodSeconds: 10
startupProbe:
exec:
command:
- bash
- -c
- mysql -u ${DB_USER} -p${DB_PASSWORD} -e "SELECT 1"
periodSeconds: 10
failureThreshold: 60 # total 60x10s = 600s = 10min to initialize
\ No newline at end of file
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${CI_PROJECT_NAME}
namespace: ${K8S_NAMESPACE}
labels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/version: ${VERSION}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
spec:
replicas: ${REPLICAS}
strategy:
type: RollingUpdate
selector:
matchLabels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
template:
metadata:
name: ${CI_PROJECT_NAME}
namespace: ${K8S_NAMESPACE}
labels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/version: ${VERSION}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
spec:
volumes:
- name: ${CI_PROJECT_NAME}
persistentVolumeClaim:
claimName: ${CI_PROJECT_NAME}
containers:
- name: ${CI_PROJECT_NAME}
image: ${CI_REGISTRY_IMAGE}:${TAG}
imagePullPolicy: Always
ports:
- containerPort: ${PORT}
volumeMounts:
- name: ${CI_PROJECT_NAME}
mountPath: /var/lib/postgresql/data
livenessProbe:
exec:
command:
- bash
- -c
- pg_isready -U ${DB_USER}
periodSeconds: 10
startupProbe:
exec:
command:
- bash
- -c
- pg_isready -U ${DB_USER}
periodSeconds: 10
failureThreshold: 60 # total 60x10s = 600s = 10min to initialize
\ No newline at end of file
apiVersion: v1
kind: PersistentVolume
metadata:
name: ${CI_PROJECT_NAME}
spec:
storageClassName: ${CI_PROJECT_NAME}
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
nfs:
server: ${NFS_SERVER}
path: /${NFS_VOLUME}/${NFS_PATH}
mountOptions:
- nfsvers=3.0
\ No newline at end of file
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
name: ${CI_PROJECT_NAME}
namespace: ${NAMESPACE}
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: ${NFS_SIZE}Gi
volumeName: ${CI_PROJECT_NAME}
storageClassName: ${CI_PROJECT_NAME}
\ No newline at end of file
apiVersion: v1
kind: Service
metadata:
name: ${CI_PROJECT_NAME}
namespace: ${K8S_NAMESPACE}
labels:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
spec:
ports:
- port: ${PORT}
protocol: TCP
targetPort: ${PORT}
name: ${CI_PROJECT_NAME}
selector:
app.kubernetes.io/name: ${CI_PROJECT_NAME}
app.kubernetes.io/managed-by: cicd
app.kubernetes.io/created-by: gitlab
\ No newline at end of file
......@@ -8,7 +8,7 @@ import (
"fmt"
)
//go:embed *.tmpl
//go:embed *.tmpl k8s/*.tmpl
var templateFS embed.FS
// LoadTemplate loads a template from the embedded filesystem
......@@ -21,13 +21,13 @@ func LoadTemplate(tmplName string) (*template.Template, error) {
}
// CreateFileFromTemplate creates a file from a template
func CreateFileFromTemplate(bookDir, subDir, filename, tmplName string, data interface{}) error {
func CreateFileFromTemplate(baseDir, subDir, filename, tmplName string, data interface{}) error {
tmpl, err := LoadTemplate(tmplName)
if err != nil {
return err
}
filePath := filepath.Join(bookDir, subDir, filename)
filePath := filepath.Join(baseDir, subDir, filename)
file, err := os.Create(filePath)
if err != nil {
return err
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment