Skip to content
This repository was archived by the owner on Apr 10, 2024. It is now read-only.

Commit dfb972a

Browse files
authored
improve: builder final value computing (#83)
1 parent 7e8242e commit dfb972a

File tree

1 file changed

+40
-44
lines changed

1 file changed

+40
-44
lines changed

core/src/main/java/io/javaoperatorsdk/jenvtest/KubeAPIServerConfigBuilder.java

Lines changed: 40 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@
77
public final class KubeAPIServerConfigBuilder {
88

99
// environment variables
10-
public static final String JENVTEST_DOWNLOAD_BINARIES = "JENVTEST_OFFLINE_MODE";
11-
public static final String JENVTEST_DIR_ENV_VAR = "JENVTEST_DIR";
12-
public static final String JENVTEST_API_SERVER_VERSION_ENV_VAR = "JENVTEST_API_SERVER_VERSION";
10+
public static final String JENVTEST_OFFLINE_MODE = "JENVTEST_OFFLINE_MODE";
11+
public static final String JENVTEST_DIR = "JENVTEST_DIR";
12+
public static final String JENVTEST_KUBE_API_SERVER_VERSION = "JENVTEST_KUBE_API_SERVER_VERSION";
1313
public static final String JENVTEST_WAIT_FOR_ETCD_HEALTH_CHECK =
1414
"JENVTEST_WAIT_FOR_ETCD_HEALTH_CHECK";
1515
public static final String JENVTEST_STARTUP_TIMEOUT = "JENVTEST_STARTUP_TIMEOUT";
1616

1717
public static final String DIRECTORY_NAME = ".jenvtest";
1818

19+
private final List<String> apiServerFlags = new ArrayList<>(0);
20+
private boolean updateKubeConfig = false;
21+
1922
private String jenvtestDir;
2023
private String apiServerVersion;
2124
private Boolean offlineMode;
22-
private boolean updateKubeConfig = false;
23-
private final List<String> apiServerFlags = new ArrayList<>(0);
2425
private Boolean waitForEtcdHealthCheckOnStartup;
2526
private Integer startupTimeout;
2627

@@ -46,49 +47,44 @@ public KubeAPIServerConfigBuilder withOfflineMode(boolean downloadBinaries) {
4647
}
4748

4849
public KubeAPIServerConfig build() {
49-
if (jenvtestDir == null) {
50-
var jenvtestDirFromEnvVar = System.getenv(JENVTEST_DIR_ENV_VAR);
51-
if (jenvtestDirFromEnvVar != null) {
52-
this.jenvtestDir = jenvtestDirFromEnvVar;
53-
} else {
54-
this.jenvtestDir = new File(System.getProperty("user.home"), DIRECTORY_NAME).getPath();
55-
}
56-
}
57-
if (offlineMode == null) {
58-
var downloadBinariesEnvVal = System.getenv(JENVTEST_DOWNLOAD_BINARIES);
59-
if (downloadBinariesEnvVal != null) {
60-
this.offlineMode = Boolean.parseBoolean(downloadBinariesEnvVal);
61-
} else {
62-
this.offlineMode = false;
63-
}
64-
}
65-
if (apiServerVersion == null) {
66-
var apiServerVersionEnvVar = System.getenv(JENVTEST_API_SERVER_VERSION_ENV_VAR);
67-
if (apiServerVersionEnvVar != null) {
68-
this.apiServerVersion = apiServerVersionEnvVar;
69-
}
70-
}
71-
if (waitForEtcdHealthCheckOnStartup == null) {
72-
var waitForEtcdHealthCheckOnStartup = System.getenv(JENVTEST_WAIT_FOR_ETCD_HEALTH_CHECK);
73-
if (waitForEtcdHealthCheckOnStartup != null) {
74-
this.waitForEtcdHealthCheckOnStartup =
75-
Boolean.parseBoolean(waitForEtcdHealthCheckOnStartup);
76-
} else {
77-
this.waitForEtcdHealthCheckOnStartup = false;
78-
}
79-
}
80-
if (startupTimeout == null) {
81-
var envStartupTimeout = System.getenv(JENVTEST_STARTUP_TIMEOUT);
82-
if (envStartupTimeout != null) {
83-
this.startupTimeout = Integer.parseInt(envStartupTimeout);
84-
} else {
85-
this.startupTimeout = 60_000;
86-
}
87-
}
50+
this.jenvtestDir = finalConfigValue(this.jenvtestDir, JENVTEST_DIR,
51+
new File(System.getProperty("user.home"), DIRECTORY_NAME).getPath());
52+
this.offlineMode = finalConfigValue(this.offlineMode, JENVTEST_OFFLINE_MODE, false);
53+
this.apiServerVersion =
54+
finalConfigValue(this.apiServerVersion, JENVTEST_KUBE_API_SERVER_VERSION, null);
55+
this.waitForEtcdHealthCheckOnStartup = finalConfigValue(this.waitForEtcdHealthCheckOnStartup,
56+
JENVTEST_WAIT_FOR_ETCD_HEALTH_CHECK, false);
57+
this.startupTimeout = finalConfigValue(this.startupTimeout, JENVTEST_STARTUP_TIMEOUT, 60_000);
58+
8859
return new KubeAPIServerConfig(jenvtestDir, apiServerVersion, offlineMode, apiServerFlags,
8960
updateKubeConfig, waitForEtcdHealthCheckOnStartup, startupTimeout);
9061
}
9162

63+
private String finalConfigValue(String currentValue, String envVariable, String defaultValue) {
64+
return finalConfigValue(String.class, currentValue, envVariable, defaultValue);
65+
}
66+
67+
private Boolean finalConfigValue(Boolean currentValue, String envVariable, Boolean defaultValue) {
68+
return finalConfigValue(Boolean.class, currentValue, envVariable, defaultValue);
69+
}
70+
71+
private Integer finalConfigValue(Integer currentValue, String envVariable, Integer defaultValue) {
72+
return finalConfigValue(Integer.class, currentValue, envVariable, defaultValue);
73+
}
74+
75+
private <T> T finalConfigValue(Class<T> type, T currentValue, String envVariable,
76+
T defaultValue) {
77+
if (currentValue != null) {
78+
return currentValue;
79+
}
80+
var envValue = System.getenv(envVariable);
81+
if (envValue != null) {
82+
return type.cast(envValue);
83+
} else {
84+
return defaultValue;
85+
}
86+
}
87+
9288
public KubeAPIServerConfigBuilder withUpdateKubeConfig(boolean updateKubeConfig) {
9389
this.updateKubeConfig = updateKubeConfig;
9490
return this;

0 commit comments

Comments
 (0)