Skip to content

Commit a05e46f

Browse files
authored
System Tests authorizationST admin client fix (kroxylicious#3051)
* AuthorizationST fix issue with admin client configuration propagation Signed-off-by: hzrncik <[email protected]> * remove unused getConfigMapForSaslConfig Signed-off-by: hzrncik <[email protected]> * added temporary file path for config store needed to execute admin client calls Signed-off-by: hzrncik <[email protected]> --------- Signed-off-by: hzrncik <[email protected]>
1 parent 027dbbd commit a05e46f

File tree

4 files changed

+23
-72
lines changed

4 files changed

+23
-72
lines changed

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/Constants.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,6 @@ private Constants() {
178178
public static final String KEYSTORE_TEMP_DIR = CREDENTIALS_TEMP_DIR + KEYSTORE_SECRET_NAME + "/";
179179
public static final String TRUSTSTORE_TEMP_DIR = CREDENTIALS_TEMP_DIR + TRUSTSTORE_SECRET_NAME + "/";
180180
public static final String CONFIG_PROP_FILE_NAME = "config.properties";
181-
public static final String CONFIG_PROP_TEMP_DIR = "/home/strimzi/.admin_client/";
182181
public static final String KAF_CONFIG_TEMP_DIR = "/tmp/.kaf/";
183182
public static final String KAF_CONFIG_FILE_NAME = "config";
184183
}

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/steps/KafkaSteps.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
import java.util.List;
1212
import java.util.Map;
1313

14+
import org.apache.kafka.clients.CommonClientConfigs;
1415
import org.apache.kafka.clients.admin.ScramMechanism;
1516
import org.apache.kafka.common.config.ConfigException;
17+
import org.apache.kafka.common.config.SaslConfigs;
1618
import org.apache.kafka.common.config.TopicConfig;
1719
import org.apache.kafka.common.record.CompressionType;
1820
import org.apache.kafka.common.security.auth.SecurityProtocol;
@@ -22,8 +24,6 @@
2224
import io.fabric8.kubernetes.api.model.batch.v1.Job;
2325

2426
import io.kroxylicious.systemtests.Constants;
25-
import io.kroxylicious.systemtests.resources.manager.ResourceManager;
26-
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousConfigMapTemplates;
2727
import io.kroxylicious.systemtests.templates.testclients.TestClientsJobTemplates;
2828
import io.kroxylicious.systemtests.utils.DeploymentUtils;
2929
import io.kroxylicious.systemtests.utils.KafkaUtils;
@@ -117,11 +117,13 @@ public static void createTopicWithAuthentication(String deployNamespace, String
117117
List.of(TOPIC_COMMAND, "create", BOOTSTRAP_ARG + bootstrap, TOPIC_ARG + topicName, TOPIC_PARTITIONS_ARG + partitions,
118118
TOPIC_REP_FACTOR_ARG + replicas));
119119

120-
ResourceManager.getInstance().createResourceFromBuilderWithWait(
121-
KroxyliciousConfigMapTemplates.getConfigMapForSaslConfig(deployNamespace, Constants.KAFKA_ADMIN_CLIENT_CONFIG_NAME, SecurityProtocol.SASL_PLAINTEXT.name,
122-
ScramMechanism.SCRAM_SHA_512.mechanismName(), Constants.KROXYLICIOUS_ADMIN_USER, usernamePasswords.get(Constants.KROXYLICIOUS_ADMIN_USER)));
120+
// Build SASL configuration string for admin client to be passed as additional config env variable
121+
String additionalConfig = CommonClientConfigs.SECURITY_PROTOCOL_CONFIG + "=" + SecurityProtocol.SASL_PLAINTEXT.name + "\n" +
122+
SaslConfigs.SASL_MECHANISM + "=" + ScramMechanism.SCRAM_SHA_512.mechanismName() + "\n" +
123+
SaslConfigs.SASL_JAAS_CONFIG + "=org.apache.kafka.common.security.scram.ScramLoginModule required username=\"" +
124+
Constants.KROXYLICIOUS_ADMIN_USER + "\" password=\"" + usernamePasswords.get(Constants.KROXYLICIOUS_ADMIN_USER) + "\";";
123125

124-
Job adminClientJob = TestClientsJobTemplates.authenticationAdminClientJob(name, args).build();
126+
Job adminClientJob = TestClientsJobTemplates.authenticationAdminClientJob(name, args, additionalConfig).build();
125127
kubeClient().getClient().batch().v1().jobs().inNamespace(deployNamespace).resource(adminClientJob).create();
126128
String podName = KafkaUtils.getPodNameByLabel(deployNamespace, "app", name, Duration.ofSeconds(30));
127129
DeploymentUtils.waitForPodRunSucceeded(deployNamespace, podName, Duration.ofMinutes(5));

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/templates/kroxylicious/KroxyliciousConfigMapTemplates.java

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@
66

77
package io.kroxylicious.systemtests.templates.kroxylicious;
88

9-
import java.io.IOException;
10-
import java.io.StringWriter;
11-
import java.io.UncheckedIOException;
129
import java.util.Collections;
1310
import java.util.List;
1411
import java.util.Map;
15-
import java.util.Properties;
1612

1713
import org.apache.kafka.clients.CommonClientConfigs;
1814
import org.apache.kafka.common.config.SaslConfigs;
@@ -115,42 +111,6 @@ private static String generateAclRules(List<String> aclRules) {
115111
return aclRule.toString();
116112
}
117113

118-
/**
119-
* Gets config map for sasl config.
120-
*
121-
* @param namespace the namespace
122-
* @param name the name
123-
* @param securityProtocol the security protocol
124-
* @param saslMechanism the sasl mechanism
125-
* @return the config map for additional config
126-
*/
127-
public static ConfigMapBuilder getConfigMapForSaslConfig(String namespace, String name, String securityProtocol, String saslMechanism, String username,
128-
String usernamePassword) {
129-
Properties adminConfig = new Properties();
130-
adminConfig.put("ADDITIONAL_CONFIG", CommonClientConfigs.SECURITY_PROTOCOL_CONFIG + "=" + securityProtocol
131-
+ "\n" + SaslConfigs.SASL_MECHANISM + "=" + saslMechanism
132-
+ "\n" + SaslConfigs.SASL_JAAS_CONFIG + "=org.apache.kafka.common.security.scram.ScramLoginModule required username=\"" + username +
133-
"\" password=\"" + usernamePassword + "\";");
134-
135-
String properties;
136-
try (StringWriter writer = new StringWriter()) {
137-
adminConfig.store(writer, "admin config");
138-
properties = writer.toString();
139-
}
140-
catch (IOException e) {
141-
throw new UncheckedIOException(e);
142-
}
143-
144-
// @formatter:off
145-
return new ConfigMapBuilder()
146-
.withNewMetadata()
147-
.withName(name)
148-
.withNamespace(namespace)
149-
.endMetadata()
150-
.withData(Map.of(Constants.CONFIG_PROP_FILE_NAME, properties));
151-
// @formatter:on
152-
}
153-
154114
/**
155115
* Gets config map for kaf config.
156116
*

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/templates/testclients/TestClientsJobTemplates.java

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -109,39 +109,29 @@ public static JobBuilder defaultAdminClientJob(String jobName, List<String> args
109109
* Authentication admin client job builder.
110110
*
111111
* @param jobName the job name
112-
* @param args the args
112+
* @param args the admin client arguments
113+
* @param additionalConfig the additional config (SASL/SSL properties)
113114
* @return the job builder
114115
*/
115-
public static JobBuilder authenticationAdminClientJob(String jobName, List<String> args) {
116-
List<VolumeMount> volumeMounts = new ArrayList<>();
117-
List<Volume> volumes = new ArrayList<>();
118-
Volume configVolume = new VolumeBuilder()
119-
.withName(Constants.KAFKA_ADMIN_CLIENT_CONFIG_NAME)
120-
.withConfigMap(new ConfigMapVolumeSourceBuilder()
121-
.withName(Constants.KAFKA_ADMIN_CLIENT_CONFIG_NAME)
122-
.addNewItem()
123-
.withKey(Constants.CONFIG_PROP_FILE_NAME)
124-
.withPath(Constants.CONFIG_PROP_FILE_NAME)
125-
.endItem()
126-
.build())
127-
.build();
128-
129-
VolumeMount configMount = new VolumeMountBuilder()
130-
.withName(Constants.KAFKA_ADMIN_CLIENT_CONFIG_NAME)
131-
.withMountPath(Constants.CONFIG_PROP_TEMP_DIR)
132-
.build();
133-
volumeMounts.add(configMount);
134-
volumes.add(configVolume);
116+
public static JobBuilder authenticationAdminClientJob(String jobName, List<String> args, String additionalConfig) {
117+
// Firstly configure admin client with additional configuration, then run the actual admin-client command from arguments
118+
String command = "admin-client configure common --from-env && admin-client " + String.join(" ", args);
135119

136120
return baseClientJob(jobName)
137121
.editSpec()
138122
.editTemplate()
139123
.editSpec()
140-
.withVolumes(volumes)
141124
.withContainers(ContainerTemplates.baseImageBuilder("admin", Environment.TEST_CLIENTS_IMAGE)
142-
.withCommand("admin-client")
143-
.withArgs(args)
144-
.withVolumeMounts(volumeMounts)
125+
.withCommand("sh")
126+
.withArgs("-c", command)
127+
.addNewEnv()
128+
.withName("CONFIG_FOLDER_PATH")
129+
.withValue("/tmp")
130+
.endEnv()
131+
.addNewEnv()
132+
.withName(ADDITIONAL_CONFIG_VAR)
133+
.withValue(additionalConfig)
134+
.endEnv()
145135
.build())
146136
.endSpec()
147137
.endTemplate()

0 commit comments

Comments
 (0)