diff --git a/CHANGELOG.md b/CHANGELOG.md index f1b2da735d..3540b9308d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ #### Bugs * Fix #3776: VerticalPodAutoscaler cannot load yaml with "controlledResources" +* Fix #3772: `edit()` should not be allowed as a NonNamespaceOperation #### Improvements diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/NonNamespaceOperation.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/NonNamespaceOperation.java index b46742e998..c5fba23de1 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/NonNamespaceOperation.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/NonNamespaceOperation.java @@ -25,7 +25,8 @@ public interface NonNamespaceOperation extends Nameable, FilterWatchListMultiDeletable, - WritableOperation, + Createable, + CreateOrReplaceable, DryRunable>, Loadable { } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/Resource.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/Resource.java index 82f631f73c..f0cc8d0374 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/Resource.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/Resource.java @@ -24,6 +24,7 @@ public interface Resource extends CreateOrReplaceable, CreateFromServerGettable, CascadingEditReplacePatchDeletable, VersionWatchAndWaitable, + WritableOperation, DryRunable>, Requirable, Readiable, Informable, CreateOrDeleteable { diff --git a/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PatchIT.java b/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PatchIT.java index e7fb734d71..3a3f7dbe6d 100644 --- a/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PatchIT.java +++ b/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PatchIT.java @@ -128,7 +128,7 @@ public void testFullObjectPatch() { // When ConfigMap configMapFromServer = client.configMaps().inNamespace(currentNamespace).withName(name).get(); configMapFromServer.setData(Collections.singletonMap("foo", "bar")); - ConfigMap patchedConfigMap = client.configMaps().patch(configMapFromServer); + ConfigMap patchedConfigMap = client.configMaps().inNamespace(currentNamespace).withName(name).patch(configMapFromServer); // Then assertThat(patchedConfigMap).isNotNull(); @@ -148,7 +148,7 @@ public void testFullObjectPatchWithConcurrentChange() { // concurrent change to empty ConfigMap baseCopy = new ConfigMapBuilder(base).build(); baseCopy.setData(Collections.emptyMap()); - client.configMaps().patch(baseCopy); + client.configMaps().inNamespace(currentNamespace).withName(name).patch(baseCopy); // concurrent change to empty ConfigMap baseCopy2 = new ConfigMapBuilder(base).build(); diff --git a/kubernetes-itests/src/test/java/io/fabric8/kubernetes/TypedCustomResourceIT.java b/kubernetes-itests/src/test/java/io/fabric8/kubernetes/TypedCustomResourceIT.java index ed1c43cd66..db10e934c0 100644 --- a/kubernetes-itests/src/test/java/io/fabric8/kubernetes/TypedCustomResourceIT.java +++ b/kubernetes-itests/src/test/java/io/fabric8/kubernetes/TypedCustomResourceIT.java @@ -214,7 +214,7 @@ public void replaceStatusSubresource() { // use the original pet, no need to pick up the resourceVersion pet.getSpec().setType("shouldn't change"); pet.setStatus(petStatusToUpdate); - Pet updatedPet = petClient.inNamespace(currentNamespace).replaceStatus(pet); + Pet updatedPet = petClient.inNamespace(currentNamespace).withName(pet.getMetadata().getName()).replaceStatus(pet); // Then assertPet(updatedPet, "pet-replacestatus", "Pigeon", "Sleeping"); @@ -234,7 +234,7 @@ public void patchStatusSubresource() { // use the original pet, no need to pick up the resourceVersion pet.getSpec().setType("shouldn't change"); pet.setStatus(petStatusToUpdate); - Pet updatedPet = petClient.inNamespace(currentNamespace).patchStatus(pet); + Pet updatedPet = petClient.inNamespace(currentNamespace).withName(pet.getMetadata().getName()).patchStatus(pet); // Then assertPet(updatedPet, "pet-applystatus", "Pigeon", "Sleeping"); diff --git a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/CustomResourceCrudTest.java b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/CustomResourceCrudTest.java index c43ec7613b..fa427e449e 100644 --- a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/CustomResourceCrudTest.java +++ b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/CustomResourceCrudTest.java @@ -175,7 +175,7 @@ void testStatusSubresourceHandling() { cronTab.getMetadata().setLabels(labels); - result = cronTabClient.replace(cronTab); + result = cronTabClient.withName(cronTab.getMetadata().getName()).replace(cronTab); String originalUid = result.getMetadata().getUid(); @@ -187,13 +187,13 @@ void testStatusSubresourceHandling() { labels.put("other", "label"); cronTab.setStatus(null); - result = cronTabClient.replace(cronTab); + result = cronTabClient.withName(cronTab.getMetadata().getName()).replace(cronTab); // should retain the existing assertNotNull(result.getStatus()); labels.put("another", "label"); - result = cronTabClient.patch(cronTab); + result = cronTabClient.withName(cronTab.getMetadata().getName()).patch(cronTab); // should retain the existing assertNotNull(result.getStatus()); @@ -220,7 +220,7 @@ void testStatusPatch() { result.setStatus(status); - result = cronTabClient.patchStatus(result); + result = cronTabClient.withName(cronTab.getMetadata().getName()).patchStatus(result); assertNotNull(result.getStatus()); } diff --git a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TypedClusterScopeCustomResourceApiTest.java b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TypedClusterScopeCustomResourceApiTest.java index e5b6beb456..7eb8540007 100644 --- a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TypedClusterScopeCustomResourceApiTest.java +++ b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TypedClusterScopeCustomResourceApiTest.java @@ -157,7 +157,7 @@ void testStatusReplace() throws InterruptedException { server.expect().put().withPath("/apis/example.crd.com/v1alpha1/stars/sun/status").andReturn(200, "{\"apiVersion\":\"example.crd.com/v1alpha1\",\"kind\":\"Star\",\"metadata\":{\"name\":\"sun\",\"resourceVersion\":\"2\"},\"spec\":{\"type\":\"G\",\"location\":\"Galaxy\"},\"status\":{\"location\":\"M\"}}").once(); starClient = client.customResources(Star.class); - Star replaced = starClient.inNamespace("test").replaceStatus(updatedStar); + Star replaced = starClient.inNamespace("test").withName(updatedStar.getMetadata().getName()).replaceStatus(updatedStar); assertEquals("2", replaced.getMetadata().getResourceVersion()); RecordedRequest recordedRequest = server.getLastRequest(); // get of the latest version, put of status