Skip to content

Commit 296f23e

Browse files
committed
merge all KubeUtil
1 parent 9563302 commit 296f23e

6 files changed

Lines changed: 125 additions & 6 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.0</version>
48+
<version>1.0.1</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.0</version>
8+
<version>1.0.1</version>
99
<packaging>jar</packaging>
1010

1111
<name>client-java</name>

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import io.github.kubesys.client.exceptions.KubernetesUnauthorizedTokenException;
7474
import io.github.kubesys.client.exceptions.KubernetesUnknownException;
7575
import io.github.kubesys.client.exceptions.KubernetesUnknownUrlException;
76+
import io.github.kubesys.client.utils.KubeUtil;
7677
import io.github.kubesys.client.utils.ReqUtil;
7778
import io.github.kubesys.client.utils.SSLUtil;
7879
import io.github.kubesys.client.utils.URLUtil;
@@ -554,7 +555,7 @@ public JsonNode listResources(String kind) throws Exception {
554555
* @return json json
555556
* @throws Exception Kubernetes cannot parsing this jsonStr
556557
*/
557-
public String listResourcesUsingYamml(String kind) throws Exception {
558+
public String listResourcesUsingYaml(String kind) throws Exception {
558559
return new YAMLMapper()
559560
.writeValueAsString(listResources(kind, KubernetesConstants.VALUE_ALL_NAMESPACES, null, null, 0, null));
560561
}
@@ -901,6 +902,23 @@ public Thread watchPodsOnLocalNode(KubernetesWatcher watcher) throws Exception {
901902
return thread;
902903
}
903904

905+
906+
/**
907+
* for Scheduler
908+
*
909+
* { "apiVersion": "v1", "kind": "Binding", "metadata": { "name": "podName" },
910+
* "target": { "apiVersion": "v1", "kind": "Node", "name": "hostName" } }
911+
*
912+
* @param pod pod
913+
* @param namespace namespace
914+
* @param host hostname
915+
* @return json json from Kubernetes
916+
* @throws Exception Kubernetes cannot parsing this jsonStr
917+
*/
918+
public JsonNode bindingResource(String pod, String namespace, String host) throws Exception {
919+
return createResource(KubeUtil.toBinding(pod, namespace, host));
920+
}
921+
904922
/**********************************************************
905923
*
906924
*

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,39 @@ private KubernetesConstants() {
105105

106106
public static final String KUBE_OBJECT = "object";
107107

108-
109108
public static final String DEFAULT_APIVERSION = "v1";
110109

111110
public static final String KUBE_KIND = "kind";
112111

113112
public static final String BINDING_KIND = "Binding";
114113

114+
public static final String KUBE_APIVERSION_SPLIT = "/";
115+
116+
/**
117+
* 取值为default
118+
*/
119+
public static final String KUBE_DEFAULT_NAMESPACE = "default";
120+
121+
/**
122+
* 取值为""
123+
*/
124+
public static final String KUBE_DEFAULT_GROUP = "";
125+
126+
/**
127+
* 取值为.
128+
*/
129+
public static final String KUBE_VALUE_SPLIT = ".";
130+
131+
/**
132+
* 取值为creationTimestamp
133+
*/
134+
public static final String KUBE_METADATA_CREATED = "creationTimestamp";
135+
136+
/**
137+
* 取值为plural
138+
*/
139+
public static final String KUBE_PLURAL = "plural";
140+
115141
/*************************************
116142
*
117143
* Kubernetes url patterns

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

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private KubeUtil() {
3434
* @param hostName hostname
3535
* @return json json from Kubernetes
3636
*/
37-
public static JsonNode bindingResource(String podName, String podNamespace, String hostName) {
37+
public static JsonNode toBinding(String podName, String podNamespace, String hostName) {
3838

3939
ObjectNode binding = new ObjectMapper().createObjectNode();
4040
binding.put(KubernetesConstants.KUBE_APIVERSION, KubernetesConstants.DEFAULT_APIVERSION);
@@ -53,4 +53,79 @@ public static JsonNode bindingResource(String podName, String podNamespace, Stri
5353

5454
return binding;
5555
}
56+
57+
/**
58+
* 不考虑apiVersion为空或者不符合Kuberneres资源定义的的情况
59+
* 否则抛出异常
60+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
61+
*
62+
* @param apiVersion Kubernetes对应kind的apiVersion
63+
* @return Kubernetes对应kind的group
64+
*/
65+
public static String toGroup(String apiVersion) {
66+
int idx = apiVersion.indexOf(KubernetesConstants.KUBE_APIVERSION_SPLIT);
67+
return idx == -1 ? KubernetesConstants.KUBE_DEFAULT_GROUP : apiVersion.substring(0, idx);
68+
}
69+
70+
71+
/**
72+
* 不考虑json为空或者不符合Kuberneres资源定义的的情况
73+
* 否则抛出异常
74+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
75+
*
76+
* @param json json
77+
* @return 获得kubernetes的name
78+
*/
79+
public static String getName(JsonNode json) {
80+
return json.get(KubernetesConstants.KUBE_METADATA).get(KubernetesConstants.KUBE_METADATA_NAME).asText();
81+
}
82+
83+
/**
84+
* 不考虑json为空或者不符合Kuberneres资源定义的的情况
85+
* 否则抛出异常
86+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
87+
*
88+
* @param json json
89+
* @return 获得kubernetes的namespace
90+
*/
91+
public static String getNamespace(JsonNode json) {
92+
if (json.get(KubernetesConstants.KUBE_METADATA).has(KubernetesConstants.KUBE_METADATA_NAMESPACE)) {
93+
return json.get(KubernetesConstants.KUBE_METADATA).get(KubernetesConstants.KUBE_METADATA_NAMESPACE).asText();
94+
}
95+
return KubernetesConstants.KUBE_DEFAULT_NAMESPACE;
96+
}
97+
98+
99+
/**
100+
* 不考虑json为空或者不符合Kuberneres资源定义的的情况
101+
* 否则抛出异常
102+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
103+
*
104+
* @param json json
105+
* @return 获得kubernetes的namespace
106+
*/
107+
public static String getGroup(JsonNode json) {
108+
return toGroup(json.get(KubernetesConstants.KUBE_APIVERSION).asText());
109+
}
110+
111+
/**
112+
* 不考虑fullkind为空或者不符合Kuberneres资源定义的的情况
113+
* 否则抛出异常
114+
* https://kubernetes.io/docs/concepts/overview/working-with-objects/
115+
*
116+
* @param fullkind fullkind = group + "." + kind
117+
* @return 获得kubernetes的namespace
118+
*/
119+
public static String getGroup(String fullkind) {
120+
int idx = fullkind.lastIndexOf(KubernetesConstants.KUBE_VALUE_SPLIT);
121+
return idx == -1 ? KubernetesConstants.KUBE_DEFAULT_GROUP : fullkind.substring(0, idx);
122+
}
123+
124+
/**
125+
* @param value 目标KInd的元数据表述
126+
* @return 是否支持被watch,像其见Kubernetes的Watch机制
127+
*/
128+
public static boolean supportWatch(JsonNode value) {
129+
return value.get("verbs").toPrettyString().contains("watch");
130+
}
56131
}

src/test/java/io/github/kubesys/client/utils/KubeUtilTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class KubeUtilTest {
3333
+ "}";
3434
@Test
3535
void testBinding() throws Exception {
36-
assertEquals(EXPECTED_BINDING, KubeUtil.bindingResource("test-pod", "test-ns", "test-node").toPrettyString());
36+
assertEquals(EXPECTED_BINDING, KubeUtil.toBinding("test-pod", "test-ns", "test-node").toPrettyString());
3737
}
3838

3939
}

0 commit comments

Comments
 (0)