From db07e57f39017a5c5af43d971389fb477ca17460 Mon Sep 17 00:00:00 2001 From: sg Date: Fri, 12 Jul 2024 16:56:19 +0100 Subject: [PATCH] split enrichment db migrations helm chart, close #241 this commit creates a new helm chart containing ONLY the enrichment db migrations splitting it from the overarching dracon helm chart --- .github/workflows/publish.yml | 9 +++ Makefile | 4 +- deploy/dracon/chart/Chart.lock | 7 +- deploy/dracon/chart/Chart.yaml | 3 + .../chart/templates/migrations-job.yaml | 35 ---------- .../templates/migrations-rolebinding.yaml | 11 ---- .../chart/templates/serviceaccount.yaml | 4 -- deploy/dracon/chart/values.yaml | 22 +++---- deploy/dracon/values/dev.yaml | 28 +++++--- .../chart/.helmignore | 23 +++++++ .../enrichment-db-migrations/chart/Chart.lock | 6 ++ .../enrichment-db-migrations/chart/Chart.yaml | 12 ++++ .../chart/charts/postgresql-15.2.5.tgz | Bin 0 -> 73783 bytes .../chart/templates/_helpers.tpl | 62 ++++++++++++++++++ .../chart/templates/migrations-job.yaml | 35 ++++++++++ .../chart/templates/migrations-role.yaml | 2 +- .../templates/migrations-rolebinding.yaml | 11 ++++ .../chart/templates/serviceaccount.yaml | 4 ++ .../chart/values.yaml | 22 +++++++ .../enrichment-db-migrations/values/dev.yaml | 25 +++++++ 20 files changed, 251 insertions(+), 74 deletions(-) delete mode 100644 deploy/dracon/chart/templates/migrations-job.yaml delete mode 100644 deploy/dracon/chart/templates/migrations-rolebinding.yaml delete mode 100644 deploy/dracon/chart/templates/serviceaccount.yaml create mode 100644 deploy/enrichment-db-migrations/chart/.helmignore create mode 100644 deploy/enrichment-db-migrations/chart/Chart.lock create mode 100644 deploy/enrichment-db-migrations/chart/Chart.yaml create mode 100644 deploy/enrichment-db-migrations/chart/charts/postgresql-15.2.5.tgz create mode 100644 deploy/enrichment-db-migrations/chart/templates/_helpers.tpl create mode 100644 deploy/enrichment-db-migrations/chart/templates/migrations-job.yaml rename deploy/{dracon => enrichment-db-migrations}/chart/templates/migrations-role.yaml (76%) create mode 100644 deploy/enrichment-db-migrations/chart/templates/migrations-rolebinding.yaml create mode 100644 deploy/enrichment-db-migrations/chart/templates/serviceaccount.yaml create mode 100644 deploy/enrichment-db-migrations/chart/values.yaml create mode 100644 deploy/enrichment-db-migrations/values/dev.yaml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8196cfbd3..4ec6ae936 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -35,5 +35,14 @@ jobs: set -e DRACON_VERSION_SEMVER=$(sed 's/v//' <<< ${{ github.ref_name }}) make cmd/draconctl/bin + # Package, Publish Components bin/cmd/draconctl components package --version ${{ github.ref_name }} --chart-version ${DRACON_VERSION_SEMVER} --name dracon-oss-components ./components helm push dracon-oss-components-${DRACON_VERSION_SEMVER}.tgz oci://ghcr.io/ocurity/dracon/charts + + # Package, Publish Migrations + helm package -u\ + --version ${{ github.ref_name }}\ + --chart-version ${DRACON_VERSION_SEMVER}\ + --name dracon-enrichment-db-migrations\ + ./deploy/enrichment-db-migrations/chart + helm push dracon-enrichment-db-migrations oci://ghcr.io/ocurity/dracon/charts diff --git a/Makefile b/Makefile index e24ef8d61..88c02ac0e 100644 --- a/Makefile +++ b/Makefile @@ -210,12 +210,14 @@ dev-dracon: deploy-elasticoperator deploy-arangodb-crds add-bitnami-repo @echo "fetching dependencies if needed" @helm dependency build ./deploy/dracon/chart @echo "deploying dracon in dev mode" + @helm dependency update ./deploy/dracon/chart + @helm dependency build ./deploy/dracon/chart @helm upgrade dracon ./deploy/dracon/chart \ --install \ --values ./deploy/dracon/values/dev.yaml \ --create-namespace \ --namespace $(DRACON_NS) \ - --set "enrichmentDB.migrations.image=$(CONTAINER_REPO)/draconctl:$(DRACON_VERSION)" + --set "enrichment-db-migrations.image.tag=$(DRACON_VERSION)" --wait @helm upgrade dracon-oss-components oci://ghcr.io/ocurity/dracon/charts/dracon-oss-components \ --install \ diff --git a/deploy/dracon/chart/Chart.lock b/deploy/dracon/chart/Chart.lock index e342a25b2..eea9eec28 100644 --- a/deploy/dracon/chart/Chart.lock +++ b/deploy/dracon/chart/Chart.lock @@ -5,5 +5,8 @@ dependencies: - name: mongodb repository: https://charts.bitnami.com/bitnami version: 15.1.5 -digest: sha256:f5b463f7862318ed8de9439769a72f14320f271c72c80ec7a2a1f1b209959d7a -generated: "2024-05-02T22:03:05.901032098+03:00" +- name: enrichment-db-migrations + repository: file://../../enrichment-db-migrations/chart + version: 0.7.0 +digest: sha256:c38df8a4fdc32cc93962c87c8a7e8ef6da7fee48f03c0972b467691c124adfef +generated: "2024-07-14T18:24:02.622213661+01:00" diff --git a/deploy/dracon/chart/Chart.yaml b/deploy/dracon/chart/Chart.yaml index b3b72a48c..883ee6ca4 100644 --- a/deploy/dracon/chart/Chart.yaml +++ b/deploy/dracon/chart/Chart.yaml @@ -14,3 +14,6 @@ dependencies: version: 15.1.5 repository: https://charts.bitnami.com/bitnami condition: mongodb.enabled + - name: enrichment-db-migrations + version: 0.7.0 + repository: oci://ghcr.io/ocurity/dracon/charts \ No newline at end of file diff --git a/deploy/dracon/chart/templates/migrations-job.yaml b/deploy/dracon/chart/templates/migrations-job.yaml deleted file mode 100644 index 0a3dced3c..000000000 --- a/deploy/dracon/chart/templates/migrations-job.yaml +++ /dev/null @@ -1,35 +0,0 @@ -{{ if .Values.enrichmentDB.migrations.enabled }} -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "dracon.fullname" . }}-migrations - labels: - {{- include "dracon.labels" . | nindent 4 }} - annotations: - # This is what defines this resource as a hook. Without this line, the - # job is considered part of the release. - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "-5" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded, hook-failed -spec: - template: - metadata: - name: dracon-migrations - labels: - {{- include "dracon.labels" . | nindent 8 }} - spec: - restartPolicy: Never - containers: - - name: dracon-migrations - image: {{ .Values.enrichmentDB.migrations.image | default (print .Values.global.image.registry "/ocurity/dracon/draconctl:" .Chart.AppVersion) }} - env: - - name: DRACONCTL_MIGRATIONS_PATH - value: "/etc/dracon/migrations/enrichment" - command: - - draconctl - - migrations - - apply - - --url - - {{.Values.enrichmentDB.connectionStr | quote}} - serviceAccountName: {{ include "dracon.fullname" . }}-migrations -{{ end }} \ No newline at end of file diff --git a/deploy/dracon/chart/templates/migrations-rolebinding.yaml b/deploy/dracon/chart/templates/migrations-rolebinding.yaml deleted file mode 100644 index 18b8d3130..000000000 --- a/deploy/dracon/chart/templates/migrations-rolebinding.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: {{ include "dracon.fullname" . }}-migrations -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: {{ include "dracon.fullname" . }}-migrations -subjects: -- kind: ServiceAccount - name: {{ include "dracon.fullname" . }}-migrations diff --git a/deploy/dracon/chart/templates/serviceaccount.yaml b/deploy/dracon/chart/templates/serviceaccount.yaml deleted file mode 100644 index d725dbfb7..000000000 --- a/deploy/dracon/chart/templates/serviceaccount.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "dracon.fullname" . }}-migrations diff --git a/deploy/dracon/chart/values.yaml b/deploy/dracon/chart/values.yaml index 4db9933dc..b3a793450 100644 --- a/deploy/dracon/chart/values.yaml +++ b/deploy/dracon/chart/values.yaml @@ -46,22 +46,20 @@ postgresql: password: "" database: "" postgresPassword: "" + querystringargs: "" fullnameOverride: "" # this section controls aspects of managing a database used to store enrichments # the database should use the Postgres dialect. -enrichmentDB: - migrations: - # if set, a Job will be deployed that applies migrations to the enrichment database - # the Job will run as part of the post-install/post-upgrade hook - enabled: true - # image to use for applying the migrations - image: "" +enrichment_db_migrations: + # if set, a Job will be deployed that applies migrations to the enrichment database + # the Job will run as part of the post-install/post-upgrade hook + enabled: true + # image to use for applying the migrations + migrationsImage: "" # connection string for the migrations and potentially other processes to connect to the # enrichment database - connectionStr: "" -global: - image: - # registry to use for all - registry: "" +image: + # registry to use for all + registry: "" diff --git a/deploy/dracon/values/dev.yaml b/deploy/dracon/values/dev.yaml index fad78b773..be7628142 100644 --- a/deploy/dracon/values/dev.yaml +++ b/deploy/dracon/values/dev.yaml @@ -27,6 +27,21 @@ arangodb: className: nginx host: arangodb.dracon.localhost +global: + image: + registry: kind-registry:5000/ocurity/dracon + + postgresql: + enabled: true + auth: + username: dracon + password: dracon + database: dracon + postgresPassword: dracon + querystringargs: "sslmode=disable" + host: dracon-postgresql:5432 + +# necessary duplication because postgres does not support global variables postgresql: enabled: true auth: @@ -34,16 +49,13 @@ postgresql: password: dracon database: dracon postgresPassword: dracon - fullnameOverride: dracon-enrichment-db + querystringargs: "sslmode=disable" + host: dracon-postgresql:5432 tekton: enabled: true -enrichmentDB: - migrations: - enabled: true - connectionStr: postgresql://dracon:dracon@dracon-enrichment-db?sslmode=disable +enrichment-db-migrations: + migrationsImage: "" + enabled: true -global: - image: - registry: kind-registry:5000 diff --git a/deploy/enrichment-db-migrations/chart/.helmignore b/deploy/enrichment-db-migrations/chart/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/deploy/enrichment-db-migrations/chart/Chart.lock b/deploy/enrichment-db-migrations/chart/Chart.lock new file mode 100644 index 000000000..35aa804d7 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: postgresql + repository: https://charts.bitnami.com/bitnami + version: 15.2.5 +digest: sha256:8145d7210428553425c22a5cc40850a0d8da6d02a7b1dd3b05766e0e2e48b6c0 +generated: "2024-07-12T14:51:36.398614928+01:00" diff --git a/deploy/enrichment-db-migrations/chart/Chart.yaml b/deploy/enrichment-db-migrations/chart/Chart.yaml new file mode 100644 index 000000000..5afcb78f5 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/Chart.yaml @@ -0,0 +1,12 @@ +apiVersion: v2 +name: enrichment-db-migrations +description: | + A Helm chart for Kubernetes containing the dracon migrations needed for Dracon pipelines to run. Please check the documentation for more information +type: application +version: 0.7.0 +appVersion: 0.7.0 +dependencies: + - name: postgresql + version: 15.5.4 + repository: https://charts.bitnami.com/bitnami + condition: postgres.enabled \ No newline at end of file diff --git a/deploy/enrichment-db-migrations/chart/charts/postgresql-15.2.5.tgz b/deploy/enrichment-db-migrations/chart/charts/postgresql-15.2.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f63e2e970943d721c6c6bcb1cd597c725a26a886 GIT binary patch literal 73783 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%0Doo9j68fq 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 Zc`8rksoYTc{{jF2|NlwI>Ma0d2mq1c1%Utn literal 0 HcmV?d00001 diff --git a/deploy/enrichment-db-migrations/chart/templates/_helpers.tpl b/deploy/enrichment-db-migrations/chart/templates/_helpers.tpl new file mode 100644 index 000000000..85742e1ce --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "enrichment_db_migrations.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "enrichment_db_migrations.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "enrichment_db_migrations.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "enrichment_db_migrations.labels" -}} +helm.sh/chart: {{ include "enrichment_db_migrations.chart" . }} +{{ include "enrichment_db_migrations.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "enrichment_db_migrations.selectorLabels" -}} +app.kubernetes.io/name: {{ include "enrichment_db_migrations.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "enrichment_db_migrations.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "enrichment_db_migrations.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/enrichment-db-migrations/chart/templates/migrations-job.yaml b/deploy/enrichment-db-migrations/chart/templates/migrations-job.yaml new file mode 100644 index 000000000..87cbed5b2 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/templates/migrations-job.yaml @@ -0,0 +1,35 @@ +{{ if .Values.enabled }} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "enrichment_db_migrations.fullname" . }} + labels: + {{- include "enrichment_db_migrations.labels" . | nindent 4 }} + annotations: + # This is what defines this resource as a hook. Without this line, the + # job is considered part of the release. + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "-5" + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded, hook-failed +spec: + template: + metadata: + name: enrichment-db-migrations + labels: + {{- include "enrichment_db_migrations.labels" . | nindent 8 }} + spec: + restartPolicy: Never + containers: + - name: enrichment-db-migrations + image: "{{ .Values.global.image.registry }}/draconctl:{{ .Values.image.tag | default .Chart.AppVersion }}" + env: + - name: DRACONCTL_MIGRATIONS_PATH + value: "/etc/dracon/migrations/enrichment" + command: + - draconctl + - migrations + - apply + - --url + - "postgresql://{{ .Values.global.postgresql.auth.username }}:{{ .Values.global.postgresql.auth.password }}@{{ .Values.global.postgresql.host }}/{{ .Values.global.postgresql.auth.database }}?{{ .Values.global.postgresql.auth.querystringargs}}" + serviceAccountName: {{ include "enrichment_db_migrations.fullname" . }} +{{ end }} \ No newline at end of file diff --git a/deploy/dracon/chart/templates/migrations-role.yaml b/deploy/enrichment-db-migrations/chart/templates/migrations-role.yaml similarity index 76% rename from deploy/dracon/chart/templates/migrations-role.yaml rename to deploy/enrichment-db-migrations/chart/templates/migrations-role.yaml index 65abc4b41..617d9c06e 100644 --- a/deploy/dracon/chart/templates/migrations-role.yaml +++ b/deploy/enrichment-db-migrations/chart/templates/migrations-role.yaml @@ -1,7 +1,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: - name: {{ include "dracon.fullname" . }}-migrations + name: {{ include "enrichment_db_migrations.fullname" . }} rules: - apiGroups: - coordination.k8s.io diff --git a/deploy/enrichment-db-migrations/chart/templates/migrations-rolebinding.yaml b/deploy/enrichment-db-migrations/chart/templates/migrations-rolebinding.yaml new file mode 100644 index 000000000..2fbf6a790 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/templates/migrations-rolebinding.yaml @@ -0,0 +1,11 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ include "enrichment_db_migrations.fullname" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ include "enrichment_db_migrations.fullname" . }} +subjects: +- kind: ServiceAccount + name: {{ include "enrichment_db_migrations.fullname" . }} diff --git a/deploy/enrichment-db-migrations/chart/templates/serviceaccount.yaml b/deploy/enrichment-db-migrations/chart/templates/serviceaccount.yaml new file mode 100644 index 000000000..0f9a9fb25 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/templates/serviceaccount.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "enrichment_db_migrations.fullname" . }} diff --git a/deploy/enrichment-db-migrations/chart/values.yaml b/deploy/enrichment-db-migrations/chart/values.yaml new file mode 100644 index 000000000..1bc2731e2 --- /dev/null +++ b/deploy/enrichment-db-migrations/chart/values.yaml @@ -0,0 +1,22 @@ +# this section controls aspects of managing a database used to store enrichments +# the database should use the Postgres dialect. + +# image to use for applying the migrations +migrationsImage: "" +global: + image: + # registry to use for all + registry: "" + +enabled: true + +serviceAccount: + create: false + +postgresql: + enabled: true + auth: + username: "" + password: "" + database: "" + postgresPassword: "" \ No newline at end of file diff --git a/deploy/enrichment-db-migrations/values/dev.yaml b/deploy/enrichment-db-migrations/values/dev.yaml new file mode 100644 index 000000000..402f18a27 --- /dev/null +++ b/deploy/enrichment-db-migrations/values/dev.yaml @@ -0,0 +1,25 @@ + +global: + postgresql: + enabled: true + auth: + username: dracon + password: dracon + database: dracon + postgresPassword: dracon + querystringargs: "sslmode=disable" + fullnameOverride: dracon-enrichment-db + + image: + registry: kind-registry:5000 + +# necessary duplication because postgrs does not support global variables +postgresql: + enabled: true + auth: + username: dracon + password: dracon + database: dracon + postgresPassword: dracon + querystringargs: "sslmode=disable" + fullnameOverride: dracon-enrichment-db