diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0aedfc27..a34b9896 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ Linting is done with `helm lint`. Prerequisites: -* Helm +* Helm (version >= 3.10) ```bash brew install helm @@ -26,7 +26,7 @@ Unit tests are in the `./test` directory and written in Go with [terratest](http Prerequisites: -* Go +* Go (version >= 1.24.1) ```bash brew install go diff --git a/charts/qdrant/templates/_helpers.tpl b/charts/qdrant/templates/_helpers.tpl index 67bdd811..f45ce29c 100644 --- a/charts/qdrant/templates/_helpers.tpl +++ b/charts/qdrant/templates/_helpers.tpl @@ -51,6 +51,17 @@ app.kubernetes.io/name: {{ include "qdrant.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} +{{/* +Additional (global) labels +*/}} +{{- define "qdrant.additionalLabels" -}} +{{- with .Values.additionalLabels }} +{{- range $key, $value := . }} +{{ $key }}: {{ $value | quote }} +{{- end }} +{{- end }} +{{- end }} + {{/* Create the name of the service account to use */}} diff --git a/charts/qdrant/templates/configmap.yaml b/charts/qdrant/templates/configmap.yaml index e9ac267b..ea061b07 100644 --- a/charts/qdrant/templates/configmap.yaml +++ b/charts/qdrant/templates/configmap.yaml @@ -4,6 +4,7 @@ metadata: name: {{ include "qdrant.fullname" . }} labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.additionalAnnotations }} annotations: {{- toYaml . | nindent 4 }} diff --git a/charts/qdrant/templates/ingress.yaml b/charts/qdrant/templates/ingress.yaml index ffa4c860..6ab27985 100644 --- a/charts/qdrant/templates/ingress.yaml +++ b/charts/qdrant/templates/ingress.yaml @@ -5,6 +5,7 @@ metadata: name: {{ include "qdrant.fullname" . }} labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.ingress.additionalLabels }} {{- toYaml . | nindent 4 }} {{- end }} diff --git a/charts/qdrant/templates/pdb.yaml b/charts/qdrant/templates/pdb.yaml index 92335424..9904f185 100644 --- a/charts/qdrant/templates/pdb.yaml +++ b/charts/qdrant/templates/pdb.yaml @@ -5,6 +5,7 @@ metadata: name: {{ include "qdrant.fullname" . }} labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.additionalAnnotations }} annotations: {{- toYaml . | nindent 4 }} diff --git a/charts/qdrant/templates/secret.yaml b/charts/qdrant/templates/secret.yaml index c9e30bf9..d95db526 100644 --- a/charts/qdrant/templates/secret.yaml +++ b/charts/qdrant/templates/secret.yaml @@ -5,6 +5,7 @@ metadata: name: {{ include "qdrant.fullname" . }}-apikey labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.additionalAnnotations }} annotations: {{- toYaml . | nindent 4 }} diff --git a/charts/qdrant/templates/service-headless.yaml b/charts/qdrant/templates/service-headless.yaml index b417b226..642b1c23 100644 --- a/charts/qdrant/templates/service-headless.yaml +++ b/charts/qdrant/templates/service-headless.yaml @@ -4,6 +4,7 @@ metadata: name: {{ include "qdrant.fullname" . }}-headless labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} app.kubernetes.io/component: cluster-discovery {{- with .Values.service.additionalLabels }} {{- toYaml . | nindent 4 }} diff --git a/charts/qdrant/templates/service.yaml b/charts/qdrant/templates/service.yaml index 797becf5..b16e065b 100644 --- a/charts/qdrant/templates/service.yaml +++ b/charts/qdrant/templates/service.yaml @@ -4,6 +4,7 @@ metadata: name: {{ include "qdrant.fullname" . }} labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.service.additionalLabels }} {{- toYaml . | nindent 4 }} {{- end }} diff --git a/charts/qdrant/templates/serviceaccount.yaml b/charts/qdrant/templates/serviceaccount.yaml index 721a5b5f..b3b5ddf2 100644 --- a/charts/qdrant/templates/serviceaccount.yaml +++ b/charts/qdrant/templates/serviceaccount.yaml @@ -12,4 +12,5 @@ metadata: {{- end }} {{- end }} labels: - {{- include "qdrant.labels" . | nindent 4 }} \ No newline at end of file + {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} \ No newline at end of file diff --git a/charts/qdrant/templates/servicemonitor.yaml b/charts/qdrant/templates/servicemonitor.yaml index e1631e7f..a507f12c 100644 --- a/charts/qdrant/templates/servicemonitor.yaml +++ b/charts/qdrant/templates/servicemonitor.yaml @@ -4,6 +4,7 @@ apiVersion: monitoring.coreos.com/v1 metadata: labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.metrics.serviceMonitor.additionalLabels }} {{- toYaml . | nindent 4 }} {{- end }} diff --git a/charts/qdrant/templates/statefulset.yaml b/charts/qdrant/templates/statefulset.yaml index a4a6d8a6..cc6a640b 100644 --- a/charts/qdrant/templates/statefulset.yaml +++ b/charts/qdrant/templates/statefulset.yaml @@ -4,9 +4,7 @@ metadata: name: {{ include "qdrant.fullname" . }} labels: {{- include "qdrant.labels" . | nindent 4 }} -{{- with .Values.additionalLabels }} -{{- toYaml . | nindent 4 }} -{{- end }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} {{- with .Values.additionalAnnotations }} annotations: {{- toYaml . | nindent 4 }} @@ -30,6 +28,7 @@ spec: {{- end }} labels: {{- include "qdrant.selectorLabels" . | nindent 8 }} + {{- include "qdrant.additionalLabels" . | nindent 8 }} {{- with .Values.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/qdrant/templates/tests/test-db-interaction.yaml b/charts/qdrant/templates/tests/test-db-interaction.yaml index c6837b2c..3b754088 100644 --- a/charts/qdrant/templates/tests/test-db-interaction.yaml +++ b/charts/qdrant/templates/tests/test-db-interaction.yaml @@ -6,6 +6,7 @@ metadata: name: "{{ include "qdrant.fullname" . }}-test-db-interaction" labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} annotations: "helm.sh/hook": test {{- with .Values.additionalAnnotations }} @@ -52,6 +53,7 @@ metadata: name: "{{ include "qdrant.fullname" . }}-test-db-interaction" labels: {{- include "qdrant.labels" . | nindent 4 }} + {{- include "qdrant.additionalLabels" . | nindent 4 }} annotations: "helm.sh/hook": test {{- with .Values.additionalAnnotations }} diff --git a/charts/qdrant/values.yaml b/charts/qdrant/values.yaml index cffa7ffb..443646a7 100644 --- a/charts/qdrant/values.yaml +++ b/charts/qdrant/values.yaml @@ -13,6 +13,7 @@ args: ["./config/initialize.sh"] env: [] # - name: QDRANT_ALLOW_RECOVERY_MODE # value: true +additionalLabels: {} # checks - Readiness and liveness checks can only be enabled for either http (REST) or grpc (multiple checks not supported) # grpc checks are only available from k8s 1.24+ so as of per default we check http @@ -183,6 +184,8 @@ config: enable_tls: false consensus: tick_period_ms: 100 + service: + enable_tls: false sidecarContainers: [] # sidecarContainers: diff --git a/test/qdrant_labels_test.go b/test/qdrant_labels_test.go new file mode 100644 index 00000000..910c0eb3 --- /dev/null +++ b/test/qdrant_labels_test.go @@ -0,0 +1,95 @@ +package test + +import ( + v1 "k8s.io/api/core/v1" + "path/filepath" + "strings" + "testing" + + "github.com/gruntwork-io/terratest/modules/helm" + "github.com/gruntwork-io/terratest/modules/k8s" + "github.com/gruntwork-io/terratest/modules/logger" + "github.com/gruntwork-io/terratest/modules/random" + "github.com/stretchr/testify/require" + appsv1 "k8s.io/api/apps/v1" + networkingv1 "k8s.io/api/networking/v1" +) + +func TestStatefulSetLabels(t *testing.T) { + t.Parallel() + + helmChartPath, err := filepath.Abs("../charts/qdrant") + releaseName := "qdrant" + require.NoError(t, err) + + namespaceName := "qdrant-" + strings.ToLower(random.UniqueId()) + logger.Log(t, "Namespace: %s\n", namespaceName) + + options := &helm.Options{ + SetJsonValues: map[string]string{ + "additionalLabels": `{"example.com/customLabel": "customValue"}`, + }, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/statefulset.yaml"}) + + var statefulSet appsv1.StatefulSet + helm.UnmarshalK8SYaml(t, output, &statefulSet) + + require.Contains(t, statefulSet.Labels, "example.com/customLabel") + require.Equal(t, statefulSet.Labels["example.com/customLabel"], "customValue") +} + +func TestIngressLabels(t *testing.T) { + t.Parallel() + + helmChartPath, err := filepath.Abs("../charts/qdrant") + releaseName := "qdrant" + require.NoError(t, err) + + namespaceName := "qdrant-" + strings.ToLower(random.UniqueId()) + logger.Log(t, "Namespace: %s\n", namespaceName) + + options := &helm.Options{ + SetJsonValues: map[string]string{ + "ingress.enabled": `true`, + "additionalLabels": `{"example.com/customLabel": "customValue"}`, + }, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/ingress.yaml"}) + + var ingress networkingv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + require.Contains(t, ingress.Labels, "example.com/customLabel") + require.Equal(t, ingress.Labels["example.com/customLabel"], "customValue") +} + +func TestServiceAccountLabels(t *testing.T) { + t.Parallel() + + helmChartPath, err := filepath.Abs("../charts/qdrant") + releaseName := "qdrant" + require.NoError(t, err) + + namespaceName := "qdrant-" + strings.ToLower(random.UniqueId()) + logger.Log(t, "Namespace: %s\n", namespaceName) + + options := &helm.Options{ + SetJsonValues: map[string]string{ + "additionalLabels": `{"example.com/customLabel": "customValue"}`, + }, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/serviceaccount.yaml"}) + + var serviceAccount v1.ServiceAccount + helm.UnmarshalK8SYaml(t, output, &serviceAccount) + + require.Contains(t, serviceAccount.Labels, "example.com/customLabel") + require.Equal(t, serviceAccount.Labels["example.com/customLabel"], "customValue") +}