From 8b06e41630ccbcc9353f4c4c21d04111f88b6f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Gue=CC=81rin?= Date: Thu, 7 Mar 2019 20:33:11 -0500 Subject: [PATCH] Preserve labels and fields when using CustomResourceOperationsImpl::withResourceVersion --- CHANGELOG.md | 2 ++ .../client/dsl/base/BaseOperation.java | 22 +++++++++++++++++-- .../client/dsl/base/HasMetadataOperation.java | 4 ++++ .../CustomResourceOperationsImpl.java | 14 +++++++++++- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a633a6dc4c4..3aef989e118 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Bugs Improvements + + * Fix #1425: Preserve labels and fields when using CRD's withResourceVersion() Dependency Upgrade * Upgrade Sundrio to 0.16.5 diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java index 7f7265ff29b..e3371f033f6 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/BaseOperation.java @@ -109,8 +109,26 @@ protected BaseOperation(OkHttpClient client, Config config, String apiGroupName, this.fields = fields; } - protected BaseOperation(OkHttpClient client, Config config, String apiGroupName, String apiVersion, String resourceT, String namespace, String name, Boolean cascading, T item, String resourceVersion, Boolean reloadingFromServer, Class type, Class listType, Class doneableType) { - super(client, config, apiGroup(item, apiGroupName), apiVersion(item, apiVersion), resourceT, namespace, name(item, name)); + protected BaseOperation(OkHttpClient client, Config config, String apiGroup, String apiVersion, String resourceT, String namespace, String name, Boolean cascading, T item, String resourceVersion, Boolean reloadingFromServer, long gracePeriodSeconds, Map labels, Map labelsNot, Map labelsIn, Map labelsNotIn, Map fields, Class type, Class listType, Class doneableType) { + super(client, config, apiGroup, apiVersion(item, apiVersion), resourceT, namespace, name(item, name)); + this.cascading = cascading; + this.item = item; + this.resourceVersion = resourceVersion; + this.reloadingFromServer = reloadingFromServer; + this.type = type; + this.listType = listType; + this.doneableType = doneableType; + this.reaper = null; + this.gracePeriodSeconds = gracePeriodSeconds; + this.labels = labels; + this.labelsNot = labelsNot; + this.labelsIn = labelsIn; + this.labelsNotIn = labelsNotIn; + this.fields = fields; + } + + protected BaseOperation(OkHttpClient client, Config config, String apiGroup, String apiVersion, String resourceT, String namespace, String name, Boolean cascading, T item, String resourceVersion, Boolean reloadingFromServer, Class type, Class listType, Class doneableType) { + super(client, config, apiGroup, apiVersion(item, apiVersion), resourceT, namespace, name(item, name)); this.cascading = cascading; this.item = item; this.resourceVersion = resourceVersion; diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/HasMetadataOperation.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/HasMetadataOperation.java index 94143c6b15a..4b474a5eaae 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/HasMetadataOperation.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/base/HasMetadataOperation.java @@ -40,6 +40,10 @@ protected HasMetadataOperation(OkHttpClient client, Config config, String apiGro super(client, config, apiGroup, apiVersion, resourceT, namespace, name, cascading, item, resourceVersion, reloadingFromServer, gracePeriodSeconds, labels, labelsNot, labelsIn, labelsNotIn, fields); } + protected HasMetadataOperation(OkHttpClient client, Config config, String apiGroup, String apiVersion, String resourceT, String namespace, String name, Boolean cascading, T item, String resourceVersion, Boolean reloadingFromServer, long gracePeriodSeconds, Map labels, Map labelsNot, Map labelsIn, Map labelsNotIn, Map fields, Class type, Class listType, Class doneableType) { + super(client, config, apiGroup, apiVersion, resourceT, namespace, name, cascading, item, resourceVersion, reloadingFromServer, gracePeriodSeconds, labels, labelsNot, labelsIn, labelsNotIn, fields, type, listType, doneableType); + } + public HasMetadataOperation(OkHttpClient client, Config config, String apiGroup, String apiVersion, String resourceT, String namespace, String name, Boolean cascading, T item, String resourceVersion, Boolean reloadingFromServer, Class type, Class listType, Class doneableType) { super(client, config, apiGroup, apiVersion, resourceT, namespace, name, cascading, item, resourceVersion, reloadingFromServer, type, listType, doneableType); } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CustomResourceOperationsImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CustomResourceOperationsImpl.java index 827f0287526..7d271e13434 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CustomResourceOperationsImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CustomResourceOperationsImpl.java @@ -36,6 +36,7 @@ import java.io.InputStream; import java.lang.reflect.InvocationTargetException; +import java.util.Map; /** */ @@ -59,6 +60,17 @@ public CustomResourceOperationsImpl(OkHttpClient client, Config config, String a } } + protected CustomResourceOperationsImpl(OkHttpClient client, Config config, String apiGroup, String apiVersion, String resourceT, boolean resouceNamespaced, String namespace, String name, Boolean cascading, T item, String resourceVersion, Boolean reloadingFromServer, long gracePeriodSeconds, Map labels, Map labelsNot, Map labelsIn, Map labelsNotIn, Map fields, Class type, Class listType, Class doneableType) { + super(client, config, apiGroup, apiVersion, resourceT, namespace, name, cascading, item, resourceVersion, reloadingFromServer, gracePeriodSeconds, labels, labelsNot, labelsIn, labelsNotIn, fields, type, listType, doneableType); + this.resourceNamespaced = resouceNamespaced; + this.apiVersion = getAPIGroup() + "/" + getAPIVersion(); + + KubernetesDeserializer.registerCustomKind(type.getSimpleName(), type); + if (KubernetesResource.class.isAssignableFrom(listType)) { + KubernetesDeserializer.registerCustomKind(listType.getSimpleName(), (Class) listType); + } + } + protected static String apiGroup(CustomResourceDefinition crd) { return crd.getSpec().getGroup(); } @@ -124,7 +136,7 @@ public Gettable fromServer() { @Override public Watchable> withResourceVersion(String resourceVersion) { - return new CustomResourceOperationsImpl<>(client, getConfig(), getAPIGroup(), getAPIVersion(), getResourceT(), resourceNamespaced, getNamespace(), getName(), isCascading(), getItem(), resourceVersion, isReloadingFromServer(), getType(), getListType(), getDoneableType()); + return new CustomResourceOperationsImpl<>(client, getConfig(), getAPIGroup(), getAPIVersion(), getResourceT(), resourceNamespaced, getNamespace(), getName(), isCascading(), getItem(), resourceVersion, isReloadingFromServer(), getGracePeriodSeconds(), getLabels(), getLabelsNot(), getLabelsIn(), getLabelsNotIn(), getFields(), getType(), getListType(), getDoneableType()); } @Override