如何编辑自定义资源只删除一个终结器
how to edit custom resource removing just one finalizer
我正在使用 fabric8 和 java operator sdk。
我想在 ResourceController
的 deleteResource
处理程序中删除一个自定义终结器。
删除终结器并保存自定义资源的建议方法是什么?
我认为您应该能够使用 Fabric8 Kubernetes Client 添加终结器。例如,如果您想 add/remove 在自定义资源的元数据中使用像这样的终结器:
finalizers:
- finalizer.stable.example.com
您可以使用我们的类型 API 或无类型 API 来实现这一点。我正在使用 Dummy
Custom Resource provided in our CRDExample:
添加以下两种方法的示例
已键入 API(需要自定义资源的 POJO)
MixedOperation<Dummy, DummyList, DoneableDummy, Resource<Dummy, DoneableDummy>> dummyCRClient = client
.customResources(dummyCRD, Dummy.class, DummyList.class, DoneableDummy.class);
// Fetch resource fom Kubernetes API server
Dummy dummy2 = dummyCRClient.inNamespace("default").withName("second-dummy").get();
// Get metadata
ObjectMeta objectMeta = dummy2.getMetadata();
// Modify metadata
objectMeta.setFinalizers(Collections.singletonList("finalizer.stable.example.com"));
// Patch it back in Custom Resource
dummy2.setMetadata(objectMeta);
// Patch to Kubernetes
dummyCRClient.inNamespace("default").withName("second-dummy").patch(dummy2);
无类型 API(提供访问原始 JSON 自定义资源的方法)
try (KubernetesClient client = new DefaultKubernetesClient()) {
CustomResourceDefinitionContext crdContext = new CustomResourceDefinitionContext.Builder()
.withGroup("demo.fabric8.io")
.withPlural("dummies")
.withScope("Namespaced")
.withVersion("v1")
.withName("dummies.demo.fabric8.io")
.build();
// Fetch resource fom Kubernetes API server
Map<String, Object> dummy2 = client.customResource(crdContext).get("default", "second-dummy");
JSONObject dummy2JsonObj = new JSONObject(dummy2);
// Get metadata
JSONObject dummy2ObjectMeta = dummy2JsonObj.getJSONObject("metadata");
// Modify metadata
dummy2ObjectMeta.put("finalizers", new String[] { "finalizer.stable.example.com"});
// Patch it back in Custom Resource
dummy2JsonObj.put("metadata", dummy2ObjectMeta);
// Patch to Kubernetes
client.customResource(crdContext).edit("default", "second-dummy", dummy2JsonObj.toString());
}
我正在使用 fabric8 和 java operator sdk。
我想在 ResourceController
的 deleteResource
处理程序中删除一个自定义终结器。
删除终结器并保存自定义资源的建议方法是什么?
我认为您应该能够使用 Fabric8 Kubernetes Client 添加终结器。例如,如果您想 add/remove 在自定义资源的元数据中使用像这样的终结器:
finalizers:
- finalizer.stable.example.com
您可以使用我们的类型 API 或无类型 API 来实现这一点。我正在使用 Dummy
Custom Resource provided in our CRDExample:
已键入 API(需要自定义资源的 POJO)
MixedOperation<Dummy, DummyList, DoneableDummy, Resource<Dummy, DoneableDummy>> dummyCRClient = client
.customResources(dummyCRD, Dummy.class, DummyList.class, DoneableDummy.class);
// Fetch resource fom Kubernetes API server
Dummy dummy2 = dummyCRClient.inNamespace("default").withName("second-dummy").get();
// Get metadata
ObjectMeta objectMeta = dummy2.getMetadata();
// Modify metadata
objectMeta.setFinalizers(Collections.singletonList("finalizer.stable.example.com"));
// Patch it back in Custom Resource
dummy2.setMetadata(objectMeta);
// Patch to Kubernetes
dummyCRClient.inNamespace("default").withName("second-dummy").patch(dummy2);
无类型 API(提供访问原始 JSON 自定义资源的方法)
try (KubernetesClient client = new DefaultKubernetesClient()) {
CustomResourceDefinitionContext crdContext = new CustomResourceDefinitionContext.Builder()
.withGroup("demo.fabric8.io")
.withPlural("dummies")
.withScope("Namespaced")
.withVersion("v1")
.withName("dummies.demo.fabric8.io")
.build();
// Fetch resource fom Kubernetes API server
Map<String, Object> dummy2 = client.customResource(crdContext).get("default", "second-dummy");
JSONObject dummy2JsonObj = new JSONObject(dummy2);
// Get metadata
JSONObject dummy2ObjectMeta = dummy2JsonObj.getJSONObject("metadata");
// Modify metadata
dummy2ObjectMeta.put("finalizers", new String[] { "finalizer.stable.example.com"});
// Patch it back in Custom Resource
dummy2JsonObj.put("metadata", dummy2ObjectMeta);
// Patch to Kubernetes
client.customResource(crdContext).edit("default", "second-dummy", dummy2JsonObj.toString());
}