Не удалось создать velero.io/v1-BackupStorageLocation с помощью клиента io.fabric8 - PullRequest
0 голосов
/ 26 апреля 2019

Я использовал io.fabric8.kubernetes-client, версия 4.1.1. Я пытаюсь загрузить yaml с помощью библиотеки io.fabric.

---
apiVersion: "velero.io/v1"
kind: "BackupStorageLocation"
spec:
  providerType: "aws"
  objectStorage:
    bucket: "test"
  config:
    region: "us-west-1"
metadata:
  annotations: {}
  name: "default"
  namespace: "velero"
  labels: {}
String content = "---\n" + 
            "apiVersion: \"velero.io/v1\"\n" + 
            "kind: \"BackupStorageLocation\"\n" + 
            "spec:\n" + 
            "  providerType: \"aws\"\n" + 
            "  objectStorage:\n" + 
            "    bucket: \"test\"\n" + 
            "  config:\n" + 
            "    region: \"us-west-1\"\n" + 
            "metadata:\n" + 
            "  annotations: {}\n" + 
            "  name: \"default\"\n" + 
            "  namespace: \"velero\"\n" + 
            "  labels: {}\n" + 
            "";
List<HasMetadata> list = client.load(new ByteArrayInputStream(content.trim().getBytes())).createOrReplace();

Получение следующего исключения:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: No resource type found for:velero.io/v1#BackupStorageLocation
 at [Source: (BufferedInputStream); line: 14, column: 13]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:271)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:1718)
    at io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:78)
    at io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:32)
    at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1611)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1188)
    at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:129)

1 Ответ

0 голосов
/ 28 апреля 2019

Недавно в клиенте Kubernetes была добавлена ​​поддержка создания пользовательских ресурсов. Вы можете загрузить пользовательские определения ресурсов, но чтобы обеспечить использование пользовательских ресурсов, необходимых для предоставления модели для этого пользовательского ресурса, см. Старый CrdExample . Но теперь он стал менее типизированным (без предоставления какой-либо пользовательской модели ресурсов (Pojos) клиенту. Теперь вы можете создавать пользовательские ресурсы, подобные этой (я на 4.2.2 bdw):

Для пользовательского определения ресурса с именем animal:

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: animals.jungle.example.com
spec:
  group: jungle.example.com
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: animals
    singular: animals
    kind: Animal
    shortNames:
    - al

Для создания пользовательских ресурсов вам необходимо предоставить CustomResourceDefinitionContext клиенту. В приведенном ниже примере показано создание с помощью InputStream или необработанной строки. Подробнее см. this .

    CustomResourceDefinitionContext customResourceDefinitionContext = new CustomResourceDefinitionContext.Builder()
      .withName("animals.jungle.example.com")
      .withGroup("jungle.example.com")
      .withVersion("v1")
      .withPlural("animals")
      .withScope("Namespaced")
      .build();

    // Create via file
    Map<String, Object> object = client.customResource(customResourceDefinitionContext).create(currentNamespace, getClass().getResourceAsStream("/test-rawcustomresource.yml"));

    // Create via raw json/yaml
    String rawJsonCustomResourceObj = "{\"apiVersion\":\"jungle.example.com/v1\"," +
      "\"kind\":\"Animal\",\"metadata\": {\"name\": \"walrus\"}," +
      "\"spec\": {\"image\": \"my-awesome-walrus-image\"}}";
    object = client.customResource(customResourceDefinitionContext).create(currentNamespace, rawJsonCustomResourceObj);
...