Skip to content

Commit 28b8ebc

Browse files
committed
add some functions
1 parent 296f23e commit 28b8ebc

5 files changed

Lines changed: 91 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Add this dependency to your project's POM:
4545
<dependency>
4646
<groupId>io.github.kubesys</groupId>
4747
<artifactId>client-java</artifactId>
48-
<version>1.0.1</version>
48+
<version>1.0.2</version>
4949
</dependency>
5050

5151
<repositories>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>io.github.kubesys</groupId>
77
<artifactId>client-java</artifactId>
8-
<version>1.0.1</version>
8+
<version>1.0.2</version>
99
<packaging>jar</packaging>
1010

1111
<name>client-java</name>

src/main/java/io/github/kubesys/client/KubernetesConstants.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,18 @@ private KubernetesConstants() {
109109

110110
public static final String KUBE_KIND = "kind";
111111

112-
public static final String BINDING_KIND = "Binding";
112+
113+
/*************************************
114+
*
115+
* Kubernetes json structure
116+
*
117+
*************************************/
118+
119+
public static final String KUBD_KIND_BINDING = "Binding";
120+
121+
public static final String KUBD_FULLKIND_CUSTOMRESOURCEDEFINITION = "apiextensions.k8s.io.CustomResourceDefinition";
122+
123+
public static final String KUBE_DEFAULT_KIND_VERBS = "[\"create\", \"delete\", \"deletecollection\", \"get\", \"list\", \"patch\", \"update\", \"watch\"]";
113124

114125
public static final String KUBE_APIVERSION_SPLIT = "/";
115126

src/main/java/io/github/kubesys/client/utils/KubeUtil.java

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public static JsonNode toBinding(String podName, String podNamespace, String hos
3838

3939
ObjectNode binding = new ObjectMapper().createObjectNode();
4040
binding.put(KubernetesConstants.KUBE_APIVERSION, KubernetesConstants.DEFAULT_APIVERSION);
41-
binding.put(KubernetesConstants.KUBE_KIND, KubernetesConstants.BINDING_KIND);
41+
binding.put(KubernetesConstants.KUBE_KIND, KubernetesConstants.KUBD_KIND_BINDING);
4242

4343
ObjectNode metadata = new ObjectMapper().createObjectNode();
4444
metadata.put(KubernetesConstants.KUBE_METADATA_NAME, podName);
@@ -54,6 +54,68 @@ public static JsonNode toBinding(String podName, String podNamespace, String hos
5454
return binding;
5555
}
5656

57+
/**
58+
* json必须符合Kubernetes的CRD规范,这里不考虑异常情况
59+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
60+
*
61+
* @param crd Kubernetes的CRD
62+
* @return 其中一个APIVERSION
63+
*/
64+
public static String getCrdApiversion(JsonNode crd) {
65+
String group = crd.get(KubernetesConstants.KUBE_SPEC)
66+
.get(KubernetesConstants.KUBE_SPEC_GROUP)
67+
.asText();
68+
String version = crd.get(KubernetesConstants.KUBE_SPEC)
69+
.get(KubernetesConstants.KUBE_SPEC_VERSIONS)
70+
.get(0)
71+
.get(KubernetesConstants.KUBE_SPEC_VERSIONS_NAME)
72+
.asText();
73+
74+
return group + KubernetesConstants.KUBE_VALUE_SPLIT + version;
75+
}
76+
77+
/**
78+
* json必须符合Kubernetes的CRD规范,这里不考虑异常情况
79+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
80+
*
81+
* @param crd Kubernetes的CRD
82+
* @return kind
83+
*/
84+
public static String getCrdKind(JsonNode crd) {
85+
return crd.get(KubernetesConstants.KUBE_SPEC)
86+
.get(KubernetesConstants.KUBE_SPEC_NAMES)
87+
.get(KubernetesConstants.KUBE_SPEC_NAMES_KIND)
88+
.asText();
89+
}
90+
91+
/**
92+
* json必须符合Kubernetes的CRD规范,这里不考虑异常情况
93+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
94+
*
95+
* @param crd Kubernetes的CRD
96+
* @return kind
97+
*/
98+
public static String getCrdPlural(JsonNode crd) {
99+
return crd.get(KubernetesConstants.KUBE_SPEC)
100+
.get(KubernetesConstants.KUBE_SPEC_NAMES)
101+
.get(KubernetesConstants.KUBE_SPEC_NAMES_PLURAL)
102+
.asText();
103+
}
104+
105+
/**
106+
* json必须符合Kubernetes规范,这里不考虑异常情况
107+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
108+
*
109+
* @param json Kubernetes对应kind的apiVersion
110+
* @return fullkind
111+
*/
112+
public static String getFullkind(JsonNode json) {
113+
String group = getGroup(json);
114+
String kind = getKind(json);
115+
return group.length() == 0 ? kind : group +
116+
KubernetesConstants.KUBE_VALUE_SPLIT + kind;
117+
}
118+
57119
/**
58120
* 不考虑apiVersion为空或者不符合Kuberneres资源定义的的情况
59121
* 否则抛出异常
@@ -80,6 +142,19 @@ public static String getName(JsonNode json) {
80142
return json.get(KubernetesConstants.KUBE_METADATA).get(KubernetesConstants.KUBE_METADATA_NAME).asText();
81143
}
82144

145+
146+
/**
147+
* 不考虑json为空或者不符合Kuberneres资源定义的的情况
148+
* 否则抛出异常
149+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
150+
*
151+
* @param json json
152+
* @return 获得kubernetes的kind
153+
*/
154+
public static String getKind(JsonNode json) {
155+
return json.get(KubernetesConstants.KUBE_KIND).asText();
156+
}
157+
83158
/**
84159
* 不考虑json为空或者不符合Kuberneres资源定义的的情况
85160
* 否则抛出异常

src/test/java/io/github/kubesys/client/testcases/WatchKindTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void doClose() {
4444
}
4545

4646
};
47-
client.watchResources("Pod", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
47+
client.watchResources("apiextensions.k8s.io.CustomResourceDefinition", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
4848
// or
4949
// client.watchResources("apps.Deployment", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
5050

0 commit comments

Comments
 (0)