Skip to content

Commit 7cb7d63

Browse files
committed
Address comments.
1 parent 78a2658 commit 7cb7d63

2 files changed

Lines changed: 35 additions & 8 deletions

File tree

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package io.kubernetes.client.extended.kubectl;
1414

1515
import io.kubernetes.client.Discovery;
16+
import io.kubernetes.client.apimachinery.GroupVersionKind;
1617
import io.kubernetes.client.apimachinery.GroupVersionResource;
1718
import io.kubernetes.client.common.KubernetesListObject;
1819
import io.kubernetes.client.common.KubernetesObject;
@@ -316,17 +317,15 @@ protected GenericKubernetesApi<ApiType, KubernetesListObject> getGenericApi()
316317
throws KubectlException {
317318
if (targetObj instanceof DynamicKubernetesObject) {
318319
DynamicKubernetesObject obj = (DynamicKubernetesObject)targetObj;
319-
String gv = obj.getApiVersion();
320-
int ix = gv.indexOf("/");
321-
String group = ix == -1 ? "" : gv.substring(0, ix);
322-
String version = gv.substring(ix + 1);
323-
320+
GroupVersionKind gvk = ModelMapper.groupVersionKindFromApiVersionAndKind(obj.getApiVersion(), obj.getKind());
321+
Discovery.APIResource rsrc = ModelMapper.findApiResourceByGroupVersionKind(gvk);
322+
String plural = rsrc == null ? obj.getKind() + "s" /* hack! */ : rsrc.getResourcePlural();
324323
return new GenericKubernetesApi<DynamicKubernetesObject, DynamicKubernetesListObject>(
325324
DynamicKubernetesObject.class,
326325
DynamicKubernetesListObject.class,
327-
group,
328-
version,
329-
obj.getKind() + "s" // TODO: Extend the model mapper to be able to look up plurals
326+
gvk.getGroup(),
327+
gvk.getVersion(),
328+
plural
330329
);
331330
}
332331
return getGenericApi();

util/src/main/java/io/kubernetes/client/util/ModelMapper.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,34 @@ public static Boolean isNamespaced(Class<?> clazz) {
322322
return isNamespacedByClasses.get(clazz);
323323
}
324324

325+
/**
326+
* Find GroupVersionKind from fields in a Kubernetes Resource
327+
* @param apiVersion The apiVersion field from the object
328+
* @param kind The kind for the object
329+
* @return the GroupVersionKind
330+
*/
331+
public static GroupVersionKind groupVersionKindFromApiVersionAndKind(String apiVersion, String kind) {
332+
int ix = apiVersion.indexOf("/");
333+
String group = ix == -1 ? "" : apiVersion.substring(0, ix);
334+
String version = apiVersion.substring(ix + 1);
335+
return new GroupVersionKind(group, version, kind);
336+
}
337+
338+
public static Discovery.APIResource findApiResourceByGroupVersionKind(GroupVersionKind gvk) {
339+
// TODO: Create another hash map to make this lookup fast? For now I don't think it matters, but it's definitely slow.
340+
for (Discovery.APIResource apiResource : lastAPIDiscovery) {
341+
if (!apiResource.getGroup().equals(gvk.getGroup()) || !apiResource.getKind().equals(gvk.getKind())) {
342+
continue;
343+
}
344+
for (String version : apiResource.getVersions()) {
345+
if (version.equals(gvk.getVersion())) {
346+
return apiResource;
347+
}
348+
}
349+
}
350+
return null;
351+
}
352+
325353
private static void initApiGroupMap() {
326354
preBuiltApiGroups.put("Admissionregistration", "admissionregistration.k8s.io");
327355
preBuiltApiGroups.put("Apiextensions", "apiextensions.k8s.io");

0 commit comments

Comments
 (0)