11#! /bin/bash
22set -exu
33
4+ # Get kafka image name and tag
5+ KAFKA_REGISTRY_NAME=$( yq eval " .kafka.sourceRegistry" ../../../solution/deps.yaml)
6+ KAFKA_IMAGE_NAME=$( yq eval " .kafka.image" ../../../solution/deps.yaml)
7+ KAFKA_IMAGE_TAG=$( yq eval " .kafka.tag" ../../../solution/deps.yaml)
8+ KAFKA_IMAGE=$KAFKA_REGISTRY_NAME /$KAFKA_IMAGE_NAME :$KAFKA_IMAGE_TAG
9+
410# Setup test environment variables
511export ZENKO_NAME=${1:- " end2end" }
612# Getting kafka host from backbeat's config
@@ -14,8 +20,9 @@ export NOTIF_KAFKA_PORT=${KAFKA_HOST_PORT#*:}
1420export NOTIF_KAFKA_AUTH_HOST=" ${ZENKO_NAME} -base-queue-auth-0"
1521export NOTIF_KAFKA_AUTH_HOST_PORT=" $NOTIF_KAFKA_AUTH_HOST :$NOTIF_KAFKA_PORT "
1622export NOTIF_KAFKA_AUTH_PORT=9094
23+ export NOTIF_KAFKA_SCRAM_PORT=9095
1724
18- # Add an extra SASL_PLAIN Kafka listener , to support testing authenticated Kafka for bucket notifications
25+ # Add extra SASL_PLAIN & SASL_SCRAM Kafka listeners , to support testing authenticated Kafka for bucket notifications
1926kubectl get zookeepercluster " ${ZENKO_NAME} -base-quorum" -o json | jq ' .
2027| .metadata |= {namespace, name: "\(.name)-auth" }
2128| del(.spec.labels)
@@ -30,10 +37,16 @@ kubectl wait --for=jsonpath='{.status.readyReplicas}'=1 --timeout 10m zookeeperc
3037kubectl get kafkacluster " ${ZENKO_NAME} -base-queue" -o json | jq ' .
3138| .metadata |= {namespace, name: "\(.name)-auth" }
3239| del(.status)
33- | .spec.listenersConfig.internalListeners |= . + [{containerPort: 9094, name: "auth", type: "sasl_plaintext", usedForInnerBrokerCommunication: false}]
40+ | .spec.listenersConfig.internalListeners |= . + [
41+ {containerPort: 9094, name: "auth", type: "sasl_plaintext", usedForInnerBrokerCommunication: false},
42+ {containerPort: 9095, name: "scram", type: "sasl_plaintext", usedForInnerBrokerCommunication: false}
43+ ]
3444| .spec.readOnlyConfig |= (. + "
35- sasl.enabled.mechanisms=PLAIN
45+ sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-512
46+ listener.name.auth.sasl.enabled.mechanisms=PLAIN
3647listener.name.auth.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=\"' " $NOTIF_AUTH_DEST_USERNAME " ' \" password=\"' " $NOTIF_AUTH_DEST_PASSWORD " ' \" user_' " $NOTIF_AUTH_DEST_USERNAME " ' =\"' " $NOTIF_AUTH_DEST_PASSWORD " ' \";
48+ listener.name.scram.sasl.enabled.mechanisms=SCRAM-SHA-512
49+ listener.name.scram.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=\"' " $NOTIF_SCRAM_DEST_USERNAME " ' \" password=\"' " $NOTIF_SCRAM_DEST_PASSWORD " ' \" user_' " $NOTIF_SCRAM_DEST_USERNAME " ' =\"' " $NOTIF_SCRAM_DEST_PASSWORD " ' \";
3750")
3851| del(.spec.brokerConfigGroups.default.storageConfigs[].pvcSpec)
3952| .spec.brokerConfigGroups.default.storageConfigs[].emptyDir |= {medium: "Memory"}
@@ -42,6 +55,19 @@ listener.name.auth.plain.sasl.jaas.config=org.apache.kafka.common.security.plain
4255' | kubectl apply -f -
4356kubectl wait --for=jsonpath=' {.status.state}' =ClusterRunning --timeout 10m kafkacluster " ${ZENKO_NAME} -base-queue-auth"
4457
58+ # Create SCRAM credentials for the SCRAM listener
59+ kubectl run kafka-config \
60+ --image=$KAFKA_IMAGE \
61+ --pod-running-timeout=5m \
62+ --rm \
63+ --restart=Never \
64+ --attach=True \
65+ --command -- bash -c \
66+ " kafka-configs.sh --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT \
67+ --alter --add-config 'SCRAM-SHA-512=[password=$NOTIF_SCRAM_DEST_PASSWORD ]' \
68+ --entity-type users \
69+ --entity-name $NOTIF_SCRAM_DEST_USERNAME "
70+
4571UUID=$( kubectl get secret -l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=end2end \
4672 -o jsonpath=' {.items[0].data.config\.json}' | base64 -di | jq .extensions.replication.topic)
4773UUID=${UUID% .* }
@@ -57,12 +83,6 @@ kubectl wait --for condition=DeploymentInProgress=true --timeout 10m zenko/${ZEN
5783kubectl wait --for condition=DeploymentFailure=false --timeout 10m zenko/${ZENKO_NAME}
5884kubectl wait --for condition=DeploymentInProgress=false --timeout 10m zenko/${ZENKO_NAME}
5985
60- # Get kafka image name and tag
61- KAFKA_REGISTRY_NAME=$( yq eval " .kafka.sourceRegistry" ../../../solution/deps.yaml)
62- KAFKA_IMAGE_NAME=$( yq eval " .kafka.image" ../../../solution/deps.yaml)
63- KAFKA_IMAGE_TAG=$( yq eval " .kafka.tag" ../../../solution/deps.yaml)
64- KAFKA_IMAGE=$KAFKA_REGISTRY_NAME /$KAFKA_IMAGE_NAME :$KAFKA_IMAGE_TAG
65-
6686# Cold location topic
6787AZURE_ARCHIVE_STATUS_TOPIC=" ${UUID} .cold-status-e2e-azure-archive"
6888AZURE_ARCHIVE_STATUS_TOPIC_2_NV=" ${UUID} .cold-status-e2e-azure-archive-2-non-versioned"
@@ -80,6 +100,7 @@ kubectl run kafka-topics \
80100 " kafka-topics.sh --create --topic $NOTIF_DEST_TOPIC --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
81101 kafka-topics.sh --create --topic $NOTIF_ALT_DEST_TOPIC --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
82102 kafka-topics.sh --create --topic $NOTIF_AUTH_DEST_TOPIC --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT --if-not-exists ; \
103+ kafka-topics.sh --create --topic $NOTIF_SCRAM_DEST_TOPIC --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT --if-not-exists ; \
83104 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
84105 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC_2_NV --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
85106 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC_2_V --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
0 commit comments