Skip to content

Commit 6097204

Browse files
committed
refactor: share more codes for kubectl entry methods
1 parent 6e64a04 commit 6097204

File tree

15 files changed

+121
-193
lines changed

15 files changed

+121
-193
lines changed

examples/src/main/java/io/kubernetes/client/examples/KubectlExample.java

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ public static void main(String[] args)
9696
String[] parts = from.split(":");
9797
name = parts[0];
9898
from = parts[1];
99-
copy(client)
99+
copy()
100+
.apiClient(client)
100101
.namespace(ns)
101102
.name(name)
102103
.container(cli.getOptionValue("c", ""))
@@ -107,7 +108,8 @@ public static void main(String[] args)
107108
String[] parts = to.split(":");
108109
name = parts[0];
109110
to = parts[1];
110-
copy(client)
111+
copy()
112+
.apiClient(client)
111113
.namespace(ns)
112114
.name(name)
113115
.container(cli.getOptionValue("c", ""))
@@ -133,9 +135,9 @@ public static void main(String[] args)
133135
String effect = ix == -1 ? null : taintSpec.substring(ix + 1);
134136

135137
if (effect == null) {
136-
taint(client).name(name).removeTaint(key).execute();
138+
taint().apiClient(client).name(name).removeTaint(key).execute();
137139
} else {
138-
taint(client).name(name).removeTaint(key, effect).execute();
140+
taint().apiClient(client).name(name).removeTaint(key, effect).execute();
139141
}
140142
System.exit(0);
141143
}
@@ -148,14 +150,14 @@ public static void main(String[] args)
148150
String effect = taintSpec.substring(ix2 + 1);
149151

150152
if (value == null) {
151-
taint(client).name(name).addTaint(key, effect).execute();
153+
taint().apiClient(client).name(name).addTaint(key, effect).execute();
152154
} else {
153-
taint(client).name(name).addTaint(key, value, effect).execute();
155+
taint().apiClient(client).name(name).addTaint(key, value, effect).execute();
154156
}
155157
System.exit(0);
156158
case "portforward":
157159
name = args[1];
158-
KubectlPortForward forward = portforward(client).name(name).namespace(ns);
160+
KubectlPortForward forward = portforward().apiClient(client).name(name).namespace(ns);
159161
for (int i = 2; i < args.length; i++) {
160162
String port = args[i];
161163
String[] ports = port.split(":");
@@ -167,7 +169,12 @@ public static void main(String[] args)
167169
case "log":
168170
name = args[1];
169171
ByteStreams.copy(
170-
log(client).name(name).namespace(ns).container(cli.getOptionValue("c", "")).execute(),
172+
log()
173+
.apiClient(client)
174+
.name(name)
175+
.namespace(ns)
176+
.container(cli.getOptionValue("c", ""))
177+
.execute(),
171178
System.out);
172179
System.exit(0);
173180
case "scale":
@@ -178,11 +185,16 @@ public static void main(String[] args)
178185
System.exit(-3);
179186
}
180187
int replicas = Integer.parseInt(cli.getOptionValue("r"));
181-
scale(client, getClassForKind(kind)).namespace(ns).name(name).replicas(replicas).execute();
188+
scale(getClassForKind(kind))
189+
.apiClient(client)
190+
.namespace(ns)
191+
.name(name)
192+
.replicas(replicas)
193+
.execute();
182194
System.out.println("Deployment scaled.");
183195
System.exit(0);
184196
case "version":
185-
System.out.println(version(client));
197+
System.out.println(version().apiClient(client));
186198
System.exit(0);
187199
case "label":
188200
kind = args[1];
@@ -194,20 +206,21 @@ public static void main(String[] args)
194206
System.err.println("Unknown kind: " + kind);
195207
System.exit(-2);
196208
}
197-
label(client, clazz).namespace(ns).name(name).addLabel(labelKey, labelValue);
209+
label(clazz).apiClient(client).namespace(ns).name(name).addLabel(labelKey, labelValue);
198210
System.exit(0);
199211
case "exec":
200212
name = args[1];
201213
String[] command = Arrays.copyOfRange(args, 2, args.length);
202214
KubectlExec e =
203-
exec(client)
215+
exec()
216+
.apiClient(client)
204217
.namespace(ns)
205218
.name(name)
206219
.command(command)
207220
.container(cli.getOptionValue("c", ""));
208221
System.exit(e.execute());
209222
case "api-resources":
210-
apiResources(client).execute().stream()
223+
apiResources().apiClient(client).execute().stream()
211224
.forEach(
212225
r ->
213226
System.out.printf(

extended/src/main/java/io/kubernetes/client/extended/kubectl/Kubectl.java

Lines changed: 25 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,7 @@ public class Kubectl {
2525

2626
/** Equivalence for `kubectl taint`. */
2727
public static KubectlTaint taint() {
28-
return taint(Configuration.getDefaultApiClient());
29-
}
30-
31-
/**
32-
* Equivalence for `kubectl taint`
33-
*
34-
* @param apiClient The client to use
35-
*/
36-
public static KubectlTaint taint(ApiClient apiClient) {
37-
return new KubectlTaint(apiClient);
28+
return new KubectlTaint();
3829
}
3930

4031
/**
@@ -43,17 +34,7 @@ public static KubectlTaint taint(ApiClient apiClient) {
4334
* @return the kubectl copy
4435
*/
4536
public static KubectlCopy copy() {
46-
return copy(Configuration.getDefaultApiClient());
47-
}
48-
49-
/**
50-
* Equivalence for `kubectl cp`.
51-
*
52-
* @param apiClient the api client instance
53-
* @return the kubectl copy
54-
*/
55-
public static KubectlCopy copy(ApiClient apiClient) {
56-
return new KubectlCopy(apiClient);
37+
return new KubectlCopy();
5738
}
5839

5940
/**
@@ -65,20 +46,7 @@ public static KubectlCopy copy(ApiClient apiClient) {
6546
*/
6647
public static <ApiType extends KubernetesObject> KubectlLabel<ApiType> label(
6748
Class<ApiType> apiTypeClass) {
68-
return label(Configuration.getDefaultApiClient(), apiTypeClass);
69-
}
70-
71-
/**
72-
* Equivalence for `kubectl label`.
73-
*
74-
* @param <ApiType> the target api type
75-
* @param apiClient the api client instance
76-
* @param apiTypeClass the api type class
77-
* @return the kubectl label
78-
*/
79-
public static <ApiType extends KubernetesObject> KubectlLabel<ApiType> label(
80-
ApiClient apiClient, Class<ApiType> apiTypeClass) {
81-
return new KubectlLabel<>(apiClient, apiTypeClass);
49+
return new KubectlLabel<>(apiTypeClass);
8250
}
8351

8452
/**
@@ -90,20 +58,7 @@ public static <ApiType extends KubernetesObject> KubectlLabel<ApiType> label(
9058
*/
9159
public static <ApiType extends KubernetesObject> KubectlAnnotate<ApiType> annotate(
9260
Class<ApiType> apiTypeClass) {
93-
return annotate(Configuration.getDefaultApiClient(), apiTypeClass);
94-
}
95-
96-
/**
97-
* Equivalence for `kubectl annotate`.
98-
*
99-
* @param <ApiType> the target api type
100-
* @param apiClient the api client instance
101-
* @param apiTypeClass the api type class
102-
* @return the kubectl annotation
103-
*/
104-
public static <ApiType extends KubernetesObject> KubectlAnnotate<ApiType> annotate(
105-
ApiClient apiClient, Class<ApiType> apiTypeClass) {
106-
return new KubectlAnnotate<>(apiClient, apiTypeClass);
61+
return new KubectlAnnotate<>(apiTypeClass);
10762
}
10863

10964
/**
@@ -112,17 +67,7 @@ public static <ApiType extends KubernetesObject> KubectlAnnotate<ApiType> annota
11267
* @return the kubectl version
11368
*/
11469
public static KubectlVersion version() {
115-
return version(Configuration.getDefaultApiClient());
116-
}
117-
118-
/**
119-
* Equivalence for `kubectl version`.
120-
*
121-
* @param apiClient the api client instance
122-
* @return the kubectl version
123-
*/
124-
public static KubectlVersion version(ApiClient apiClient) {
125-
return new KubectlVersion(apiClient);
70+
return new KubectlVersion();
12671
}
12772

12873
/*
@@ -134,30 +79,7 @@ public static KubectlVersion version(ApiClient apiClient) {
13479
*/
13580
public static <ApiType extends KubernetesObject> KubectlScale<ApiType> scale(
13681
Class<ApiType> apiTypeClass) {
137-
return scale(Configuration.getDefaultApiClient(), apiTypeClass);
138-
}
139-
140-
/**
141-
* Equivalent for `kubectl scale`
142-
*
143-
* @param <ApiType> the target api type
144-
* @param apiClient The api client instance
145-
* @param apiTypeClass the api type class
146-
* @return the kubectl scale operator
147-
*/
148-
public static <ApiType extends KubernetesObject> KubectlScale<ApiType> scale(
149-
ApiClient apiClient, Class<ApiType> apiTypeClass) {
150-
return new KubectlScale<>(apiClient, apiTypeClass);
151-
}
152-
153-
/**
154-
* Equivalent for `kubectl exec`
155-
*
156-
* @param apiClient The api client instance
157-
* @return the kubectl exec operator
158-
*/
159-
public static KubectlExec exec(ApiClient apiClient) {
160-
return new KubectlExec(apiClient);
82+
return new KubectlScale<>(apiTypeClass);
16183
}
16284

16385
/**
@@ -166,17 +88,7 @@ public static KubectlExec exec(ApiClient apiClient) {
16688
* @return the kubectl exec operator
16789
*/
16890
public static KubectlExec exec() {
169-
return exec(Configuration.getDefaultApiClient());
170-
}
171-
172-
/**
173-
* Equivalent for `kubectl log`
174-
*
175-
* @param apiClient The api client instance
176-
* @return the kubectl log operator
177-
*/
178-
public static KubectlLog log(ApiClient apiClient) {
179-
return new KubectlLog(apiClient);
91+
return new KubectlExec();
18092
}
18193

18294
/**
@@ -185,23 +97,15 @@ public static KubectlLog log(ApiClient apiClient) {
18597
* @return the kubectl log operator
18698
*/
18799
public static KubectlLog log() {
188-
return log(Configuration.getDefaultApiClient());
100+
return new KubectlLog();
189101
}
190102

191103
public static KubectlPortForward portforward() {
192-
return portforward(Configuration.getDefaultApiClient());
193-
}
194-
195-
public static KubectlPortForward portforward(ApiClient apiClient) {
196-
return new KubectlPortForward(apiClient);
104+
return new KubectlPortForward();
197105
}
198106

199107
public static KubectlApiResources apiResources() {
200-
return apiResources(Configuration.getDefaultApiClient());
201-
}
202-
203-
public static KubectlApiResources apiResources(ApiClient apiClient) {
204-
return new KubectlApiResources(apiClient);
108+
return new KubectlApiResources();
205109
}
206110

207111
/**
@@ -220,18 +124,27 @@ public static interface Executable<OUTPUT> {
220124
OUTPUT execute() throws KubectlException;
221125
}
222126

127+
abstract static class ApiClientBuilder<T extends ApiClientBuilder> {
128+
129+
ApiClient apiClient = Configuration.getDefaultApiClient();
130+
131+
public T apiClient(ApiClient apiClient) {
132+
this.apiClient = apiClient;
133+
return (T) this;
134+
}
135+
}
136+
223137
abstract static class ResourceBuilder<
224-
ApiType extends KubernetesObject, T extends ResourceBuilder<ApiType, T>> {
225-
final ApiClient apiClient;
138+
ApiType extends KubernetesObject, T extends ResourceBuilder<ApiType, T>>
139+
extends ApiClientBuilder<T> {
226140
final Class<ApiType> apiTypeClass;
227141
String namespace;
228142
String name;
229143
String apiGroup;
230144
String apiVersion;
231145
String resourceNamePlural;
232146

233-
ResourceBuilder(ApiClient client, Class<ApiType> apiTypeClass) {
234-
this.apiClient = client;
147+
ResourceBuilder(Class<ApiType> apiTypeClass) {
235148
this.apiTypeClass = apiTypeClass;
236149
}
237150

@@ -266,8 +179,8 @@ abstract static class ResourceAndContainerBuilder<
266179
extends ResourceBuilder<ApiType, T> {
267180
String container;
268181

269-
ResourceAndContainerBuilder(ApiClient client, Class<ApiType> apiTypeClass) {
270-
super(client, apiTypeClass);
182+
ResourceAndContainerBuilder(Class<ApiType> apiTypeClass) {
183+
super(apiTypeClass);
271184
}
272185

273186
public T container(String container) {

extended/src/main/java/io/kubernetes/client/extended/kubectl/KubectlAnnotate.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import io.kubernetes.client.common.KubernetesListObject;
1616
import io.kubernetes.client.common.KubernetesObject;
1717
import io.kubernetes.client.extended.kubectl.exception.KubectlException;
18-
import io.kubernetes.client.openapi.ApiClient;
1918
import io.kubernetes.client.util.annotations.Annotations;
2019
import io.kubernetes.client.util.generic.GenericKubernetesApi;
2120
import io.kubernetes.client.util.generic.KubernetesApiResponse;
@@ -29,8 +28,8 @@ public class KubectlAnnotate<ApiType extends KubernetesObject>
2928

3029
private final Map<String, String> addingAnnotations;
3130

32-
KubectlAnnotate(ApiClient apiClient, Class<ApiType> apiTypeClass) {
33-
super(apiClient, apiTypeClass);
31+
KubectlAnnotate(Class<ApiType> apiTypeClass) {
32+
super(apiTypeClass);
3433
this.addingAnnotations = new HashMap<>();
3534
}
3635

extended/src/main/java/io/kubernetes/client/extended/kubectl/KubectlApiResources.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,17 @@
1414

1515
import io.kubernetes.client.Discovery;
1616
import io.kubernetes.client.extended.kubectl.exception.KubectlException;
17-
import io.kubernetes.client.openapi.ApiClient;
1817
import io.kubernetes.client.openapi.ApiException;
1918
import java.util.Set;
2019

21-
public class KubectlApiResources implements Kubectl.Executable<Set<Discovery.APIResource>> {
22-
23-
private final Discovery discovery;
24-
25-
KubectlApiResources(ApiClient apiClient) {
26-
this.discovery = new Discovery(apiClient);
27-
}
20+
public class KubectlApiResources extends Kubectl.ApiClientBuilder<KubectlApiResources>
21+
implements Kubectl.Executable<Set<Discovery.APIResource>> {
2822

2923
@Override
3024
public Set<Discovery.APIResource> execute() throws KubectlException {
25+
Discovery discovery = new Discovery(this.apiClient);
3126
try {
32-
return this.discovery.findAll();
27+
return discovery.findAll();
3328
} catch (ApiException e) {
3429
throw new KubectlException(e);
3530
}

extended/src/main/java/io/kubernetes/client/extended/kubectl/KubectlCopy.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import io.kubernetes.client.Copy;
1818
import io.kubernetes.client.extended.kubectl.exception.KubectlException;
19-
import io.kubernetes.client.openapi.ApiClient;
2019
import io.kubernetes.client.openapi.ApiException;
2120
import io.kubernetes.client.openapi.models.V1Pod;
2221
import io.kubernetes.client.util.exception.CopyNotSupportedException;
@@ -30,8 +29,8 @@ public class KubectlCopy extends Kubectl.ResourceAndContainerBuilder<V1Pod, Kube
3029
private Boolean toPod;
3130
private boolean dir;
3231

33-
KubectlCopy(ApiClient client) {
34-
super(client, V1Pod.class);
32+
KubectlCopy() {
33+
super(V1Pod.class);
3534
this.toPod = null;
3635
}
3736

0 commit comments

Comments
 (0)