From 2b76d1d969c215a814b91964b2004f5ec26e8e7f Mon Sep 17 00:00:00 2001 From: zhenyus Date: Tue, 25 Feb 2025 02:14:16 +0800 Subject: [PATCH] feat(helm): add Helm charts for chat and freeleaps services with initial configurations Signed-off-by: zhenyus --- .../devops/DependenciesResolver.groovy | 23 +++++ .../devops/enums/DependenciesManager.groovy | 3 + .../alpha/ci/freeleaps2-frontend/Jenkinsfile | 78 +++++++++++++++ freeleaps/helm-pkg/chat/Chart.yaml | 6 ++ .../chat/templates/chat/certificate.yaml | 27 +++++ .../chat/templates/chat/chat-config.yaml | 33 +++++++ .../chat/templates/chat/deployment.yaml | 98 +++++++++++++++++++ .../helm-pkg/chat/templates/chat/ingress.yaml | 36 +++++++ .../helm-pkg/chat/templates/chat/service.yaml | 26 +++++ freeleaps/helm-pkg/chat/values.alpha.yaml | 77 +++++++++++++++ freeleaps/helm-pkg/chat/values.yaml | 87 ++++++++++++++++ freeleaps/helm-pkg/freeleaps/Chart.yaml | 6 ++ .../templates/freeleaps/certificate.yaml | 27 +++++ .../templates/freeleaps/deployment.yaml | 98 +++++++++++++++++++ .../templates/freeleaps/freeleaps-config.yaml | 33 +++++++ .../templates/freeleaps/ingress.yaml | 36 +++++++ .../templates/freeleaps/service.yaml | 26 +++++ .../helm-pkg/freeleaps/values.alpha.yaml | 77 +++++++++++++++ freeleaps/helm-pkg/freeleaps/values.yaml | 87 ++++++++++++++++ .../templates/frontend/certificate.yaml | 27 +++++ .../templates/frontend/deployment.yaml | 98 +++++++++++++++++++ .../templates/frontend/frontend-config.yaml | 11 +++ .../frontend/templates/frontend/ingress.yaml | 36 +++++++ .../frontend/templates/frontend/service.yaml | 26 +++++ freeleaps/helm-pkg/frontend/values.alpha.yaml | 58 +++++++++++ freeleaps/helm-pkg/frontend/values.yaml | 41 ++++++++ 26 files changed, 1181 insertions(+) create mode 100644 freeleaps/helm-pkg/chat/Chart.yaml create mode 100644 freeleaps/helm-pkg/chat/templates/chat/certificate.yaml create mode 100644 freeleaps/helm-pkg/chat/templates/chat/chat-config.yaml create mode 100644 freeleaps/helm-pkg/chat/templates/chat/deployment.yaml create mode 100644 freeleaps/helm-pkg/chat/templates/chat/ingress.yaml create mode 100644 freeleaps/helm-pkg/chat/templates/chat/service.yaml create mode 100644 freeleaps/helm-pkg/chat/values.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/Chart.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/templates/freeleaps/certificate.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/templates/freeleaps/deployment.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/templates/freeleaps/freeleaps-config.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/templates/freeleaps/ingress.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/templates/freeleaps/service.yaml create mode 100644 freeleaps/helm-pkg/freeleaps/values.yaml create mode 100644 freeleaps/helm-pkg/frontend/templates/frontend/certificate.yaml create mode 100644 freeleaps/helm-pkg/frontend/templates/frontend/deployment.yaml create mode 100644 freeleaps/helm-pkg/frontend/templates/frontend/frontend-config.yaml create mode 100644 freeleaps/helm-pkg/frontend/templates/frontend/ingress.yaml create mode 100644 freeleaps/helm-pkg/frontend/templates/frontend/service.yaml create mode 100644 freeleaps/helm-pkg/frontend/values.yaml diff --git a/first-class-pipeline/src/com/freeleaps/devops/DependenciesResolver.groovy b/first-class-pipeline/src/com/freeleaps/devops/DependenciesResolver.groovy index 27524a16..c40a764b 100644 --- a/first-class-pipeline/src/com/freeleaps/devops/DependenciesResolver.groovy +++ b/first-class-pipeline/src/com/freeleaps/devops/DependenciesResolver.groovy @@ -119,6 +119,29 @@ class DependenciesResolver { } } + break + case DependenciesManager.PNPM: + if (configurations.pnpmPackageJsonFile == null || configurations.pnpmPackageJsonFile.isEmpty()) { + steps.error("pnpmPackageJsonFile is required when using PNPM as dependencies manager") + } + + def packageJsonFile = configurations.pnpmPackageJsonFile + + this.getNodeVersion() + + if (cachingEnabled) { + steps.dir(this.workspace) { + steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', includes: '**/*', path: ".${configurations.name}-pnpm-cache", cacheValidityDecidingFile: 'pnpm-lock.yaml']]) { + steps.sh "mkdir -p ${configurations.name}-pnpm-cache" + steps.sh "pnpm install --store-dir ${configurations.name}-pnpm-cache --prefer-offline" + } + } + } else { + steps.dir(this.workspace) { + steps.sh "pnpm install" + } + } + break default: steps.error("Unsupported dependencies manager") diff --git a/first-class-pipeline/src/com/freeleaps/devops/enums/DependenciesManager.groovy b/first-class-pipeline/src/com/freeleaps/devops/enums/DependenciesManager.groovy index a8afe73c..c3dee79f 100644 --- a/first-class-pipeline/src/com/freeleaps/devops/enums/DependenciesManager.groovy +++ b/first-class-pipeline/src/com/freeleaps/devops/enums/DependenciesManager.groovy @@ -4,6 +4,7 @@ enum DependenciesManager { PIP('pip'), NPM('npm'), YARN('yarn'), + PNPM('pnpm'), UNKNOWN('Unknown') final String manager @@ -20,6 +21,8 @@ enum DependenciesManager { return DependenciesManager.NPM case 'yarn': return DependenciesManager.YARN + case 'pnpm': + return DependenciesManager.PNPM default: return DependenciesManager.UNKNOWN } diff --git a/freeleaps/alpha/ci/freeleaps2-frontend/Jenkinsfile b/freeleaps/alpha/ci/freeleaps2-frontend/Jenkinsfile index e69de29b..c8f40d05 100644 --- a/freeleaps/alpha/ci/freeleaps2-frontend/Jenkinsfile +++ b/freeleaps/alpha/ci/freeleaps2-frontend/Jenkinsfile @@ -0,0 +1,78 @@ +library 'first-class-pipeline' + +executeFreeleapsPipeline { + serviceName = 'freeleaps' + environmentSlug = 'alpha' + serviceGitBranch = 'develop' + serviceGitRepo = "https://freeleaps@dev.azure.com/freeleaps/freeleaps2-frontend/_git/freeleaps2-frontend" + serviceGitRepoType = 'monorepo' + serviceGitCredentialsId = 'freeleaps-azure-devops-credentials' + executeMode = 'on-demand' + commitMessageLintEnabled = false + components = [ + [ + name: 'chat', + root: 'apps/chat', + language: 'python', + dependenciesManager: 'pip', + requirementsFile: 'requirements.txt', + buildCacheEnabled: true, + buildAgentImage: 'python:3.10-slim-buster', + buildArtifacts: ['.'], + lintEnabled: false, + sastEnabled: false, + imageRegistry: 'docker.io', + imageRepository: 'freeleaps', + imageName: 'devsvc', + imageBuilder: 'dind', + dockerfilePath: 'Dockerfile', + imageBuildRoot: '.', + imageReleaseArchitectures: ['linux/amd64', 'linux/arm64/v8'], + registryCredentialsId: 'freeleaps-devops-docker-hub-credentials', + semanticReleaseEnabled: true + ], + [ + name: 'freeleaps', + root: 'apps/freeleaps', + language: 'python', + dependenciesManager: 'pip', + requirementsFile: 'requirements.txt', + buildCacheEnabled: true, + buildAgentImage: 'python:3.10-slim-buster', + buildArtifacts: ['.'], + lintEnabled: false, + sastEnabled: false, + imageRegistry: 'docker.io', + imageRepository: 'freeleaps', + imageName: 'devsvc', + imageBuilder: 'dind', + dockerfilePath: 'Dockerfile', + imageBuildRoot: '.', + imageReleaseArchitectures: ['linux/amd64', 'linux/arm64/v8'], + registryCredentialsId: 'freeleaps-devops-docker-hub-credentials', + semanticReleaseEnabled: true + ], + [ + name: 'frontend', + root: 'frontend', + language: 'javascript', + dependenciesManager: 'pnpm', + npmPackageJsonFile: 'package.json', + buildCacheEnabled: true, + buildAgentImage: 'node:lts', + buildCommand: 'pnpm -r build', + buildArtifacts: ['freeleaps/dist'], + lintEnabled: false, + sastEnabled: false, + imageRegistry: 'docker.io', + imageRepository: 'freeleaps', + imageName: 'frontend', + imageBuilder: 'dind', + dockerfilePath: 'Dockerfile', + imageBuildRoot: '.', + imageReleaseArchitectures: ['linux/amd64', 'linux/arm64/v8'], + registryCredentialsId: 'freeleaps-devops-docker-hub-credentials', + semanticReleaseEnabled: true + ] + ] +} \ No newline at end of file diff --git a/freeleaps/helm-pkg/chat/Chart.yaml b/freeleaps/helm-pkg/chat/Chart.yaml new file mode 100644 index 00000000..3253a288 --- /dev/null +++ b/freeleaps/helm-pkg/chat/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: chat +description: A Helm Chart of chat service, which part of Freeleaps Platform, powered by Freeleaps. +type: application +version: 0.0.1 +appVersion: "0.0.1" diff --git a/freeleaps/helm-pkg/chat/templates/chat/certificate.yaml b/freeleaps/helm-pkg/chat/templates/chat/certificate.yaml new file mode 100644 index 00000000..5067d104 --- /dev/null +++ b/freeleaps/helm-pkg/chat/templates/chat/certificate.yaml @@ -0,0 +1,27 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseCertificate := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $ingress := .Values.chat.ingresses }} +{{- if not $ingress.tls.exists }} +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ $ingress.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $ingress.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseCertificate }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: + commonName: {{ $ingress.host }} + dnsNames: + - {{ $ingress.host }} + issuerRef: + name: {{ $ingress.tls.issuerRef.name }} + kind: {{ $ingress.tls.issuerRef.kind }} + secretName: {{ $ingress.tls.name }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/chat/templates/chat/chat-config.yaml b/freeleaps/helm-pkg/chat/templates/chat/chat-config.yaml new file mode 100644 index 00000000..15f71100 --- /dev/null +++ b/freeleaps/helm-pkg/chat/templates/chat/chat-config.yaml @@ -0,0 +1,33 @@ +apiVersion: v1 +kind: Secret +metadata: + name: chat-config + namespace: {{ .Release.Namespace }} +type: Opaque +data: + TZ: {{ .Values.chat.configs.tz | b64enc | quote }} + APP_NAME: {{ .Values.chat.configs.appName | b64enc | quote }} + SERVICE_API_ACCESS_HOST: {{ .Values.chat.configs.serviceApiAccessHost | b64enc | quote }} + SERVICE_API_ACCESS_PORT: {{ .Values.chat.configs.serviceApiAccessPort | toString | b64enc }} + MONGODB_NAME: {{ .Values.chat.configs.mongodbName | b64enc | quote }} + MONGODB_URI: {{ .Values.chat.configs.mongodbUri | b64enc | quote }} + MONGODB_PORT: {{ .Values.chat.configs.mongodbPort | toString | b64enc }} + EMAIL_FROM: {{ .Values.chat.configs.emailFrom | b64enc | quote }} + SITE_URL_ROOT: {{ .Values.chat.configs.siteUrlRoot | b64enc | quote }} + JWT_SECRET_KEY: {{ .Values.chat.configs.jwtSecretKey | b64enc | quote }} + JWT_ALGORITHM: {{ .Values.chat.configs.jwtAlgorithm | b64enc | quote }} + STRIPE_API_KEY: {{ .Values.chat.configs.stripeApiKey | b64enc | quote }} + STRIPE_WEBHOOK_SECRET: {{ .Values.chat.configs.stripeWebhookSecret | b64enc | quote }} + STRIPE_ACCOUNT_WEBHOOK_SECRET: {{ .Values.chat.configs.stripeAccountWebhookSecret | b64enc | quote }} + RABBITMQ_HOST: {{ .Values.chat.configs.rabbitmqHost | b64enc | quote }} + RABBITMQ_PORT: {{ .Values.chat.configs.rabbitmqPort | toString | b64enc }} + RABBITMQ_USERNAME: {{ .Values.chat.configs.rabbitmqUsername | b64enc | quote }} + RABBITMQ_PASSWORD: {{ .Values.chat.configs.rabbitmqPassword | b64enc | quote }} + FREELEAPS_DEVSVC_ENDPOINT: {{ .Values.chat.configs.freeleapsDevsvcEndpoint | b64enc | quote }} + FREELEAPS_CONTENT_ENDPOINT: {{ .Values.chat.configs.freeleapsContentEndpoint | b64enc | quote }} + FREELEAPS_CENTRAL_STORAGE_ENDPOINT: {{ .Values.chat.configs.freeleapsCentralStorageEndpoint | b64enc | quote }} + FREELEAPS_CHAT_ENDPOINT: {{ .Values.chat.configs.freeleapsChatEndpoint | b64enc | quote }} + FREELEAPS_PAYMENT_ENDPOINT: {{ .Values.chat.configs.freeleapsPaymentEndpoint | b64enc | quote }} + FREELEAPS_AILAB_ENDPOINT: {{ .Values.chat.configs.freeleapsAilabEndpoint | b64enc | quote }} + FREELEAPS_ENV: {{ .Values.chat.configs.freeleapsEnv | b64enc | quote }} + CERT_PATH: {{ .Values.chat.configs.certPath | b64enc | quote }} diff --git a/freeleaps/helm-pkg/chat/templates/chat/deployment.yaml b/freeleaps/helm-pkg/chat/templates/chat/deployment.yaml new file mode 100644 index 00000000..853de534 --- /dev/null +++ b/freeleaps/helm-pkg/chat/templates/chat/deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/name: "chat" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + name: "chat" + namespace: {{ .Release.Namespace | quote }} +spec: + selector: + matchLabels: + app.kubernetes.io/name: "chat" + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + replicas: {{ .Values.chat.replicas }} + template: + metadata: + labels: + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/name: "chat" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: "chat" + image: "{{ coalesce .Values.chat.image.registry .Values.global.registry "docker.io"}}/{{ coalesce .Values.chat.image.repository .Values.global.repository }}/{{ .Values.chat.image.name }}:{{ .Values.chat.image.tag | default "latest" }}" + imagePullPolicy: {{ .Values.chat.image.imagePullPolicy | default "IfNotPresent" }} + ports: + {{- range $port := .Values.chat.ports }} + - containerPort: {{ $port.containerPort }} + name: {{ $port.name }} + protocol: {{ $port.protocol }} + {{- end }} + {{- if .Values.chat.resources }} + resources: + {{- toYaml .Values.chat.resources | nindent 12 }} + {{- end }} + {{- if .Values.chat.probes }} + {{- if and (.Values.chat.probes.liveness) (eq .Values.chat.probes.liveness.type "httpGet") }} + livenessProbe: + httpGet: + path: {{ .Values.chat.probes.liveness.config.path }} + port: {{ .Values.chat.probes.liveness.config.port }} + {{- if .Values.chat.probes.liveness.config.initialDelaySeconds }} + initialDelaySeconds: {{ .Values.chat.probes.liveness.config.initialDelaySeconds }} + {{- end }} + {{- if .Values.chat.probes.liveness.config.periodSeconds }} + periodSeconds: {{ .Values.chat.probes.liveness.config.periodSeconds }} + {{- end }} + {{- if .Values.chat.probes.liveness.config.timeoutSeconds }} + timeoutSeconds: {{ .Values.chat.probes.liveness.config.timeoutSeconds }} + {{- end }} + {{- if .Values.chat.probes.liveness.config.successThreshold }} + successThreshold: {{ .Values.chat.probes.liveness.config.successThreshold }} + {{- end }} + {{- if .Values.chat.probes.liveness.config.failureThreshold }} + failureThreshold: {{ .Values.chat.probes.liveness.config.failureThreshold }} + {{- end }} + {{- if .Values.chat.probes.liveness.config.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.chat.probes.liveness.config.terminationGracePeriodSeconds }} + {{- end }} + {{- end }} + {{- if and (.Values.chat.probes.readiness) (eq .Values.chat.probes.readiness.type "httpGet") }} + readinessProbe: + httpGet: + path: {{ .Values.chat.probes.readiness.config.path }} + port: {{ .Values.chat.probes.readiness.config.port }} + {{- if .Values.chat.probes.readiness.config.initialDelaySeconds }} + initialDelaySeconds: {{ .Values.chat.probes.readiness.config.initialDelaySeconds }} + {{- end }} + {{- if .Values.chat.probes.readiness.config.periodSeconds }} + periodSeconds: {{ .Values.chat.probes.readiness.config.periodSeconds }} + {{- end }} + {{- if .Values.chat.probes.readiness.config.timeoutSeconds }} + timeoutSeconds: {{ .Values.chat.probes.readiness.config.timeoutSeconds }} + {{- end }} + {{- if .Values.chat.probes.readiness.config.successThreshold }} + successThreshold: {{ .Values.chat.probes.readiness.config.successThreshold }} + {{- end }} + {{- if .Values.chat.probes.readiness.config.failureThreshold }} + failureThreshold: {{ .Values.chat.probes.readiness.config.failureThreshold }} + {{- end }}:% + {{- if .Values.chat.probes.readiness.config.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.chat.probes.readiness.config.terminationGracePeriodSeconds }} + {{- end }} + {{- end }} + {{- end}} + env: + {{- range $key, $value := .Values.chat.configs }} + - name: {{ $key | snakecase | upper }} + valueFrom: + secretKeyRef: + name: chat-config + key: {{ $key | snakecase | upper }} + {{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/chat/templates/chat/ingress.yaml b/freeleaps/helm-pkg/chat/templates/chat/ingress.yaml new file mode 100644 index 00000000..8fed2b70 --- /dev/null +++ b/freeleaps/helm-pkg/chat/templates/chat/ingress.yaml @@ -0,0 +1,36 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseIngress := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $ingress := .Values.chat.ingresses }} +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ $ingress.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $ingress.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseIngress }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: +{{- if $ingress.class }} + ingressClassName: {{ $ingress.class }} +{{- end }} +{{- if $ingress.tls }} + tls: + - hosts: + - {{ $ingress.host }} +{{- if $ingress.tls.exists }} + secretName: {{ $ingress.tls.secretRef.name }} +{{- else }} + secretName: {{ $ingress.tls.name }} +{{- end }} +{{- end }} + rules: + - host: {{ $ingress.host }} + http: + paths: +{{- toYaml $ingress.rules | nindent 10 }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/chat/templates/chat/service.yaml b/freeleaps/helm-pkg/chat/templates/chat/service.yaml new file mode 100644 index 00000000..b7bc1c46 --- /dev/null +++ b/freeleaps/helm-pkg/chat/templates/chat/service.yaml @@ -0,0 +1,26 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseService := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $service := .Values.chat.services }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ $service.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $service.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: + ports: + - port: {{ $service.port }} + targetPort: {{ $service.targetPort }} + selector: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: "chat" + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/chat/values.alpha.yaml b/freeleaps/helm-pkg/chat/values.alpha.yaml index e69de29b..3b695d3e 100644 --- a/freeleaps/helm-pkg/chat/values.alpha.yaml +++ b/freeleaps/helm-pkg/chat/values.alpha.yaml @@ -0,0 +1,77 @@ +global: + registry: docker.io + repository: freeleaps + nodeSelector: {} +chat: + replicas: 1 + image: + registry: + repository: freeleaps + name: chat + tag: 1.0.0 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8012 + protocol: TCP + resources: + requests: + cpu: "0.5" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + # FIXME: Wait until the developers implements the probes APIs + probes: {} + services: + - name: chat-service + type: ClusterIP + port: 8012 + targetPort: 8012 + # Defaults to {}, which means doesn't have any ingress + ingresses: + - name: chat-ingress + host: alpha.chat.freeleaps.mathmast.com + class: nginx + rules: + - path: / + pathType: Prefix + backend: + service: + name: chat-service + port: + number: 8012 + tls: + exists: false + issuerRef: + name: mathmast-dot-com + kind: ClusterIssuer + name: alpha.chat.freeleaps.mathmast.com-cert + configs: + tz: "UTC" + appName: "chat" + serviceApiAccessHost: "0.0.0.0" + serviceApiAccessPort: 8012 + mongodbName: freeleaps2 + mongodbUri: mongodb://freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster:27017/ + mongodbHost: freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster + mongodbPort: 27017 + emailFrom: "freeleaps@freeleaps.com" + siteUrlRoot: "https://alpha.freeleaps.mathmast.com" + jwtSecretKey: 8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b + jwtAlgorithm: HS256 + stripeApiKey: sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd + stripeWebhookSecret: "" + stripeAccountWebhookSecret: "" + rabbitmqHost: freeleaps-alpha-rabbitmq.freeleaps-alpha.svc.freeleaps.cluster + rabbitmqPort: 5672 + rabbitmqUsername: user + rabbitmqPassword: 9dPrkjD8KENevfjT + freeleapsDevsvcEndpoint: "https://alpha.devsvc.freeleaps.mathmast.com" + freeleapsContentEndpoint: "https://alpha.content.freeleaps.mathmast.com" + freeleapsCentralStorageEndpoint: "https://alpha.central-storage.freeleaps.mathmast.com" + freeleapsChatEndpoint: "https://alpha.chat.freeleaps.mathmast.com" + freeleapsPaymentEndpoint: "https://alpha.payment.freeleaps.mathmast.com" + freeleapsAilabEndpoint: "" + freeleapsEnv: "alpha" + certPath: "" \ No newline at end of file diff --git a/freeleaps/helm-pkg/chat/values.yaml b/freeleaps/helm-pkg/chat/values.yaml new file mode 100644 index 00000000..26195849 --- /dev/null +++ b/freeleaps/helm-pkg/chat/values.yaml @@ -0,0 +1,87 @@ +global: + registry: docker.io + repository: freeleaps + nodeSelector: {} +chat: + replicas: 1 + image: + registry: + repository: freeleaps + name: chat + tag: 1.0.0 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8007 + protocol: TCP + resources: + requests: + cpu: "0.5" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + # FIXME: Wait until the developers implements the probes APIs + probes: {} + services: + - name: chat-service + type: ClusterIP + port: 8007 + targetPort: 8007 + # Defaults to {}, which means doesn't have any ingress + ingresses: {} + configs: + # TZ + tz: "UTC" + # APP_NAME + appName: "chat" + # SERVICE_API_ACCESS_HOST + serviceApiAccessHost: "0.0.0.0" + # SERVICE_API_ACCESS_PORT + serviceApiAccessPort: "8013" + # MONGODB_NAME + mongodbName: "" + # MONGODB_URI + mongodbUri: "" + # MONGODB_HOST + mongodbHost: "" + # MONGODB_PORT + mongodbPort: '' + # EMAIL_FROM + emailFrom: "" + # SITE_URL_ROOT + siteUrlRoot: "" + # JWT_SECRET_KEY + jwtSecretKey: "" + # JWT_ALGORITHM + jwtAlgorithm: "" + # STRIPE_API_KEY + stripeApiKey: "" + # STRIPE_WEBHOOK_SECRET + stripeWebhookSecret: "" + # STRIPE_ACCOUNT_WEBHOOK_SECRET + stripeAccountWebhookSecret: "" + # RABBITMQ_HOST + rabbitmqHost: "" + # RABBITMQ_PORT + rabbitmqPort: + # RABBITMQ_USERNAME + rabbitmqUsername: "" + # RABBITMQ_PASSWORD + rabbitmqPassword: "" + # FREELEAPS_DEVSVC_ENDPOINT + freeleapsDevsvcEndpoint: "" + # FREELEAPS_CONTENT_ENDPOINT + freeleapsContentEndpoint: "" + # FREELEAPS_CENTRAL_STORAGE_ENDPOINT + freeleapsCentralStorageEndpoint: "" + # FREELEAPS_CHAT_ENDPOINT + freeleapsChatEndpoint: "" + # FREELEAPS_PAYMENT_ENDPOINT + freeleapsPaymentEndpoint: "" + # FREELEAPS_AILAB_ENDPOINT + freeleapsAilabEndpoint: "" + # FREELEAPS_ENV + freeleapsEnv: "" + # CERT_PATH + certPath: "" \ No newline at end of file diff --git a/freeleaps/helm-pkg/freeleaps/Chart.yaml b/freeleaps/helm-pkg/freeleaps/Chart.yaml new file mode 100644 index 00000000..d42fac0c --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: freeleaps +description: A Helm Chart of freeleaps service, which part of Freeleaps Platform, powered by Freeleaps. +type: application +version: 0.0.1 +appVersion: "0.0.1" diff --git a/freeleaps/helm-pkg/freeleaps/templates/freeleaps/certificate.yaml b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/certificate.yaml new file mode 100644 index 00000000..9833932b --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/certificate.yaml @@ -0,0 +1,27 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseCertificate := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $ingress := .Values.freeleaps.ingresses }} +{{- if not $ingress.tls.exists }} +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ $ingress.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $ingress.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseCertificate }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: + commonName: {{ $ingress.host }} + dnsNames: + - {{ $ingress.host }} + issuerRef: + name: {{ $ingress.tls.issuerRef.name }} + kind: {{ $ingress.tls.issuerRef.kind }} + secretName: {{ $ingress.tls.name }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/freeleaps/templates/freeleaps/deployment.yaml b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/deployment.yaml new file mode 100644 index 00000000..087b1026 --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/name: "freeleaps" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + name: "freeleaps" + namespace: {{ .Release.Namespace | quote }} +spec: + selector: + matchLabels: + app.kubernetes.io/name: "freeleaps" + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + replicas: {{ .Values.freeleaps.replicas }} + template: + metadata: + labels: + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/name: "freeleaps" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: "freeleaps" + image: "{{ coalesce .Values.freeleaps.image.registry .Values.global.registry "docker.io"}}/{{ coalesce .Values.freeleaps.image.repository .Values.global.repository }}/{{ .Values.freeleaps.image.name }}:{{ .Values.freeleaps.image.tag | default "latest" }}" + imagePullPolicy: {{ .Values.freeleaps.image.imagePullPolicy | default "IfNotPresent" }} + ports: + {{- range $port := .Values.freeleaps.ports }} + - containerPort: {{ $port.containerPort }} + name: {{ $port.name }} + protocol: {{ $port.protocol }} + {{- end }} + {{- if .Values.freeleaps.resources }} + resources: + {{- toYaml .Values.freeleaps.resources | nindent 12 }} + {{- end }} + {{- if .Values.freeleaps.probes }} + {{- if and (.Values.freeleaps.probes.liveness) (eq .Values.freeleaps.probes.liveness.type "httpGet") }} + livenessProbe: + httpGet: + path: {{ .Values.freeleaps.probes.liveness.config.path }} + port: {{ .Values.freeleaps.probes.liveness.config.port }} + {{- if .Values.freeleaps.probes.liveness.config.initialDelaySeconds }} + initialDelaySeconds: {{ .Values.freeleaps.probes.liveness.config.initialDelaySeconds }} + {{- end }} + {{- if .Values.freeleaps.probes.liveness.config.periodSeconds }} + periodSeconds: {{ .Values.freeleaps.probes.liveness.config.periodSeconds }} + {{- end }} + {{- if .Values.freeleaps.probes.liveness.config.timeoutSeconds }} + timeoutSeconds: {{ .Values.freeleaps.probes.liveness.config.timeoutSeconds }} + {{- end }} + {{- if .Values.freeleaps.probes.liveness.config.successThreshold }} + successThreshold: {{ .Values.freeleaps.probes.liveness.config.successThreshold }} + {{- end }} + {{- if .Values.freeleaps.probes.liveness.config.failureThreshold }} + failureThreshold: {{ .Values.freeleaps.probes.liveness.config.failureThreshold }} + {{- end }} + {{- if .Values.freeleaps.probes.liveness.config.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.freeleaps.probes.liveness.config.terminationGracePeriodSeconds }} + {{- end }} + {{- end }} + {{- if and (.Values.freeleaps.probes.readiness) (eq .Values.freeleaps.probes.readiness.type "httpGet") }} + readinessProbe: + httpGet: + path: {{ .Values.freeleaps.probes.readiness.config.path }} + port: {{ .Values.freeleaps.probes.readiness.config.port }} + {{- if .Values.freeleaps.probes.readiness.config.initialDelaySeconds }} + initialDelaySeconds: {{ .Values.freeleaps.probes.readiness.config.initialDelaySeconds }} + {{- end }} + {{- if .Values.freeleaps.probes.readiness.config.periodSeconds }} + periodSeconds: {{ .Values.freeleaps.probes.readiness.config.periodSeconds }} + {{- end }} + {{- if .Values.freeleaps.probes.readiness.config.timeoutSeconds }} + timeoutSeconds: {{ .Values.freeleaps.probes.readiness.config.timeoutSeconds }} + {{- end }} + {{- if .Values.freeleaps.probes.readiness.config.successThreshold }} + successThreshold: {{ .Values.freeleaps.probes.readiness.config.successThreshold }} + {{- end }} + {{- if .Values.freeleaps.probes.readiness.config.failureThreshold }} + failureThreshold: {{ .Values.freeleaps.probes.readiness.config.failureThreshold }} + {{- end }}:% + {{- if .Values.freeleaps.probes.readiness.config.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.freeleaps.probes.readiness.config.terminationGracePeriodSeconds }} + {{- end }} + {{- end }} + {{- end}} + env: + {{- range $key, $value := .Values.freeleaps.configs }} + - name: {{ $key | snakecase | upper }} + valueFrom: + secretKeyRef: + name: freeleaps-config + key: {{ $key | snakecase | upper }} + {{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/freeleaps/templates/freeleaps/freeleaps-config.yaml b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/freeleaps-config.yaml new file mode 100644 index 00000000..c31c5290 --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/freeleaps-config.yaml @@ -0,0 +1,33 @@ +apiVersion: v1 +kind: Secret +metadata: + name: freeleaps-config + namespace: {{ .Release.Namespace }} +type: Opaque +data: + TZ: {{ .Values.freeleaps.configs.tz | b64enc | quote }} + APP_NAME: {{ .Values.freeleaps.configs.appName | b64enc | quote }} + SERVICE_API_ACCESS_HOST: {{ .Values.freeleaps.configs.serviceApiAccessHost | b64enc | quote }} + SERVICE_API_ACCESS_PORT: {{ .Values.freeleaps.configs.serviceApiAccessPort | toString | b64enc }} + MONGODB_NAME: {{ .Values.freeleaps.configs.mongodbName | b64enc | quote }} + MONGODB_URI: {{ .Values.freeleaps.configs.mongodbUri | b64enc | quote }} + MONGODB_PORT: {{ .Values.freeleaps.configs.mongodbPort | toString | b64enc }} + EMAIL_FROM: {{ .Values.freeleaps.configs.emailFrom | b64enc | quote }} + SITE_URL_ROOT: {{ .Values.freeleaps.configs.siteUrlRoot | b64enc | quote }} + JWT_SECRET_KEY: {{ .Values.freeleaps.configs.jwtSecretKey | b64enc | quote }} + JWT_ALGORITHM: {{ .Values.freeleaps.configs.jwtAlgorithm | b64enc | quote }} + STRIPE_API_KEY: {{ .Values.freeleaps.configs.stripeApiKey | b64enc | quote }} + STRIPE_WEBHOOK_SECRET: {{ .Values.freeleaps.configs.stripeWebhookSecret | b64enc | quote }} + STRIPE_ACCOUNT_WEBHOOK_SECRET: {{ .Values.freeleaps.configs.stripeAccountWebhookSecret | b64enc | quote }} + RABBITMQ_HOST: {{ .Values.freeleaps.configs.rabbitmqHost | b64enc | quote }} + RABBITMQ_PORT: {{ .Values.freeleaps.configs.rabbitmqPort | toString | b64enc }} + RABBITMQ_USERNAME: {{ .Values.freeleaps.configs.rabbitmqUsername | b64enc | quote }} + RABBITMQ_PASSWORD: {{ .Values.freeleaps.configs.rabbitmqPassword | b64enc | quote }} + FREELEAPS_DEVSVC_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsDevsvcEndpoint | b64enc | quote }} + FREELEAPS_CONTENT_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsContentEndpoint | b64enc | quote }} + FREELEAPS_CENTRAL_STORAGE_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsCentralStorageEndpoint | b64enc | quote }} + FREELEAPS_CHAT_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsChatEndpoint | b64enc | quote }} + FREELEAPS_PAYMENT_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsPaymentEndpoint | b64enc | quote }} + FREELEAPS_AILAB_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsAilabEndpoint | b64enc | quote }} + FREELEAPS_ENV: {{ .Values.freeleaps.configs.freeleapsEnv | b64enc | quote }} + CERT_PATH: {{ .Values.freeleaps.configs.certPath | b64enc | quote }} diff --git a/freeleaps/helm-pkg/freeleaps/templates/freeleaps/ingress.yaml b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/ingress.yaml new file mode 100644 index 00000000..d92ecf12 --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/ingress.yaml @@ -0,0 +1,36 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseIngress := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $ingress := .Values.freeleaps.ingresses }} +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ $ingress.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $ingress.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseIngress }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: +{{- if $ingress.class }} + ingressClassName: {{ $ingress.class }} +{{- end }} +{{- if $ingress.tls }} + tls: + - hosts: + - {{ $ingress.host }} +{{- if $ingress.tls.exists }} + secretName: {{ $ingress.tls.secretRef.name }} +{{- else }} + secretName: {{ $ingress.tls.name }} +{{- end }} +{{- end }} + rules: + - host: {{ $ingress.host }} + http: + paths: +{{- toYaml $ingress.rules | nindent 10 }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/freeleaps/templates/freeleaps/service.yaml b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/service.yaml new file mode 100644 index 00000000..ece3c2c4 --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/templates/freeleaps/service.yaml @@ -0,0 +1,26 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseService := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $service := .Values.freeleaps.services }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ $service.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $service.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: + ports: + - port: {{ $service.port }} + targetPort: {{ $service.targetPort }} + selector: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: "freeleaps" + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/freeleaps/values.alpha.yaml b/freeleaps/helm-pkg/freeleaps/values.alpha.yaml index e69de29b..0ca6debf 100644 --- a/freeleaps/helm-pkg/freeleaps/values.alpha.yaml +++ b/freeleaps/helm-pkg/freeleaps/values.alpha.yaml @@ -0,0 +1,77 @@ +global: + registry: docker.io + repository: freeleaps + nodeSelector: {} +freeleaps: + replicas: 1 + image: + registry: + repository: freeleaps + name: freeleaps + tag: 1.0.0 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8001 + protocol: TCP + resources: + requests: + cpu: "0.5" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + # FIXME: Wait until the developers implements the probes APIs + probes: {} + services: + - name: freeleaps-service + type: ClusterIP + port: 8001 + targetPort: 8001 + # Defaults to {}, which means doesn't have any ingress + ingresses: + - name: freeleaps-ingress + host: alpha.api.freeleaps.mathmast.com + class: nginx + rules: + - path: / + pathType: Prefix + backend: + service: + name: free + port: + number: 8001 + tls: + exists: false + issuerRef: + name: mathmast-dot-com + kind: ClusterIssuer + name: alpha.api.freeleaps.mathmast.com-cert + configs: + tz: "UTC" + appName: "freeleaps" + serviceApiAccessHost: "0.0.0.0" + serviceApiAccessPort: 8001 + mongodbName: freeleaps2 + mongodbUri: mongodb://freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster:27017/ + mongodbHost: freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster + mongodbPort: 27017 + emailFrom: "freeleaps@freeleaps.com" + siteUrlRoot: "https://alpha.freeleaps.mathmast.com" + jwtSecretKey: 8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b + jwtAlgorithm: HS256 + stripeApiKey: sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd + stripeWebhookSecret: "" + stripeAccountWebhookSecret: "" + rabbitmqHost: freeleaps-alpha-rabbitmq.freeleaps-alpha.svc.freeleaps.cluster + rabbitmqPort: 5672 + rabbitmqUsername: user + rabbitmqPassword: 9dPrkjD8KENevfjT + freeleapsDevsvcEndpoint: "https://alpha.devsvc.freeleaps.mathmast.com" + freeleapsContentEndpoint: "https://alpha.content.freeleaps.mathmast.com" + freeleapsCentralStorageEndpoint: "https://alpha.central-storage.freeleaps.mathmast.com" + freeleapsChatEndpoint: "https://alpha.chat.freeleaps.mathmast.com" + freeleapsPaymentEndpoint: "https://alpha.payment.freeleaps.mathmast.com" + freeleapsAilabEndpoint: "" + freeleapsEnv: "alpha" + certPath: "" \ No newline at end of file diff --git a/freeleaps/helm-pkg/freeleaps/values.yaml b/freeleaps/helm-pkg/freeleaps/values.yaml new file mode 100644 index 00000000..87d1f792 --- /dev/null +++ b/freeleaps/helm-pkg/freeleaps/values.yaml @@ -0,0 +1,87 @@ +global: + registry: docker.io + repository: freeleaps + nodeSelector: {} +freeleaps: + replicas: 1 + image: + registry: + repository: freeleaps + name: freeleaps + tag: 1.0.0 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8007 + protocol: TCP + resources: + requests: + cpu: "0.5" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + # FIXME: Wait until the developers implements the probes APIs + probes: {} + services: + - name: freeleaps-service + type: ClusterIP + port: 8007 + targetPort: 8007 + # Defaults to {}, which means doesn't have any ingress + ingresses: {} + configs: + # TZ + tz: "UTC" + # APP_NAME + appName: "freeleaps" + # SERVICE_API_ACCESS_HOST + serviceApiAccessHost: "0.0.0.0" + # SERVICE_API_ACCESS_PORT + serviceApiAccessPort: "8013" + # MONGODB_NAME + mongodbName: "" + # MONGODB_URI + mongodbUri: "" + # MONGODB_HOST + mongodbHost: "" + # MONGODB_PORT + mongodbPort: '' + # EMAIL_FROM + emailFrom: "" + # SITE_URL_ROOT + siteUrlRoot: "" + # JWT_SECRET_KEY + jwtSecretKey: "" + # JWT_ALGORITHM + jwtAlgorithm: "" + # STRIPE_API_KEY + stripeApiKey: "" + # STRIPE_WEBHOOK_SECRET + stripeWebhookSecret: "" + # STRIPE_ACCOUNT_WEBHOOK_SECRET + stripeAccountWebhookSecret: "" + # RABBITMQ_HOST + rabbitmqHost: "" + # RABBITMQ_PORT + rabbitmqPort: + # RABBITMQ_USERNAME + rabbitmqUsername: "" + # RABBITMQ_PASSWORD + rabbitmqPassword: "" + # FREELEAPS_DEVSVC_ENDPOINT + freeleapsDevsvcEndpoint: "" + # FREELEAPS_CONTENT_ENDPOINT + freeleapsContentEndpoint: "" + # FREELEAPS_CENTRAL_STORAGE_ENDPOINT + freeleapsCentralStorageEndpoint: "" + # FREELEAPS_freeleaps_ENDPOINT + freeleapsfreeleapsEndpoint: "" + # FREELEAPS_PAYMENT_ENDPOINT + freeleapsPaymentEndpoint: "" + # FREELEAPS_AILAB_ENDPOINT + freeleapsAilabEndpoint: "" + # FREELEAPS_ENV + freeleapsEnv: "" + # CERT_PATH + certPath: "" \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/templates/frontend/certificate.yaml b/freeleaps/helm-pkg/frontend/templates/frontend/certificate.yaml new file mode 100644 index 00000000..40ef77e3 --- /dev/null +++ b/freeleaps/helm-pkg/frontend/templates/frontend/certificate.yaml @@ -0,0 +1,27 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseCertificate := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $ingress := .Values.frontend.ingresses }} +{{- if not $ingress.tls.exists }} +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ $ingress.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $ingress.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseCertificate }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: + commonName: {{ $ingress.host }} + dnsNames: + - {{ $ingress.host }} + issuerRef: + name: {{ $ingress.tls.issuerRef.name }} + kind: {{ $ingress.tls.issuerRef.kind }} + secretName: {{ $ingress.tls.name }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/templates/frontend/deployment.yaml b/freeleaps/helm-pkg/frontend/templates/frontend/deployment.yaml new file mode 100644 index 00000000..c3f5c7ed --- /dev/null +++ b/freeleaps/helm-pkg/frontend/templates/frontend/deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/name: "frontend" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + name: "frontend" + namespace: {{ .Release.Namespace | quote }} +spec: + selector: + matchLabels: + app.kubernetes.io/name: "frontend" + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + replicas: {{ .Values.frontend.replicas }} + template: + metadata: + labels: + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/name: "frontend" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: "frontend" + image: "{{ coalesce .Values.frontend.image.registry .Values.global.registry "docker.io"}}/{{ coalesce .Values.frontend.image.repository .Values.global.repository }}/{{ .Values.frontend.image.name }}:{{ .Values.frontend.image.tag | default "latest" }}" + imagePullPolicy: {{ .Values.frontend.image.imagePullPolicy | default "IfNotPresent" }} + ports: + {{- range $port := .Values.frontend.ports }} + - containerPort: {{ $port.containerPort }} + name: {{ $port.name }} + protocol: {{ $port.protocol }} + {{- end }} + {{- if .Values.frontend.resources }} + resources: + {{- toYaml .Values.frontend.resources | nindent 12 }} + {{- end }} + {{- if .Values.frontend.probes }} + {{- if and (.Values.frontend.probes.liveness) (eq .Values.frontend.probes.liveness.type "httpGet") }} + livenessProbe: + httpGet: + path: {{ .Values.frontend.probes.liveness.config.path }} + port: {{ .Values.frontend.probes.liveness.config.port }} + {{- if .Values.frontend.probes.liveness.config.initialDelaySeconds }} + initialDelaySeconds: {{ .Values.frontend.probes.liveness.config.initialDelaySeconds }} + {{- end }} + {{- if .Values.frontend.probes.liveness.config.periodSeconds }} + periodSeconds: {{ .Values.frontend.probes.liveness.config.periodSeconds }} + {{- end }} + {{- if .Values.frontend.probes.liveness.config.timeoutSeconds }} + timeoutSeconds: {{ .Values.frontend.probes.liveness.config.timeoutSeconds }} + {{- end }} + {{- if .Values.frontend.probes.liveness.config.successThreshold }} + successThreshold: {{ .Values.frontend.probes.liveness.config.successThreshold }} + {{- end }} + {{- if .Values.frontend.probes.liveness.config.failureThreshold }} + failureThreshold: {{ .Values.frontend.probes.liveness.config.failureThreshold }} + {{- end }} + {{- if .Values.frontend.probes.liveness.config.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.frontend.probes.liveness.config.terminationGracePeriodSeconds }} + {{- end }} + {{- end }} + {{- if and (.Values.frontend.probes.readiness) (eq .Values.frontend.probes.readiness.type "httpGet") }} + readinessProbe: + httpGet: + path: {{ .Values.frontend.probes.readiness.config.path }} + port: {{ .Values.frontend.probes.readiness.config.port }} + {{- if .Values.frontend.probes.readiness.config.initialDelaySeconds }} + initialDelaySeconds: {{ .Values.frontend.probes.readiness.config.initialDelaySeconds }} + {{- end }} + {{- if .Values.frontend.probes.readiness.config.periodSeconds }} + periodSeconds: {{ .Values.frontend.probes.readiness.config.periodSeconds }} + {{- end }} + {{- if .Values.frontend.probes.readiness.config.timeoutSeconds }} + timeoutSeconds: {{ .Values.frontend.probes.readiness.config.timeoutSeconds }} + {{- end }} + {{- if .Values.frontend.probes.readiness.config.successThreshold }} + successThreshold: {{ .Values.frontend.probes.readiness.config.successThreshold }} + {{- end }} + {{- if .Values.frontend.probes.readiness.config.failureThreshold }} + failureThreshold: {{ .Values.frontend.probes.readiness.config.failureThreshold }} + {{- end }}:% + {{- if .Values.frontend.probes.readiness.config.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.frontend.probes.readiness.config.terminationGracePeriodSeconds }} + {{- end }} + {{- end }} + {{- end}} + env: + {{- range $key, $value := .Values.frontend.configs }} + - name: {{ $key | snakecase | upper }} + valueFrom: + secretKeyRef: + name: frontend-config + key: {{ $key | snakecase | upper }} + {{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/templates/frontend/frontend-config.yaml b/freeleaps/helm-pkg/frontend/templates/frontend/frontend-config.yaml new file mode 100644 index 00000000..277f399b --- /dev/null +++ b/freeleaps/helm-pkg/frontend/templates/frontend/frontend-config.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + name: frontend-config + namespace: {{ .Release.Namespace }} +type: Opaque +data: + TZ: {{ .Values.frontend.configs.tz | b64enc | quote }} + FRONTEND_PORT: {{ .Values.frontend.configs.frontendPort | toString | b64enc }} + FREELEAPS_CHAT_ENDPOINT: {{ .Values.frontend.configs.freeleapsChatEndpoint | b64enc | quote }} + FREELEAPS_BACKEND_ENDPOINT: {{ .Values.frontend.configs.freeleapsBackendEndpoint | b64enc | quote }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/templates/frontend/ingress.yaml b/freeleaps/helm-pkg/frontend/templates/frontend/ingress.yaml new file mode 100644 index 00000000..d2745283 --- /dev/null +++ b/freeleaps/helm-pkg/frontend/templates/frontend/ingress.yaml @@ -0,0 +1,36 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseIngress := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $ingress := .Values.frontend.ingresses }} +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ $ingress.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $ingress.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseIngress }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: +{{- if $ingress.class }} + ingressClassName: {{ $ingress.class }} +{{- end }} +{{- if $ingress.tls }} + tls: + - hosts: + - {{ $ingress.host }} +{{- if $ingress.tls.exists }} + secretName: {{ $ingress.tls.secretRef.name }} +{{- else }} + secretName: {{ $ingress.tls.name }} +{{- end }} +{{- end }} + rules: + - host: {{ $ingress.host }} + http: + paths: +{{- toYaml $ingress.rules | nindent 10 }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/templates/frontend/service.yaml b/freeleaps/helm-pkg/frontend/templates/frontend/service.yaml new file mode 100644 index 00000000..ed21b00a --- /dev/null +++ b/freeleaps/helm-pkg/frontend/templates/frontend/service.yaml @@ -0,0 +1,26 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseService := .Release.Service }} +{{ $releaseName := .Release.Name }} +{{- range $service := .Values.frontend.services }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ $service.name }} + namespace: {{ $namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $service.name | quote }} + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} +spec: + ports: + - port: {{ $service.port }} + targetPort: {{ $service.targetPort }} + selector: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: "frontend" + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/values.alpha.yaml b/freeleaps/helm-pkg/frontend/values.alpha.yaml index e69de29b..fb2541ec 100644 --- a/freeleaps/helm-pkg/frontend/values.alpha.yaml +++ b/freeleaps/helm-pkg/frontend/values.alpha.yaml @@ -0,0 +1,58 @@ +global: + registry: docker.io + repository: freeleaps + nodeSelector: {} +frontend: + replicas: 1 + image: + registry: + repository: freeleaps + name: frontend + tag: 1.0.0 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8080 + protocol: TCP + resources: + requests: + cpu: "0.5" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + # FIXME: Wait until the developers implements the probes APIs + probes: {} + services: + - name: frontend-service + type: ClusterIP + port: 8080 + targetPort: 8080 + # Defaults to {}, which means doesn't have any ingress + ingresses: + - name: frontend-ingress + host: alpha.freeleaps.mathmast.com + class: nginx + rules: + - path: / + pathType: Prefix + backend: + service: + name: frontend-service + port: + number: 8080 + tls: + exists: false + issuerRef: + name: mathmast-dot-com + kind: ClusterIssuer + name: alpha.freeleaps.mathmast.com-cert + configs: + # TZ + tz: "UTC" + # FRONTEND_PORT + frontendPort: 8080 + # FREELEAPS_CHAT_ENDPOINT + freeleapsChatEndpoint: "https://alpha.chat.freeleaps.mathmast.com" + # FREELEAPS_BACKEND_ENDPOINT + freeleapsBackendEndpoint: "https://alpha.api.freeleaps.mathmast.com" \ No newline at end of file diff --git a/freeleaps/helm-pkg/frontend/values.yaml b/freeleaps/helm-pkg/frontend/values.yaml new file mode 100644 index 00000000..20b86788 --- /dev/null +++ b/freeleaps/helm-pkg/frontend/values.yaml @@ -0,0 +1,41 @@ +global: + registry: docker.io + repository: freeleaps + nodeSelector: {} +frontend: + replicas: 1 + image: + registry: + repository: freeleaps + name: frontend + tag: 1.0.0 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8080 + protocol: TCP + resources: + requests: + cpu: "0.5" + memory: "512Mi" + limits: + cpu: "1" + memory: "1Gi" + # FIXME: Wait until the developers implements the probes APIs + probes: {} + services: + - name: frontend-service + type: ClusterIP + port: 8080 + targetPort: 8080 + # Defaults to {}, which means doesn't have any ingress + ingresses: {} + configs: + # TZ + tz: "America/Settle" + # FRONTEND_PORT + frontendPort: 8080 + # FREELEAPS_CHAT_ENDPOINT + freeleapsChatEndpoint: "" + # FREELEAPS_BACKEND_ENDPOINT + freeleapsBackendEndpoint: "" \ No newline at end of file