From 6885252061606810a357a7dee17231919626e7fd Mon Sep 17 00:00:00 2001
From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org>
Date: Wed, 15 Mar 2023 14:35:23 +0100
Subject: [PATCH] indexers: Fix autoscaling with authentication

It was missing the secrets to use the proper authentication user.  It was not
an issue since it's currently deployed in staging without any authentication.

Refs. swh/infra/sysadm-environment#4794
---
 swh/templates/indexers/keda-autoscaling.yaml |  6 +--
 swh/templates/indexers/keda-secrets.yaml     | 33 ++++++++++++
 swh/tests/indexers_keda_autoscaling.yaml     | 16 ++++++
 swh/tests/indexers_keda_secrets_test.yaml    | 20 +++++++
 swh/tests/values/indexers.yaml               | 56 ++++++++++++++++++++
 swh/values/staging.yaml                      |  3 +-
 6 files changed, 128 insertions(+), 6 deletions(-)
 create mode 100644 swh/templates/indexers/keda-secrets.yaml
 create mode 100644 swh/tests/indexers_keda_autoscaling.yaml
 create mode 100644 swh/tests/indexers_keda_secrets_test.yaml
 create mode 100644 swh/tests/values/indexers.yaml

diff --git a/swh/templates/indexers/keda-autoscaling.yaml b/swh/templates/indexers/keda-autoscaling.yaml
index da0b702e8..919f60fbe 100644
--- a/swh/templates/indexers/keda-autoscaling.yaml
+++ b/swh/templates/indexers/keda-autoscaling.yaml
@@ -20,15 +20,11 @@ spec:
   - type: kafka
     metadata:
       bootstrapServers: {{ first $.Values.indexers.journalBrokers.hosts }}
-      {{ if $journalUser }}
       consumerGroup: {{ $journalUser }}-{{ $consumerGroup }}
-      {{ else }}
-      consumerGroup: {{ $consumerGroup }}
-      {{ end }}
       lagThreshold: {{ get $autoscalingConfig "lagThreshold" | default 1000 | quote }}
       offsetResetPolicy: earliest
     authenticationRef:
-      name: keda-storage-replayer-trigger-authentication
+      name: keda-indexers-kafka-secrets
 {{ end }}
 {{ end }}
 {{- end -}}
diff --git a/swh/templates/indexers/keda-secrets.yaml b/swh/templates/indexers/keda-secrets.yaml
new file mode 100644
index 000000000..511c95b6b
--- /dev/null
+++ b/swh/templates/indexers/keda-secrets.yaml
@@ -0,0 +1,33 @@
+{{ if .Values.indexers.enabled -}}
+{{- $journalUser := .Values.indexers.journalBrokers.user -}}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: keda-indexers-kafka-secrets
+  namespace: {{ .Values.namespace }}
+type: Opaque
+stringData:
+  sasl: "scram_sha512"
+  username: {{ $journalUser }}
+  tls: "enable"
+---
+apiVersion: keda.sh/v1alpha1
+kind: TriggerAuthentication
+metadata:
+  name: keda-indexers-trigger-authentication
+  namespace: {{ .Values.namespace }}
+spec:
+  secretTargetRef:
+  - parameter: sasl
+    name: keda-indexers-kafka-secrets
+    key: sasl
+  - parameter: username
+    name: keda-indexers-kafka-secrets
+    key: username
+  - parameter: tls
+    name: keda-indexers-kafka-secrets
+    key: tls
+  - parameter: password
+    name: {{ .Values.indexers.journalBrokers.secretName }}
+    key: BROKER_USER_PASSWORD
+{{- end -}}
diff --git a/swh/tests/indexers_keda_autoscaling.yaml b/swh/tests/indexers_keda_autoscaling.yaml
new file mode 100644
index 000000000..6b09e8d3b
--- /dev/null
+++ b/swh/tests/indexers_keda_autoscaling.yaml
@@ -0,0 +1,16 @@
+suite: test indexer keda-scaling
+tests:
+  - it: Indexer keda scaling deployment should be deployed
+    templates:
+      - indexers/keda-autoscaling.yaml
+    asserts:
+      - containsDocument:
+          kind: ScaledObject
+          apiVersion: keda.sh/v1alpha1
+          namespace: test
+          name: indexer-idx_test0-scaledobject
+      - containsDocument:
+          kind: ScaledObject
+          apiVersion: keda.sh/v1alpha1
+          namespace: test
+          name: indexer-idx_test1-scaledobject
diff --git a/swh/tests/indexers_keda_secrets_test.yaml b/swh/tests/indexers_keda_secrets_test.yaml
new file mode 100644
index 000000000..d1f0b6643
--- /dev/null
+++ b/swh/tests/indexers_keda_secrets_test.yaml
@@ -0,0 +1,20 @@
+suite: test indexers keda-secrets
+tests:
+  - it: Indexer keda secrets deployment should be deployed
+    templates:
+      - indexers/keda-secrets.yaml
+    set:
+      namespace: test
+    values:
+      - ./values/indexers.yaml
+    asserts:
+      - containsDocument:
+          kind: Secret
+          apiVersion: v1
+          namespace: test
+          name: keda-indexers-kafka-secrets
+      - containsDocument:
+          kind: TriggerAuthentication
+          apiVersion: keda.sh/v1alpha1
+          namespace: test
+          name: keda-indexers-trigger-authentication
diff --git a/swh/tests/values/indexers.yaml b/swh/tests/values/indexers.yaml
new file mode 100644
index 000000000..5e2f433c6
--- /dev/null
+++ b/swh/tests/values/indexers.yaml
@@ -0,0 +1,56 @@
+swh_indexer_image: image
+swh_indexer_image_version: version
+
+indexers:
+  enabled: true
+  storage:
+    host: storage.test.org
+    port: 2005
+  scheduler:
+    host: scheduler.test.org
+    port: 8005
+  indexer_storage:
+    host: indexer.test.org
+    port: 7005
+  objstorage:
+    host: objstorage.test.org
+    port: 3005
+  journalBrokers:
+    secretName: swh-archive-broker-secret
+    hosts:
+      - test.journal:2909
+    user: test-swh
+  deployments:
+    indexer0:
+      indexer_type: idx_test0
+      consumerGroup: test.swh.idx.content_mimetype
+      prefix: swh.journal.objects
+      autoScaling:
+        poolInterval: 10
+        minReplicaCount: 10
+        maxReplicaCount: 50
+        lagThreshold: 200
+      extraConfig:
+        tools:
+          name: file
+          # FIXME: Push this version to be autodetected by indexer
+          version: 2:0.4.15-2
+          configuration:
+            type: library
+            debian-package: python3-magic
+        write_batch_size: 1000
+    indexer1:
+      indexer_type: idx_test1
+      consumerGroup: test.swh.idx.content_fossology
+      prefix: swh.journal.objects
+      autoScaling:
+        poolInterval: 20
+        minReplicaCount: 20
+        maxReplicaCount: 100
+        lagThreshold: 250
+      extraConfig:
+        tools:
+          name: swh-metadata-detector
+          version: 0.0.2
+          configuration: {}
+        write_batch_size: 1000
diff --git a/swh/values/staging.yaml b/swh/values/staging.yaml
index 14719ddf2..d0734068b 100644
--- a/swh/values/staging.yaml
+++ b/swh/values/staging.yaml
@@ -356,7 +356,6 @@ loader_metadata:
     user: swh-archive-stg
   autoScaling:
     maxReplicaCount: 2
-    
 
 indexers:
   enabled: true
@@ -373,8 +372,10 @@ indexers:
     host: storage1.internal.staging.swh.network
     port: 5003
   journalBrokers:
+    secretName: swh-archive-broker-secret
     hosts:
       - journal1.internal.staging.swh.network:9092
+    user: swh-archive-stg
   deployments:
     # content-mimetype:
     #   indexer_type: content_mimetype
-- 
GitLab