Skip to content

Commit

Permalink
Fix fabric8io#2418: CertificateSigningRequest doesn't implement Names…
Browse files Browse the repository at this point in the history
…paced

+ Add new resources in Cluster scope block in kubernetes model generator
+ Fix previous tests which were wrongly asserting Cluster Scoped resources as Namespaced resources
+ Add dsl entrypoint client.certificateSigningRequests() for dealing with CertificateSigningRequests
  • Loading branch information
rohanKanojia committed Aug 21, 2020
1 parent b3b6517 commit a84ef12
Show file tree
Hide file tree
Showing 17 changed files with 206 additions and 48 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -8,6 +8,7 @@
* Fix #2354: Fix NullPointerException in ResourceCompare when no resource is returned from fromServer.get()
* Fix #2389: KubernetesServer does not use value from https in crud mode
* Fix #2306: Make KubernetesServer CRUD mode work with informers
* Fix #2418: CertificateSigningRequest doesn't implement Namespaced

#### Improvements
* Fix #2331: Fixed documentation for namespaced informer for all custom types implementing `Namespaced` interface
Expand Down
19 changes: 19 additions & 0 deletions doc/CHEATSHEET.md
Expand Up @@ -30,6 +30,7 @@ This document contains common usages of different resources using Fabric8 Kubern
* [CustomResourceDefinition](#customresourcedefinition)
* [CustomResource Typed API](#customresource-typed-api)
* [CustomResource Typeless API](#customresource-typeless-api)
* [CertificateSigningRequest](#certificatesigningrequest)
* [SharedInformers](#sharedinformers)
* [List Options](#list-options)
* [Delete Options](#delete-options)
Expand Down Expand Up @@ -1904,6 +1905,24 @@ Map<String, Object> result = client.customResource(customResourceDefinitionConte
closeLatch.await(10, TimeUnit.MINUTES);
```

### CertificateSigningRequest
Kubernetes Client provides using `CertificateSigningRequest` via the `client.certificateSigningRequests()` DSL interface. Here is an example of creating `CertificateSigningRequest` using Fabric8 Kubernetes Client:
```
try (KubernetesClient client = new DefaultKubernetesClient()) {
CertificateSigningRequest csr = new CertificateSigningRequestBuilder()
.withNewMetadata().withName("test-k8s-csr").endMetadata()
.withNewSpec()
.addNewGroup("system:authenticated")
.withRequest("LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJRWJqQ0NBbFlDQVFBd0tURVBNQTBHQTFVRUF3d0dhMmxrYjI1bk1SWXdGQVlEVlFRS0RBMWtZWFJoTFdWdQpaMmx1WldWeU1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBc2dVZXl0S0F6ZDkyClN1S2pZL1RqbmRsZ0lkSFVVYWFxbHJIVW1nbTloKzY2RTJCNGs0TSt6Q0tOQmovemlMdWV6NFNUeHJ6SFk3RlUKNGUxWElBU3lMS0dmRGNPaks5NThURThwcXBRM21VdlpWMmxnK25BTVF5dlZUYWdZSmFId2JWUzVlNHgvRmpKcQoxTWpQZ1VoSGFXeEdIYTQrQnZYQU9Kdk5BdnV4alpZaVJET251dGxHVzloQkRKRlhoUk5jOGFKNnFiZWVBWnNiCmozWUFMaUcydWp1VmhoTUVRNEJxdFVHVGZCMzBQNGhRK2t2bWVKc2ZUU3Vsb2xiWFdIdVZGWnh1d0FJek5RbmQKMTd4VHd2cU04OGZFb3ZJazBJV0ZCWTk2aHRvaUVNdThZUms4SEZ6QkJralhsZGlkbVNNSHkwK0plcFRONmdQTQpEYVVsd1cxS0lCcW9TbnZNcjY4cFRVWEVhZVRjc040anMxTUIwK3FwR0JBS1puWWVxM0JmMkxVVFBNaG1VZ2VVCmFUTFlqODI2WVorZjJrOWJ1cngwK1NOSmVZbWoxVTl0N3A2YWM0dDIzZHVYQ1BzYkNrUFNKeGtrU3dudUlVVzkKdmJVVGtJNGtVMlFVMnE0NzRaMW1uMlkvejF2TEdQdEpsTDFYUVFVNEdsb2hrQkVkM1BsUTRtOGU1WGZSRkV6ZgpYZnhMRXFRczFTeEg1ekhjcnVaOWxJdnBkeEw5Tkc5WlR6M0tmT0tIbCtSUzdxMGdKaExac0RubUJKNXZab3p4CldXci9IRW9PamFYbGh0VitDN3M4TUg5Y0lKZENZNnpjcFVrZis1NmZ0Z1FuN0YrT1RYdDI0UVJQYWNFZnRFOTkKVERPb2luTGtOMm1kckxiMTgxQUZNUWJ0bTFLc1k2MENBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQwpBUUNQYU1WdDd4YWhkZlF1L1BySFVTTW5LK2I0SlJScEdEYlpWUXk4aUtkSmdHM0VrYnNBZ21qQmN4Q1IvL2t1CkVhU0plSGNWK20xVlFUTEp1ZFU3ZHFUeFBLOVFCNlB2aHlBbCttNnFaQkt1Q25VM1BKc2k5azBYSE5GWXBqRmYKVFNwTlpJSnRuanVEQWVtT05kcjJYMm1rODZmSmpWTEUvYnA1KzM5dFBkN0xjL3dZR2JoRU0xcExtUGpQK0Z6eQpzZnBiYW5PcmZFSG5NMmlsRFpGZURVSEpYL3F5Ykt1RC9BRmdoZk1Ua0x3ODNLNkNRdCtDQm05djRCeEtCS2xqCkdBWEQyUEhUTWlzektUbGpBM3czYUphanZzU0FwQXFCWnFocjB3QzdOb1dYM1h6S0p3ck9MaWVxemo3SXlpUGEKTEI5SmJveFpOQTdBSU5ucEdsa1hDZlRGT2RManZtQkVRQXV5Ym9wLzdqV2RiSzJHRkZKS2UwdlVlbWNUeGdHVwp5c0ZyV2pqMUlvdVBVNFZ6ck82QVBVQnZCZUFtdU1Bbm9yVng5emc4akhlT1pkd2RWdFRnOUwrK0VnWjlxK0htCjVtUlJGVHlZOWo4WVVvd2J6TzRlRUZnaVN0di84T1p0YmtOeDFROWFQWHJ3VUV1Q1I0SUthWG0wNlJUYXJOYXUKTWFsbk5oZm9WYi9Bc1R5d1ArNlc1dGErcTBpckR5cnVkZk5pRkFWbkRMZEU5a2hWZzVrU0lPRzhYbEZUMklwSQpkdVNpcUl0NlNUTlY3UmdaRzBGTFN5akxoc3laWnY2bitpUzl3Ky9OOFpoUzgvalViUUVidG1VTnNJU3Z5WS9JCmZqcHNZQUdleExvVW5mN2pDaUhkbTVhSnJ5SU1kdmZ2akJsMDhIVk5nWG1McVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K")
.addNewUsage("client auth")
.endSpec()
.build();
client.certificateSigningRequests().create(csr);
}
```


### SharedInformers
Kubernetes Client also provides `SharedInformer` support in order to stay updated to events happening to your resource inside Kubernetes. It's implementation is just list and watch operations after a certain interval of time. Here are some of the common usages:
- Get `SharedInformerFactory`:
Expand Down
Expand Up @@ -73,6 +73,9 @@
import io.fabric8.kubernetes.api.model.ServiceAccount;
import io.fabric8.kubernetes.api.model.ServiceAccountList;
import io.fabric8.kubernetes.api.model.DoneableServiceAccount;
import io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequest;
import io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequestList;
import io.fabric8.kubernetes.api.model.certificates.DoneableCertificateSigningRequest;
import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease;
import io.fabric8.kubernetes.api.model.coordination.v1.Lease;
import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList;
Expand All @@ -83,6 +86,7 @@
import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationContext;
import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.KubernetesListOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.certificates.v1beta1.CertificateSigningRequestOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.core.v1.APIServiceOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.core.v1.ComponentStatusOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.core.v1.NamespaceOperationsImpl;
Expand Down Expand Up @@ -293,6 +297,11 @@ public ApiextensionsAPIGroupDSL apiextensions() {
return adapt(ApiextensionsAPIGroupClient.class);
}

@Override
public NonNamespaceOperation<CertificateSigningRequest, CertificateSigningRequestList, DoneableCertificateSigningRequest, Resource<CertificateSigningRequest, DoneableCertificateSigningRequest>> certificateSigningRequests() {
return new CertificateSigningRequestOperationsImpl(httpClient, getConfiguration());
}

@Override
public <T extends HasMetadata, L extends KubernetesResourceList<T>, D extends Doneable<T>> MixedOperation<T, L, D, Resource<T, D>> customResources(CustomResourceDefinitionContext crdContext, Class<T> resourceType, Class<L> listClass, Class<D> doneClass) {
return new CustomResourceOperationsImpl<>(new CustomResourceOperationContext().withOkhttpClient(httpClient).withConfig(getConfiguration())
Expand Down
Expand Up @@ -69,6 +69,9 @@
import io.fabric8.kubernetes.api.model.ServiceAccount;
import io.fabric8.kubernetes.api.model.ServiceAccountList;
import io.fabric8.kubernetes.api.model.DoneableServiceAccount;
import io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequest;
import io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequestList;
import io.fabric8.kubernetes.api.model.certificates.DoneableCertificateSigningRequest;
import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease;
import io.fabric8.kubernetes.api.model.coordination.v1.Lease;
import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList;
Expand Down Expand Up @@ -106,6 +109,13 @@ public interface KubernetesClient extends Client {
*/
ApiextensionsAPIGroupDSL apiextensions();

/**
* API entrypoint for using CertificateSigningRequest(certificates.k8s.io/v1beta1)
*
* @return {@link NonNamespaceOperation} for CertificateSigningRequest class
*/
NonNamespaceOperation<CertificateSigningRequest, CertificateSigningRequestList, DoneableCertificateSigningRequest, Resource<CertificateSigningRequest, DoneableCertificateSigningRequest>> certificateSigningRequests();

/**
* Typed API for managing CustomResources. You would need to provide POJOs for
* CustomResource into this and with it you would be able to instantiate a client
Expand Down
Expand Up @@ -72,6 +72,9 @@
import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition;
import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList;
import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.DoneableCustomResourceDefinition;
import io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequest;
import io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequestList;
import io.fabric8.kubernetes.api.model.certificates.DoneableCertificateSigningRequest;
import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease;
import io.fabric8.kubernetes.api.model.coordination.v1.Lease;
import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList;
Expand Down Expand Up @@ -431,6 +434,11 @@ public ApiextensionsAPIGroupDSL apiextensions() {
return delegate.apiextensions();
}

@Override
public NonNamespaceOperation<CertificateSigningRequest, CertificateSigningRequestList, DoneableCertificateSigningRequest, Resource<CertificateSigningRequest, DoneableCertificateSigningRequest>> certificateSigningRequests() {
return delegate.certificateSigningRequests();
}

@Override
public <T extends HasMetadata, L extends KubernetesResourceList<T>, D extends Doneable<T>> MixedOperation<T, L, D, Resource<T, D>> customResources(CustomResourceDefinitionContext crdContext, Class<T> resourceType, Class<L> listClass, Class<D> doneClass) {
return delegate.customResources(crdContext, resourceType, listClass, doneClass);
Expand Down
Expand Up @@ -254,15 +254,15 @@ void testWhetherNamespacedOrNot() {
assertTrue(Utils.isResourceNamespaced(Deployment.class));
assertTrue(Utils.isResourceNamespaced(ReplicaSet.class));
assertTrue(Utils.isResourceNamespaced(StatefulSet.class));
assertTrue(Utils.isResourceNamespaced(TokenReview.class));
assertFalse(Utils.isResourceNamespaced(TokenReview.class));
assertTrue(Utils.isResourceNamespaced(LocalSubjectAccessReview.class));
assertTrue(Utils.isResourceNamespaced(SelfSubjectAccessReview.class));
assertTrue(Utils.isResourceNamespaced(SelfSubjectRulesReview.class));
assertTrue(Utils.isResourceNamespaced(SubjectAccessReview.class));
assertFalse(Utils.isResourceNamespaced(SelfSubjectAccessReview.class));
assertFalse(Utils.isResourceNamespaced(SelfSubjectRulesReview.class));
assertFalse(Utils.isResourceNamespaced(SubjectAccessReview.class));
assertTrue(Utils.isResourceNamespaced(HorizontalPodAutoscaler.class));
assertTrue(Utils.isResourceNamespaced(CronJob.class));
assertTrue(Utils.isResourceNamespaced(Job.class));
assertTrue(Utils.isResourceNamespaced(CertificateSigningRequest.class));
assertFalse(Utils.isResourceNamespaced(CertificateSigningRequest.class));
assertTrue(Utils.isResourceNamespaced(Lease.class));
assertTrue(Utils.isResourceNamespaced(EndpointSlice.class));
assertTrue(Utils.isResourceNamespaced(Ingress.class));
Expand All @@ -274,8 +274,8 @@ void testWhetherNamespacedOrNot() {
assertTrue(Utils.isResourceNamespaced(RoleBinding.class));
assertTrue(Utils.isResourceNamespaced(Role.class));
assertFalse(Utils.isResourceNamespaced(PriorityClass.class));
assertTrue(Utils.isResourceNamespaced(CSIDriver.class));
assertTrue(Utils.isResourceNamespaced(CSINode.class));
assertFalse(Utils.isResourceNamespaced(CSIDriver.class));
assertFalse(Utils.isResourceNamespaced(CSINode.class));
assertFalse(Utils.isResourceNamespaced(StorageClass.class));
assertTrue(Utils.isResourceNamespaced(VolumeAttachment.class));
}
Expand Down
Expand Up @@ -1984,8 +1984,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authentication.TokenReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authentication_TokenReviewSpec": {
Expand Down Expand Up @@ -2285,8 +2284,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authorization.SelfSubjectAccessReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authorization_SelfSubjectAccessReviewSpec": {
Expand Down Expand Up @@ -2340,8 +2338,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authorization.SelfSubjectRulesReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authorization_SelfSubjectRulesReviewSpec": {
Expand Down Expand Up @@ -2391,8 +2388,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authorization.SubjectAccessReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authorization_SubjectAccessReviewSpec": {
Expand Down
Expand Up @@ -1984,8 +1984,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authentication.TokenReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authentication_TokenReviewSpec": {
Expand Down Expand Up @@ -2285,8 +2284,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authorization.SelfSubjectAccessReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authorization_SelfSubjectAccessReviewSpec": {
Expand Down Expand Up @@ -2340,8 +2338,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authorization.SelfSubjectRulesReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authorization_SelfSubjectRulesReviewSpec": {
Expand Down Expand Up @@ -2391,8 +2388,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.authorization.SubjectAccessReview",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_authorization_SubjectAccessReviewSpec": {
Expand Down Expand Up @@ -3323,7 +3319,7 @@
"apiVersion": {
"type": "string",
"description": "",
"default": "admissionregistration.k8s.io/v1",
"default": "admissionregistration.k8s.io/v1beta1",
"required": true
},
"kind": {
Expand All @@ -3341,8 +3337,8 @@
"description": "",
"javaOmitEmpty": true,
"items": {
"$ref": "#/definitions/kubernetes_admissionregistration_v1_MutatingWebhook",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1.MutatingWebhook"
"$ref": "#/definitions/kubernetes_admissionregistration_v1beta1_MutatingWebhook",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1beta1.MutatingWebhook"
}
}
},
Expand All @@ -3353,15 +3349,15 @@
"apiVersion": {
"type": "string",
"description": "",
"default": "admissionregistration.k8s.io/v1",
"default": "admissionregistration.k8s.io/v1beta1",
"required": true
},
"items": {
"type": "array",
"description": "",
"items": {
"$ref": "#/definitions/kubernetes_admissionregistration_v1_MutatingWebhookConfiguration",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1.MutatingWebhookConfiguration"
"$ref": "#/definitions/kubernetes_admissionregistration_v1beta1_MutatingWebhookConfiguration",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1beta1.MutatingWebhookConfiguration"
}
},
"kind": {
Expand Down Expand Up @@ -4261,14 +4257,15 @@
"admissionReviewVersions": {
"type": "array",
"description": "",
"javaOmitEmpty": true,
"items": {
"type": "string",
"description": ""
}
},
"clientConfig": {
"$ref": "#/definitions/kubernetes_admissionregistration_v1_WebhookClientConfig",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1.WebhookClientConfig"
"$ref": "#/definitions/kubernetes_admissionregistration_v1beta1_WebhookClientConfig",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1beta1.WebhookClientConfig"
},
"failurePolicy": {
"type": "string",
Expand All @@ -4295,8 +4292,8 @@
"description": "",
"javaOmitEmpty": true,
"items": {
"$ref": "#/definitions/kubernetes_admissionregistration_v1_RuleWithOperations",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1.RuleWithOperations"
"$ref": "#/definitions/kubernetes_admissionregistration_v1beta1_RuleWithOperations",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1beta1.RuleWithOperations"
}
},
"sideEffects": {
Expand All @@ -4315,7 +4312,7 @@
"apiVersion": {
"type": "string",
"description": "",
"default": "admissionregistration.k8s.io/v1beta1",
"default": "admissionregistration.k8s.io/v1",
"required": true
},
"kind": {
Expand All @@ -4333,8 +4330,8 @@
"description": "",
"javaOmitEmpty": true,
"items": {
"$ref": "#/definitions/kubernetes_admissionregistration_v1beta1_ValidatingWebhook",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1beta1.ValidatingWebhook"
"$ref": "#/definitions/kubernetes_admissionregistration_v1_ValidatingWebhook",
"javaType": "io.fabric8.kubernetes.api.model.admissionregistration.v1.ValidatingWebhook"
}
}
},
Expand Down
Expand Up @@ -915,8 +915,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequest",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_certificates_CertificateSigningRequestCondition": {
Expand Down
Expand Up @@ -915,8 +915,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.certificates.CertificateSigningRequest",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_certificates_CertificateSigningRequestCondition": {
Expand Down
Expand Up @@ -2330,8 +2330,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.storage.v1beta1.CSIDriver",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_storageclass_v1beta1_CSIDriverList": {
Expand Down Expand Up @@ -2426,8 +2425,7 @@
"additionalProperties": true,
"javaType": "io.fabric8.kubernetes.api.model.storage.v1beta1.CSINode",
"javaInterfaces": [
"io.fabric8.kubernetes.api.model.HasMetadata",
"io.fabric8.kubernetes.api.model.Namespaced"
"io.fabric8.kubernetes.api.model.HasMetadata"
]
},
"kubernetes_storageclass_v1beta1_CSINodeDriver": {
Expand Down

0 comments on commit a84ef12

Please sign in to comment.