diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9dbb28267..356b8cf447b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,13 @@ ### 4.10-SNAPSHOT #### Bugs +* Fix #2316: Cannot load resource from stream without apiVersion #### Improvements #### Dependency Upgrade * Fix #2355: bump jandex from 2.1.3.Final to 2.2.0.Final -* Fix #2353: bump workflow action-setup-* versions + kubernetes to 1.18.6 +* Fix #2353: bump workflow action-setup- versions + kubernetes to 1.18.6 #### New Features * Fix #2287: Add support for V1 and V1Beta1 CustomResourceDefinition diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java index 5d7d65610d2..47a01125d4e 100644 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java +++ b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java @@ -248,16 +248,20 @@ private Class getInternalTypeForName(String key) { // If only one class found, return it if (possibleResults.size() == 1) { return possibleResults.get(0); - } - - // Compare with apiVersions being compared for set of classes found - for (Class result : possibleResults) { + } else if (possibleResults.size() > 1) { + // Compare with apiVersions being compared for set of classes found + for (Class result : possibleResults) { String defaultKeyFromClass = getKeyFromClass(result); if (key.equals(defaultKeyFromClass)) { - return result; + return result; } + } + // Not able to compare with apiVersions, perhaps it was not provided; + // return first item found + return possibleResults.get(0); + } else { + return null; } - return null; } private String getKeyFromClass(Class clazz) { diff --git a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/DeploymentTest.java b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/DeploymentTest.java index e81206066e9..90f4ae70930 100644 --- a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/DeploymentTest.java +++ b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/DeploymentTest.java @@ -41,6 +41,7 @@ import io.fabric8.kubernetes.client.server.mock.KubernetesServer; import io.fabric8.kubernetes.client.utils.Utils; +import io.fabric8.kubernetes.model.util.Helper; import okhttp3.mockwebserver.RecordedRequest; import org.junit.Rule; import org.junit.jupiter.api.DisplayName; @@ -772,4 +773,20 @@ private DeploymentBuilder getDeploymentBuilder() { .endSpec(); } + @Test + void testDeploymentLoadWithoutApiVersion() { + // Given + KubernetesClient client = server.getClient(); + + // When + List list = client.load(getClass().getResourceAsStream("/valid-deployment-without-apiversion.json")).get(); + Deployment deployment = (Deployment) list.get(0); + + // Then + assertNotNull(deployment); + assertEquals("test", deployment.getMetadata().getName()); + assertEquals(1, deployment.getSpec().getReplicas()); + assertEquals(1, deployment.getSpec().getTemplate().getSpec().getContainers().size()); + } + } diff --git a/kubernetes-tests/src/test/resources/valid-deployment-without-apiversion.json b/kubernetes-tests/src/test/resources/valid-deployment-without-apiversion.json new file mode 100644 index 00000000000..3bdb6e14b67 --- /dev/null +++ b/kubernetes-tests/src/test/resources/valid-deployment-without-apiversion.json @@ -0,0 +1,39 @@ +{ + "kind": "Deployment", + "metadata": { + "name": "test", + "labels": { + "app": "test" + } + }, + "spec": { + "selector": { + "matchLabels": { + "app": "test" + } + }, + "replicas": 1, + "template": { + "metadata": { + "labels": { + "app": "test" + } + }, + "spec": { + "containers": [ + { + "name": "test", + "image": "busybox:latest", + "command": [ + "/bin/sh", + "-c" + ], + "args": [ + "sleep 60" + ] + } + ] + } + } + } +}