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+ BUILD_TREE_HASH=$( git rev-parse HEAD:solution/kafka)
10+
411# Setup test environment variables
512export ZENKO_NAME=${1:- " end2end" }
613# Getting kafka host from backbeat's config
@@ -14,8 +21,9 @@ export NOTIF_KAFKA_PORT=${KAFKA_HOST_PORT#*:}
1421export NOTIF_KAFKA_AUTH_HOST=" ${ZENKO_NAME} -base-queue-auth-0"
1522export NOTIF_KAFKA_AUTH_HOST_PORT=" $NOTIF_KAFKA_AUTH_HOST :$NOTIF_KAFKA_PORT "
1623export NOTIF_KAFKA_AUTH_PORT=9094
24+ export NOTIF_KAFKA_SCRAM_PORT=9095
1725
18- # Add an extra SASL_PLAIN Kafka listener , to support testing authenticated Kafka for bucket notifications
26+ # Add extra SASL_PLAIN & SASL_SCRAM Kafka listeners , to support testing authenticated Kafka for bucket notifications
1927kubectl get zookeepercluster " ${ZENKO_NAME} -base-quorum" -o json | jq ' .
2028| .metadata |= {namespace, name: "\(.name)-auth" }
2129| del(.spec.labels)
@@ -30,10 +38,16 @@ kubectl wait --for=jsonpath='{.status.readyReplicas}'=1 --timeout 10m zookeeperc
3038kubectl get kafkacluster " ${ZENKO_NAME} -base-queue" -o json | jq ' .
3139| .metadata |= {namespace, name: "\(.name)-auth" }
3240| del(.status)
33- | .spec.listenersConfig.internalListeners |= . + [{containerPort: 9094, name: "auth", type: "sasl_plaintext", usedForInnerBrokerCommunication: false}]
41+ | .spec.listenersConfig.internalListeners |= . + [
42+ {containerPort: 9094, name: "auth", type: "sasl_plaintext", usedForInnerBrokerCommunication: false},
43+ {containerPort: 9095, name: "scram", type: "sasl_plaintext", usedForInnerBrokerCommunication: false}
44+ ]
3445| .spec.readOnlyConfig |= (. + "
35- sasl.enabled.mechanisms=PLAIN
46+ sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-512
47+ listener.name.auth.sasl.enabled.mechanisms=PLAIN
3648listener.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 " ' \";
49+ listener.name.scram.sasl.enabled.mechanisms=SCRAM-SHA-512
50+ 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 " ' \";
3751")
3852| del(.spec.brokerConfigGroups.default.storageConfigs[].pvcSpec)
3953| .spec.brokerConfigGroups.default.storageConfigs[].emptyDir |= {medium: "Memory"}
@@ -42,6 +56,19 @@ listener.name.auth.plain.sasl.jaas.config=org.apache.kafka.common.security.plain
4256' | kubectl apply -f -
4357kubectl wait --for=jsonpath=' {.status.state}' =ClusterRunning --timeout 10m kafkacluster " ${ZENKO_NAME} -base-queue-auth"
4458
59+ # Create SCRAM credentials for the SCRAM listener
60+ kubectl run kafka-config \
61+ --image=$KAFKA_IMAGE -$BUILD_TREE_HASH \
62+ --pod-running-timeout=5m \
63+ --rm \
64+ --restart=Never \
65+ --attach=True \
66+ --command -- bash -c \
67+ " kafka-configs.sh --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT \
68+ --alter --add-config 'SCRAM-SHA-512=[password=$NOTIF_SCRAM_DEST_PASSWORD ]' \
69+ --entity-type users \
70+ --entity-name $NOTIF_SCRAM_DEST_USERNAME "
71+
4572UUID=$( kubectl get secret -l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=end2end \
4673 -o jsonpath=' {.items[0].data.config\.json}' | base64 -di | jq .extensions.replication.topic)
4774UUID=${UUID% .* }
@@ -57,12 +84,6 @@ kubectl wait --for condition=DeploymentInProgress=true --timeout 10m zenko/${ZEN
5784kubectl wait --for condition=DeploymentFailure=false --timeout 10m zenko/${ZENKO_NAME}
5885kubectl wait --for condition=DeploymentInProgress=false --timeout 10m zenko/${ZENKO_NAME}
5986
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-
6687# Cold location topic
6788AZURE_ARCHIVE_STATUS_TOPIC=" ${UUID} .cold-status-e2e-azure-archive"
6889AZURE_ARCHIVE_STATUS_TOPIC_2_NV=" ${UUID} .cold-status-e2e-azure-archive-2-non-versioned"
@@ -71,7 +92,7 @@ AZURE_ARCHIVE_STATUS_TOPIC_2_S="${UUID}.cold-status-e2e-azure-archive-2-suspende
7192
7293# Creating bucket notification topic in kafka
7394kubectl run kafka-topics \
74- --image=$KAFKA_IMAGE \
95+ --image=$KAFKA_IMAGE - $BUILD_TREE_HASH \
7596 --pod-running-timeout=5m \
7697 --rm \
7798 --restart=Never \
@@ -80,6 +101,7 @@ kubectl run kafka-topics \
80101 " kafka-topics.sh --create --topic $NOTIF_DEST_TOPIC --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
81102 kafka-topics.sh --create --topic $NOTIF_ALT_DEST_TOPIC --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
82103 kafka-topics.sh --create --topic $NOTIF_AUTH_DEST_TOPIC --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT --if-not-exists ; \
104+ kafka-topics.sh --create --topic $NOTIF_SCRAM_DEST_TOPIC --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT --if-not-exists ; \
83105 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
84106 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC_2_NV --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
85107 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC_2_V --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
0 commit comments