Skip to content

Commit 1198045

Browse files
authored
Load Kafka connection config from properties file (#68)
1 parent 4309147 commit 1198045

File tree

10 files changed

+68
-15
lines changed

10 files changed

+68
-15
lines changed

src/main/java/com/devshawn/kafka/gitops/MainCommand.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@
2323
description = "Manage Kafka resources with a desired state file.")
2424
public class MainCommand implements Callable<Integer> {
2525

26+
@Option(names = {"-c", "--command-config"}, paramLabel = "<file>",
27+
description = "Command config properties file.")
28+
private File configFile;
29+
2630
@Option(names = {"-f", "--file"}, paramLabel = "<file>",
2731
description = "Specify the desired state file.", defaultValue = "state.yaml")
28-
private File file;
32+
private File stateFile;
2933

3034
@Option(names = {"--no-delete"}, description = "Disable the ability to delete resources.")
3135
private boolean deleteDisabled = false;
@@ -60,8 +64,12 @@ public boolean isVerboseRequested() {
6064
return verboseRequested;
6165
}
6266

63-
public File getFile() {
64-
return file;
67+
public File getConfigFile() {
68+
return configFile;
69+
}
70+
71+
public File getStateFile() {
72+
return stateFile;
6573
}
6674

6775
public boolean isDeleteDisabled() {

src/main/java/com/devshawn/kafka/gitops/StateManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import ch.qos.logback.classic.Level;
44
import ch.qos.logback.classic.Logger;
5+
import com.devshawn.kafka.gitops.config.KafkaGitopsConfig;
56
import com.devshawn.kafka.gitops.config.KafkaGitopsConfigLoader;
67
import com.devshawn.kafka.gitops.config.ManagerConfig;
78
import com.devshawn.kafka.gitops.domain.confluent.ServiceAccount;
@@ -60,7 +61,8 @@ public StateManager(ManagerConfig managerConfig, ParserService parserService) {
6061
initializeLogger(managerConfig.isVerboseRequested());
6162
this.managerConfig = managerConfig;
6263
this.objectMapper = initializeObjectMapper();
63-
this.kafkaService = new KafkaService(KafkaGitopsConfigLoader.load());
64+
KafkaGitopsConfig config = KafkaGitopsConfigLoader.load();
65+
this.kafkaService = new KafkaService(config);
6466
this.parserService = parserService;
6567
this.roleService = new RoleService();
6668
this.confluentCloudService = new ConfluentCloudService(objectMapper);

src/main/java/com/devshawn/kafka/gitops/cli/AccountCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class AccountCommand implements Callable<Integer> {
2424
public Integer call() {
2525
try {
2626
System.out.println("Creating service accounts...\n");
27-
ParserService parserService = new ParserService(parent.getFile());
27+
ParserService parserService = new ParserService(parent.getStateFile());
2828
StateManager stateManager = new StateManager(generateStateManagerConfig(), parserService);
2929
stateManager.createServiceAccounts();
3030
return 0;
@@ -46,7 +46,8 @@ private ManagerConfig generateStateManagerConfig() {
4646
.setDeleteDisabled(parent.isDeleteDisabled())
4747
.setIncludeUnchangedEnabled(false)
4848
.setSkipAclsDisabled(parent.areAclsDisabled())
49-
.setStateFile(parent.getFile())
49+
.setConfigFile(parent.getConfigFile())
50+
.setStateFile(parent.getStateFile())
5051
.build();
5152
}
5253
}

src/main/java/com/devshawn/kafka/gitops/cli/ApplyCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class ApplyCommand implements Callable<Integer> {
3131
public Integer call() {
3232
try {
3333
System.out.println("Executing apply...\n");
34-
ParserService parserService = new ParserService(parent.getFile());
34+
ParserService parserService = new ParserService(parent.getStateFile());
3535
StateManager stateManager = new StateManager(generateStateManagerConfig(), parserService);
3636
DesiredPlan desiredPlan = stateManager.apply();
3737
LogUtil.printApplyOverview(PlanUtil.getOverview(desiredPlan, parent.isDeleteDisabled(), parent.areAclsDisabled()));
@@ -55,7 +55,8 @@ private ManagerConfig generateStateManagerConfig() {
5555
.setDeleteDisabled(parent.isDeleteDisabled())
5656
.setIncludeUnchangedEnabled(false)
5757
.setSkipAclsDisabled(parent.areAclsDisabled())
58-
.setStateFile(parent.getFile())
58+
.setConfigFile(parent.getConfigFile())
59+
.setStateFile(parent.getStateFile())
5960
.setNullablePlanFile(planFile)
6061
.build();
6162
}

src/main/java/com/devshawn/kafka/gitops/cli/PlanCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class PlanCommand implements Callable<Integer> {
3333
public Integer call() {
3434
try {
3535
System.out.println("Generating execution plan...\n");
36-
ParserService parserService = new ParserService(parent.getFile());
36+
ParserService parserService = new ParserService(parent.getStateFile());
3737
StateManager stateManager = new StateManager(generateStateManagerConfig(), parserService);
3838
DesiredPlan desiredPlan = stateManager.plan();
3939
LogUtil.printPlan(desiredPlan, parent.isDeleteDisabled(), parent.areAclsDisabled());
@@ -58,7 +58,8 @@ private ManagerConfig generateStateManagerConfig() {
5858
.setVerboseRequested(parent.isVerboseRequested())
5959
.setDeleteDisabled(parent.isDeleteDisabled())
6060
.setIncludeUnchangedEnabled(includeUnchanged)
61-
.setStateFile(parent.getFile())
61+
.setConfigFile(parent.getConfigFile())
62+
.setStateFile(parent.getStateFile())
6263
.setSkipAclsDisabled(parent.areAclsDisabled())
6364
.setNullablePlanFile(outputFile)
6465
.build();

src/main/java/com/devshawn/kafka/gitops/cli/ValidateCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class ValidateCommand implements Callable<Integer> {
2121
@Override
2222
public Integer call() {
2323
try {
24-
ParserService parserService = new ParserService(parent.getFile());
24+
ParserService parserService = new ParserService(parent.getStateFile());
2525
StateManager stateManager = new StateManager(generateStateManagerConfig(), parserService);
2626
stateManager.getAndValidateStateFile();
2727
LogUtil.printValidationResult("Successfully validated the desired state file.", true);
@@ -38,7 +38,8 @@ private ManagerConfig generateStateManagerConfig() {
3838
.setDeleteDisabled(parent.isDeleteDisabled())
3939
.setIncludeUnchangedEnabled(false)
4040
.setSkipAclsDisabled(parent.areAclsDisabled())
41-
.setStateFile(parent.getFile())
41+
.setConfigFile(parent.getConfigFile())
42+
.setStateFile(parent.getStateFile())
4243
.build();
4344
}
4445
}

src/main/java/com/devshawn/kafka/gitops/config/KafkaGitopsConfigLoader.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,44 @@
55
import org.apache.kafka.common.config.SaslConfigs;
66
import org.slf4j.LoggerFactory;
77

8+
import java.io.File;
9+
import java.io.FileInputStream;
10+
import java.io.IOException;
11+
import java.io.InputStream;
812
import java.util.HashMap;
913
import java.util.Map;
14+
import java.util.Properties;
1015
import java.util.concurrent.atomic.AtomicReference;
1116

1217
public class KafkaGitopsConfigLoader {
1318

1419
private static org.slf4j.Logger log = LoggerFactory.getLogger(KafkaGitopsConfigLoader.class);
1520

1621
public static KafkaGitopsConfig load() {
22+
return load(null);
23+
}
24+
25+
public static KafkaGitopsConfig load(File configFile) {
1726
KafkaGitopsConfig.Builder builder = new KafkaGitopsConfig.Builder();
18-
setConfig(builder);
27+
setConfigFromFile(configFile, builder);
28+
setConfigFromEnvironment(builder);
1929
return builder.build();
2030
}
2131

22-
private static void setConfig(KafkaGitopsConfig.Builder builder) {
32+
private static void setConfigFromFile(File configFile, KafkaGitopsConfig.Builder builder) {
33+
if (configFile == null) {
34+
return;
35+
}
36+
try(InputStream inputStream = new FileInputStream(configFile)) {
37+
Properties properties = new Properties();
38+
properties.load(inputStream);
39+
properties.forEach( (k, v) -> builder.putConfig(k.toString(), v));
40+
} catch (IOException ioExc) {
41+
log.error("Failed to load config from " + configFile, ioExc);
42+
}
43+
}
44+
45+
private static void setConfigFromEnvironment(KafkaGitopsConfig.Builder builder) {
2346
Map<String, Object> config = new HashMap<>();
2447
AtomicReference<String> username = new AtomicReference<>();
2548
AtomicReference<String> password = new AtomicReference<>();

src/main/java/com/devshawn/kafka/gitops/config/ManagerConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public interface ManagerConfig {
1818

1919
boolean isSkipAclsDisabled();
2020

21+
File getConfigFile();
22+
2123
File getStateFile();
2224

2325
Optional<File> getPlanFile();

src/test/groovy/com/devshawn/kafka/gitops/config/KafkaGitopsConfigLoaderSpec.groovy

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devshawn.kafka.gitops.config
22

3-
3+
import org.apache.kafka.clients.CommonClientConfigs
44
import org.apache.kafka.common.config.SaslConfigs
55
import org.junit.ClassRule
66
import org.junit.contrib.java.lang.system.EnvironmentVariables
@@ -45,5 +45,17 @@ class KafkaGitopsConfigLoaderSpec extends Specification {
4545
config.config.get(SaslConfigs.SASL_JAAS_CONFIG) == "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"te\\\"st\" password=\"te\\\"st-secr\\\"et\";"
4646
}
4747

48+
void 'test command config file'() {
49+
setup:
50+
File configFile = new File(getClass().getResource("/command.properties").toURI())
51+
52+
when:
53+
KafkaGitopsConfig config = KafkaGitopsConfigLoader.load(configFile)
54+
55+
then:
56+
config.config.get(CommonClientConfigs.CLIENT_ID_CONFIG) == "kafka-gitops"
57+
config.config.get(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG) == "localhost:9092"
58+
config.config.get(SaslConfigs.SASL_MECHANISM) == "PLAIN"
59+
}
4860

4961
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bootstrap.servers=commande.9092
2+
client.id=kafka-gitops

0 commit comments

Comments
 (0)