-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
KubeAPIServerConfigBuilder.java
142 lines (118 loc) · 5.02 KB
/
KubeAPIServerConfigBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
* Copyright (C) 2015 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.fabric8.kubeapitest;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public final class KubeAPIServerConfigBuilder {
// environment variables
public static final String KUBE_API_TEST_OFFLINE_MODE = "KUBE_API_TEST_OFFLINE_MODE";
public static final String KUBE_API_TEST_DIR = "KUBE_API_TEST_DIR";
public static final String KUBE_API_TEST_API_SERVER_VERSION = "KUBE_API_TEST_API_SERVER_VERSION";
public static final String KUBE_API_TEST_WAIT_FOR_ETCD_HEALTH_CHECK = "KUBE_API_TEST_WAIT_FOR_ETCD_HEALTH_CHECK";
public static final String KUBE_API_TEST_STARTUP_TIMEOUT = "KUBE_API_TEST_STARTUP_TIMEOUT";
public static final String DIRECTORY_NAME = ".kubeapitest";
private final List<String> apiServerFlags = new ArrayList<>(0);
private boolean updateKubeConfig = false;
private String apiTestDir;
private String apiServerVersion;
private Boolean offlineMode;
private Boolean waitForEtcdHealthCheckOnStartup;
private Integer startupTimeout;
public KubeAPIServerConfigBuilder() {
}
public static KubeAPIServerConfigBuilder anAPIServerConfig() {
return new KubeAPIServerConfigBuilder();
}
public KubeAPIServerConfigBuilder withTestDir(String apiTestDir) {
this.apiTestDir = apiTestDir;
return this;
}
public KubeAPIServerConfigBuilder withApiServerVersion(String apiServerVersion) {
this.apiServerVersion = apiServerVersion;
return this;
}
public KubeAPIServerConfigBuilder withOfflineMode(boolean downloadBinaries) {
this.offlineMode = downloadBinaries;
return this;
}
public KubeAPIServerConfig build() {
this.apiTestDir = finalConfigValue(this.apiTestDir, KUBE_API_TEST_DIR,
new File(System.getProperty("user.home"), DIRECTORY_NAME).getPath());
this.offlineMode = finalConfigValue(this.offlineMode, KUBE_API_TEST_OFFLINE_MODE, false);
this.apiServerVersion = finalConfigValue(this.apiServerVersion, KUBE_API_TEST_API_SERVER_VERSION, null);
this.waitForEtcdHealthCheckOnStartup = finalConfigValue(this.waitForEtcdHealthCheckOnStartup,
KUBE_API_TEST_WAIT_FOR_ETCD_HEALTH_CHECK, false);
this.startupTimeout = finalConfigValue(this.startupTimeout, KUBE_API_TEST_STARTUP_TIMEOUT, 60_000);
return new KubeAPIServerConfig(apiTestDir, apiServerVersion, offlineMode, apiServerFlags,
updateKubeConfig, waitForEtcdHealthCheckOnStartup, startupTimeout);
}
private String finalConfigValue(String currentValue, String envVariable, String defaultValue) {
return finalConfigValue(String.class, currentValue, envVariable, defaultValue);
}
private Boolean finalConfigValue(Boolean currentValue, String envVariable, Boolean defaultValue) {
return finalConfigValue(Boolean.class, currentValue, envVariable, defaultValue);
}
private Integer finalConfigValue(Integer currentValue, String envVariable, Integer defaultValue) {
return finalConfigValue(Integer.class, currentValue, envVariable, defaultValue);
}
private <T> T finalConfigValue(Class<T> type, T currentValue, String envVariable,
T defaultValue) {
if (currentValue != null) {
return currentValue;
}
String envValue = System.getenv(envVariable);
if (envValue != null) {
return type.cast(envValue);
} else {
return defaultValue;
}
}
public KubeAPIServerConfigBuilder withUpdateKubeConfig(boolean updateKubeConfig) {
this.updateKubeConfig = updateKubeConfig;
return this;
}
public KubeAPIServerConfigBuilder withApiServerFlags(List<String> flags) {
apiServerFlags.addAll(flags);
return this;
}
public KubeAPIServerConfigBuilder withApiServerFlag(String key, String value) {
checkKeyPrefix(key);
apiServerFlags.add(key);
apiServerFlags.add(value);
return this;
}
public KubeAPIServerConfigBuilder withApiServerFlag(String key) {
checkKeyPrefix(key);
apiServerFlags.add(key);
return this;
}
public KubeAPIServerConfigBuilder withStartupTimeout(Integer startupTimeout) {
this.startupTimeout = startupTimeout;
return this;
}
public KubeAPIServerConfigBuilder withWaitForEtcdHealthCheckOnStartup(
boolean waitForEtcdHealthCheckOnStartup) {
this.waitForEtcdHealthCheckOnStartup = waitForEtcdHealthCheckOnStartup;
return this;
}
private void checkKeyPrefix(String key) {
if (!key.startsWith("--")) {
throw new KubeAPITestException(
"Kube API Server flag needs to start with double dash: '--'; Instead found key: " + key);
}
}
}