как редактировать пользовательский ресурс, удаляя только один финализатор - PullRequest
0 голосов
/ 05 мая 2020

Я использую fabric8 и java operator sdk. Я хочу удалить один настраиваемый финализатор в обработчике deleteResource файла ResourceController. Каков предлагаемый способ удаления финализатора и сохранения настраиваемого ресурса?

1 Ответ

1 голос
/ 06 мая 2020

Думаю, вы сможете добавлять финализаторы с помощью Fabric8 Kubernetes Client. Например, если вы хотите добавить / удалить такие финализаторы в метаданных вашего настраиваемого ресурса:

  finalizers:
  - finalizer.stable.example.com

Вы можете использовать для этого либо наш типизированный API, либо нетипичный API. Я добавляю примеры обоих подходов ниже, используя Dummy настраиваемый ресурс, предоставленный в нашем 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());
}

...