Skip to content

Commit dd93b9d

Browse files
committed
Add Api Groups to Yaml Group/Version autodetection
The following is a non-exhaustive list of Api prefixes which are missing from class names: - AdmissionregistrationV1alpha1 - AdmissionregistrationV1beta1 - ApiextensionsV1beta1 - ApiregistrationV1 - ApiregistrationV1beta1 - AppsV1beta2 - AppsV1 - AuthenticationV1 - AuthenticationV1beta1 - AuthorizationV1 - AuthorizationV1beta1 - AutoscalingV1 - AutoscalingV2beta1 - ExtensionsV1 - BatchV1 - BatchV1beta1 - BatchV2alpha1 - CertificatesV1beta1 - NetworkingV1 - PolicyV1beta1 - RbacAuthorizationV1 - RbacAuthorizationV1alpha1 - RbacAuthorizationV1beta1 - SchedulingV1alpha1 - SettingsV1alpha1 - StorageV1 - StorageV1alpha1 - StorageV1beta1
1 parent 9e0b3b8 commit dd93b9d

File tree

2 files changed

+92
-44
lines changed

2 files changed

+92
-44
lines changed

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

Lines changed: 71 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -18,64 +18,93 @@
1818
import java.io.IOException;
1919
import java.io.Reader;
2020
import java.io.StringReader;
21-
import java.util.HashMap;
22-
import java.util.Map;
23-
import java.util.Set;
21+
import java.util.*;
2422
import org.slf4j.Logger;
2523
import org.slf4j.LoggerFactory;
2624

2725
public class Yaml {
2826
private static org.yaml.snakeyaml.Yaml yaml = new org.yaml.snakeyaml.Yaml();
2927
private static Map<String, Class<?>> classes = new HashMap<>();
28+
private static Map<String, String> apiGroups = new HashMap<>();
29+
private static List<String> apiVersions = new ArrayList<>();
3030

3131
static final Logger logger = LoggerFactory.getLogger(Yaml.class);
3232

33-
public static String getApiGroupVersion(String name) {
34-
if (name.startsWith("AppsV1beta2")) {
35-
return "apps/v1beta2";
36-
}
37-
if (name.startsWith("AppsV1beta1")) {
38-
return "apps/v1beta1";
39-
}
40-
if (name.startsWith("AppsV1")) {
41-
return "apps/v1";
42-
}
43-
if (name.startsWith("ExtensionsV1beta1")) {
44-
return "extensions/v1beta1";
45-
}
46-
if (name.startsWith("ExtensionsV1")) {
47-
return "extensions/v1";
48-
}
49-
if (name.startsWith("V1beta1")) {
50-
return "v1beta1";
51-
}
52-
if (name.startsWith("V1beta2")) {
53-
return "v1beta2";
54-
}
55-
if (name.startsWith("V1alpha1")) {
56-
return "v1alpha1";
57-
}
58-
if (name.startsWith("V2beta1")) {
59-
return "v2beta1";
60-
}
61-
if (name.startsWith("V2alpha1")) {
62-
return "v2alpha1";
63-
}
64-
if (name.startsWith("V1")) {
65-
return "v1";
66-
}
67-
return name;
33+
private static void initApiGroupMap() {
34+
apiGroups.put("Admissionregistration", "admissionregistration.k8s.io");
35+
apiGroups.put("Apiextensions", "apiextensions.k8s.io");
36+
apiGroups.put("Apiregistration", "apiregistration.k8s.io");
37+
apiGroups.put("Apps", "apps");
38+
apiGroups.put("Authentication", "authentication.k8s.io");
39+
apiGroups.put("Authorization", "authorization.k8s.io");
40+
apiGroups.put("Autoscaling", "autoscaling");
41+
apiGroups.put("Extensions", "extensions");
42+
apiGroups.put("Batch", "batch");
43+
apiGroups.put("Certificates", "certificates.k8s.io");
44+
apiGroups.put("Networking", "networking.k8s.io");
45+
apiGroups.put("Policy", "policy");
46+
apiGroups.put("RbacAuthorization", "rbac.authorization.k8s.io");
47+
apiGroups.put("Scheduling", "scheduling.k8s.io");
48+
apiGroups.put("Settings", "settings.k8s.io");
49+
apiGroups.put("Storage", "storage.k8s.io");
50+
}
51+
52+
private static void initApiVersionList() {
53+
// Order important
54+
apiVersions.add("V2beta1");
55+
apiVersions.add("V2alpha1");
56+
apiVersions.add("V1beta2");
57+
apiVersions.add("V1beta1");
58+
apiVersions.add("V1alpha1");
59+
apiVersions.add("V1");
60+
}
61+
62+
private static String[] getApiGroup(String name) {
63+
String[] parts = new String[2];
64+
65+
for (String prefix : apiGroups.keySet()) {
66+
if (name.startsWith(prefix)) {
67+
parts[0] = apiGroups.get(prefix);
68+
parts[1] = name.substring(prefix.length());
69+
break;
70+
}
71+
}
72+
if (parts[0] == null) parts[1] = name;
73+
74+
return parts;
75+
}
76+
77+
private static String[] getApiVersion(String name) {
78+
String[] parts = new String[2];
79+
for (String version : apiVersions) {
80+
if (name.startsWith(version)) {
81+
parts[0] = version.toLowerCase();
82+
parts[1] = name.substring(version.length());
83+
break;
84+
}
85+
}
86+
if (parts[0] == null) parts[1] = name;
87+
88+
return parts;
6889
}
6990

7091
private static void initModelMap() throws IOException {
92+
initApiGroupMap();
93+
initApiVersionList();
94+
7195
ClassPath cp = ClassPath.from(ClassLoader.getSystemClassLoader());
7296
Set<ClassPath.ClassInfo> allClasses = cp.getTopLevelClasses("io.kubernetes.client.models");
7397

7498
for (ClassPath.ClassInfo clazz : allClasses) {
75-
String groupVersion = getApiGroupVersion(clazz.getSimpleName());
76-
int len = groupVersion.replace("/", "").length();
77-
String name = clazz.getSimpleName().substring(len);
78-
classes.put(groupVersion + "/" + name, clazz.load());
99+
String modelName = "";
100+
String[] nameParts = getApiGroup(clazz.getSimpleName());
101+
modelName += nameParts[0] == null ? "" : nameParts[0] + "/";
102+
103+
nameParts = getApiVersion(nameParts[1]);
104+
modelName += nameParts[0] == null ? "" : nameParts[0] + "/";
105+
modelName += nameParts[1];
106+
107+
classes.put(modelName, clazz.load());
79108
}
80109
}
81110

util/src/test/java/io/kubernetes/client/util/YamlTest.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,28 @@
2222
public class YamlTest {
2323
@Test
2424
public void testLoad() {
25-
String[] kinds = new String[] {"Pod", "CronJob", "HorizontalPodAutoscaler", "ClusterRole", "Deployment", "APIService", "Scale", "Deployment"};
25+
String[] kinds =
26+
new String[] {
27+
"Pod",
28+
"CronJob",
29+
"HorizontalPodAutoscaler",
30+
"ClusterRole",
31+
"Deployment",
32+
"APIService",
33+
"Scale",
34+
"Deployment"
35+
};
2636
String[] apiVersions =
27-
new String[] {"v1", "v2alpha1", "v2beta1", "v1alpha1", "v1beta2", "v1beta1", "extensions/v1beta1", "apps/v1beta1"};
37+
new String[] {
38+
"v1",
39+
"v2alpha1",
40+
"v2beta1",
41+
"v1alpha1",
42+
"v1beta2",
43+
"v1beta1",
44+
"extensions/v1beta1",
45+
"apps/v1beta1"
46+
};
2847
String[] classNames =
2948
new String[] {
3049
"V1Pod",

0 commit comments

Comments
 (0)