11#! /bin/bash
22set -exu
33
4+ DIR=$( dirname " $0 " )
5+
6+ # Get kafka image name and tag
7+ kafka_image () {
8+ source <( " $DIR " /../../../solution/kafka_build_vars.sh )
9+ echo " $KAFKA_IMAGE :$KAFKA_TAG -$BUILD_TREE_HASH "
10+ }
11+ KAFKA_IMAGE=$( kafka_image)
12+
413# Setup test environment variables
514export ZENKO_NAME=${1:- " end2end" }
615# Getting kafka host from backbeat's config
@@ -14,8 +23,9 @@ export NOTIF_KAFKA_PORT=${KAFKA_HOST_PORT#*:}
1423export NOTIF_KAFKA_AUTH_HOST=" ${ZENKO_NAME} -base-queue-auth-0"
1524export NOTIF_KAFKA_AUTH_HOST_PORT=" $NOTIF_KAFKA_AUTH_HOST :$NOTIF_KAFKA_PORT "
1625export NOTIF_KAFKA_AUTH_PORT=9094
26+ export NOTIF_KAFKA_SCRAM_PORT=9095
1727
18- # Add an extra SASL_PLAIN Kafka listener , to support testing authenticated Kafka for bucket notifications
28+ # Add extra SASL_PLAIN & SASL_SCRAM Kafka listeners , to support testing authenticated Kafka for bucket notifications
1929kubectl get zookeepercluster " ${ZENKO_NAME} -base-quorum" -o json | jq ' .
2030| .metadata |= {namespace, name: "\(.name)-auth" }
2131| del(.spec.labels)
@@ -30,10 +40,16 @@ kubectl wait --for=jsonpath='{.status.readyReplicas}'=1 --timeout 10m zookeeperc
3040kubectl get kafkacluster " ${ZENKO_NAME} -base-queue" -o json | jq ' .
3141| .metadata |= {namespace, name: "\(.name)-auth" }
3242| del(.status)
33- | .spec.listenersConfig.internalListeners |= . + [{containerPort: 9094, name: "auth", type: "sasl_plaintext", usedForInnerBrokerCommunication: false}]
43+ | .spec.listenersConfig.internalListeners |= . + [
44+ {containerPort: 9094, name: "auth", type: "sasl_plaintext", usedForInnerBrokerCommunication: false},
45+ {containerPort: 9095, name: "scram", type: "sasl_plaintext", usedForInnerBrokerCommunication: false}
46+ ]
3447| .spec.readOnlyConfig |= (. + "
35- sasl.enabled.mechanisms=PLAIN
48+ sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-512
49+ listener.name.auth.sasl.enabled.mechanisms=PLAIN
3650listener.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 " ' \";
51+ listener.name.scram.sasl.enabled.mechanisms=SCRAM-SHA-512
52+ 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 " ' \";
3753")
3854| del(.spec.brokerConfigGroups.default.storageConfigs[].pvcSpec)
3955| .spec.brokerConfigGroups.default.storageConfigs[].emptyDir |= {medium: "Memory"}
@@ -42,6 +58,19 @@ listener.name.auth.plain.sasl.jaas.config=org.apache.kafka.common.security.plain
4258' | kubectl apply -f -
4359kubectl wait --for=jsonpath=' {.status.state}' =ClusterRunning --timeout 10m kafkacluster " ${ZENKO_NAME} -base-queue-auth"
4460
61+ # Create SCRAM credentials for the SCRAM listener
62+ kubectl run kafka-config \
63+ --image=$KAFKA_IMAGE \
64+ --pod-running-timeout=5m \
65+ --rm \
66+ --restart=Never \
67+ --attach=True \
68+ --command -- bash -c \
69+ " kafka-configs.sh --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT \
70+ --alter --add-config 'SCRAM-SHA-512=[password=$NOTIF_SCRAM_DEST_PASSWORD ]' \
71+ --entity-type users \
72+ --entity-name $NOTIF_SCRAM_DEST_USERNAME "
73+
4574UUID=$( kubectl get secret -l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=end2end \
4675 -o jsonpath=' {.items[0].data.config\.json}' | base64 -di | jq .extensions.replication.topic)
4776UUID=${UUID% .* }
@@ -57,12 +86,6 @@ kubectl wait --for condition=DeploymentInProgress=true --timeout 10m zenko/${ZEN
5786kubectl wait --for condition=DeploymentFailure=false --timeout 10m zenko/${ZENKO_NAME}
5887kubectl wait --for condition=DeploymentInProgress=false --timeout 10m zenko/${ZENKO_NAME}
5988
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-
6689# Cold location topic
6790AZURE_ARCHIVE_STATUS_TOPIC=" ${UUID} .cold-status-e2e-azure-archive"
6891AZURE_ARCHIVE_STATUS_TOPIC_2_NV=" ${UUID} .cold-status-e2e-azure-archive-2-non-versioned"
@@ -80,6 +103,7 @@ kubectl run kafka-topics \
80103 " kafka-topics.sh --create --topic $NOTIF_DEST_TOPIC --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
81104 kafka-topics.sh --create --topic $NOTIF_ALT_DEST_TOPIC --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
82105 kafka-topics.sh --create --topic $NOTIF_AUTH_DEST_TOPIC --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT --if-not-exists ; \
106+ kafka-topics.sh --create --topic $NOTIF_SCRAM_DEST_TOPIC --bootstrap-server $NOTIF_KAFKA_AUTH_HOST_PORT --if-not-exists ; \
83107 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
84108 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC_2_NV --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
85109 kafka-topics.sh --create --topic $AZURE_ARCHIVE_STATUS_TOPIC_2_V --partitions 10 --bootstrap-server $KAFKA_HOST_PORT --if-not-exists ; \
0 commit comments