From 0075b038f59f46bbfb65cd2263d183b7e82e74d5 Mon Sep 17 00:00:00 2001 From: Jacob Kershaw <jacob.kershaw@sigmadefense.com> Date: Tue, 16 Jul 2024 16:31:24 +0000 Subject: [PATCH] Resolve "Add ESO Charts to BB main repo" --- .../external-secrets/git-credentials.yaml | 7 ++ .../external-secrets/gitrepository.yaml | 24 ++++++ .../external-secrets/helmrelease.yaml | 73 +++++++++++++++++++ .../external-secrets/imagepullsecret.yaml | 12 +++ .../templates/external-secrets/namespace.yaml | 13 ++++ chart/templates/external-secrets/values.yaml | 26 +++++++ chart/templates/kyverno-policies/values.yaml | 7 ++ chart/values.yaml | 27 +++++++ tests/package-mapping.yaml | 4 + tests/test-values.yaml | 9 +++ 10 files changed, 202 insertions(+) create mode 100644 chart/templates/external-secrets/git-credentials.yaml create mode 100644 chart/templates/external-secrets/gitrepository.yaml create mode 100644 chart/templates/external-secrets/helmrelease.yaml create mode 100644 chart/templates/external-secrets/imagepullsecret.yaml create mode 100644 chart/templates/external-secrets/namespace.yaml create mode 100644 chart/templates/external-secrets/values.yaml diff --git a/chart/templates/external-secrets/git-credentials.yaml b/chart/templates/external-secrets/git-credentials.yaml new file mode 100644 index 0000000000..1d97643d65 --- /dev/null +++ b/chart/templates/external-secrets/git-credentials.yaml @@ -0,0 +1,7 @@ +{{- $gitCredsSecretDict := dict + "name" "externalSecrets" + "targetScope" .Values.addons.externalSecrets + "releaseName" .Release.Name + "releaseNamespace" .Release.Namespace +}} +{{- include "gitCredsSecret" $gitCredsSecretDict | nindent 0 -}} diff --git a/chart/templates/external-secrets/gitrepository.yaml b/chart/templates/external-secrets/gitrepository.yaml new file mode 100644 index 0000000000..82014b9d85 --- /dev/null +++ b/chart/templates/external-secrets/gitrepository.yaml @@ -0,0 +1,24 @@ +{{- if and (eq .Values.addons.externalSecrets.sourceType "git") .Values.addons.externalSecrets.enabled }} +{{- $gitCredsDict := dict + "name" "externalSecrets" + "packageGitScope" .Values.addons.externalSecrets.git + "rootScope" . + "releaseName" .Release.Name +}} +apiVersion: source.toolkit.fluxcd.io/v1 +kind: GitRepository +metadata: + name: external-secrets + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: external-secrets + app.kubernetes.io/component: "core" + {{- include "commonLabels" . | nindent 4}} +spec: + interval: {{ .Values.flux.interval }} + url: {{ .Values.addons.externalSecrets.git.repo }} + ref: + {{- include "validRef" .Values.addons.externalSecrets.git | nindent 4 }} + {{ include "gitIgnore" . }} + {{- include "gitCredsExtended" $gitCredsDict | nindent 2 }} +{{- end }} diff --git a/chart/templates/external-secrets/helmrelease.yaml b/chart/templates/external-secrets/helmrelease.yaml new file mode 100644 index 0000000000..1ff84d188e --- /dev/null +++ b/chart/templates/external-secrets/helmrelease.yaml @@ -0,0 +1,73 @@ +{{- $fluxSettings := merge .Values.addons.externalSecrets.flux .Values.flux -}} +{{- if .Values.addons.externalSecrets.enabled }} +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: external-secrets + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: external-secrets + app.kubernetes.io/component: "core" + {{- include "commonLabels" . | nindent 4}} + annotations: + checksum/bigbang-values: {{ include (print $.Template.BasePath "/external-secrets/values.yaml") . | sha256sum }} +spec: + targetNamespace: external-secrets + chart: + spec: + {{- if eq .Values.addons.externalSecrets.sourceType "git" }} + chart: {{ .Values.addons.externalSecrets.git.path }} + sourceRef: + kind: GitRepository + name: external-secrets + namespace: {{ .Release.Namespace }} + {{- else }} + chart: {{ .Values.addons.externalSecrets.helmRepo.chartName }} + version: {{ .Values.addons.externalSecrets.helmRepo.tag }} + sourceRef: + kind: HelmRepository + name: {{ .Values.addons.externalSecrets.helmRepo.repoName }} + namespace: {{ .Release.Namespace }} + {{- $repoType := include "getRepoType" (dict "repoName" .Values.addons.externalSecrets.helmRepo.repoName "allRepos" .Values.helmRepositories) -}} + {{- if (and .Values.addons.externalSecrets.helmRepo.cosignVerify (eq $repoType "oci")) }} # Needs to be an OCI repo + verify: + provider: cosign + secretRef: + name: {{ printf "%s-cosign-pub" .Values.addons.externalSecrets.helmRepo.repoName }} + {{- end }} + {{- end }} + interval: 5m + + {{- toYaml $fluxSettings | nindent 2 }} + + {{- if .Values.addons.externalSecrets.postRenderers }} + postRenderers: + {{- toYaml .Values.addons.externalSecrets.postRenderers | nindent 2 }} + {{- end }} + valuesFrom: + - name: {{ .Release.Name }}-external-secrets-values + kind: Secret + valuesKey: "common" + - name: {{ .Release.Name }}-external-secrets-values + kind: Secret + valuesKey: "defaults" + - name: {{ .Release.Name }}-external-secrets-values + kind: Secret + valuesKey: "overlays" + + {{- if or .Values.istio.enabled .Values.kyvernoPolicies.enabled .Values.monitoring.enabled }} + dependsOn: + {{- if .Values.istio.enabled }} + - name: istio + namespace: {{ .Release.Namespace }} + {{- end }} + {{- if .Values.kyvernoPolicies.enabled }} + - name: kyverno-policies + namespace: {{ .Release.Namespace }} + {{- end }} + {{- if .Values.monitoring.enabled }} + - name: monitoring + namespace: {{ .Release.Namespace }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/templates/external-secrets/imagepullsecret.yaml b/chart/templates/external-secrets/imagepullsecret.yaml new file mode 100644 index 0000000000..8c01b2b78d --- /dev/null +++ b/chart/templates/external-secrets/imagepullsecret.yaml @@ -0,0 +1,12 @@ +{{- if .Values.addons.externalSecrets.enabled }} +{{- if ( include "imagePullSecret" . ) }} +apiVersion: v1 +kind: Secret +metadata: + name: private-registry + namespace: external-secrets +type: kubernetes.io/dockerconfigjson +data: + .dockerconfigjson: {{ template "imagePullSecret" . }} +{{- end }} +{{- end }} diff --git a/chart/templates/external-secrets/namespace.yaml b/chart/templates/external-secrets/namespace.yaml new file mode 100644 index 0000000000..8a997f657b --- /dev/null +++ b/chart/templates/external-secrets/namespace.yaml @@ -0,0 +1,13 @@ +{{- if .Values.addons.externalSecrets.enabled }} +apiVersion: v1 +kind: Namespace +metadata: + labels: + meta.helm.sh/release-namespace: bigbang + meta.helm.sh/release-name: bigbang + app.kubernetes.io/name: external-secrets + app.kubernetes.io/component: "core" + {{- include "commonLabels" . | nindent 4}} + istio-injection: enabled + name: external-secrets +{{- end }} diff --git a/chart/templates/external-secrets/values.yaml b/chart/templates/external-secrets/values.yaml new file mode 100644 index 0000000000..3c979f079d --- /dev/null +++ b/chart/templates/external-secrets/values.yaml @@ -0,0 +1,26 @@ +{{- if .Values.addons.externalSecrets.enabled }} +{{- include "values-secret" (dict "root" $ "package" .Values.addons.externalSecrets "name" "external-secrets" "defaults" (include "bigbang.defaults.external-secrets" .)) }} +{{- end }} + +{{- define "bigbang.defaults.external-secrets" -}} + +image: + imagePullPolicy: {{ .Values.imagePullPolicy }} + +monitoring: + enabled: {{ .Values.monitoring.enabled }} + +networkPolicies: + enabled: {{ .Values.networkPolicies.enabled }} + controlPlaneCidr: {{ .Values.networkPolicies.controlPlaneCidr }} + +{{- if .Values.istio.enabled }} +annotations: + {{ include "istioAnnotation" . }} +{{- end }} + +istio: + enabled: {{ .Values.istio.enabled }} + +openshift: {{ .Values.openshift }} +{{- end -}} diff --git a/chart/templates/kyverno-policies/values.yaml b/chart/templates/kyverno-policies/values.yaml index ad1b805b9d..fc0c17ab57 100644 --- a/chart/templates/kyverno-policies/values.yaml +++ b/chart/templates/kyverno-policies/values.yaml @@ -144,6 +144,13 @@ policies: - source-controller* - kustomize-controller* {{- end }} + {{- if .Values.addons.externalSecrets.enabled }} + - resources: + namespaces: + - external-secrets + names: + - external-secrets* + {{- end }} {{- if or .Values.fluentbit.enabled .Values.monitoring.enabled .Values.twistlock.enabled }} disallow-tolerations: diff --git a/chart/values.yaml b/chart/values.yaml index 6c3231e88a..71d0b5a947 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -2076,6 +2076,33 @@ addons: postRenderers: [] + externalSecrets: + # -- Toggle deployment of external secrets + enabled: false + + # -- Choose source type of "git" or "helmRepo" + sourceType: "git" + + git: + repo: https://repo1.dso.mil/big-bang/product/packages/external-secrets.git + tag: "0.9.18-bb.7" + path: "./chart" + helmRepo: + repoName: "registry1" + chartName: "external-secrets" + tag: "0.9.18-bb.7" + + # -- Override flux settings for this package + flux: {} + + # -- Redirect the package ingress to a specific Istio Gateway (listed in `istio.gateways`). The default is "public". + ingress: + gateway: "" + + values: {} + + postRenderers: [] + # -- Wrapper chart for integrating Big Bang components alongside a package wrapper: # -- Choose source type of "git" or "helmRepo" diff --git a/tests/package-mapping.yaml b/tests/package-mapping.yaml index 61f39b2923..b98854f260 100644 --- a/tests/package-mapping.yaml +++ b/tests/package-mapping.yaml @@ -87,3 +87,7 @@ metricsServer: repoName: "metrics-server" hrName: "metrics-server" filePath: "metrics-server" +externalSecrets: + repoName: "external-secrets" + hrName: "external-secrets" + filePath: "external-secrets" \ No newline at end of file diff --git a/tests/test-values.yaml b/tests/test-values.yaml index 824856bbb7..1ad1032515 100644 --- a/tests/test-values.yaml +++ b/tests/test-values.yaml @@ -2864,3 +2864,12 @@ addons: name: https resolution: DNS + externalSecrets: + values: + istio: + hardened: + enabled: true + bbtests: + enabled: true + cypress: + artifacts: true -- GitLab