Skip to content

Commit

Permalink
fix: replace ServiceBinding with GenericKubernetesResource
Browse files Browse the repository at this point in the history
Since Fabric8 Kubernetes Client 6.3, types are no longer
automatically registered for deserialization.
For automatic type registration an
`META-INF/services/io.fabric8.kubernetes.api.model.KubernetesResource`
SPI definition file needs to be provided instead with the
Kubernetes Resources (Objects -HasMadata impls-) that need to be
automatically registered in the KubernetesDeserializer.

fabric8io/kubernetes-client#3923
Signed-off-by: Marc Nuri <marc@marcnuri.com>
  • Loading branch information
manusa committed Dec 20, 2022
1 parent f85e79d commit 5b41418
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 132 deletions.
Expand Up @@ -6,10 +6,11 @@
import java.nio.file.Path;
import java.util.List;

import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.dekorate.servicebinding.model.ServiceBinding;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.quarkus.builder.Version;
Expand Down Expand Up @@ -58,26 +59,18 @@ public void assertGeneratedResources() throws IOException {
});
});

assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement().satisfies(i -> {
assertThat(i).isInstanceOfSatisfying(ServiceBinding.class, s -> {
assertThat(s.getMetadata()).satisfies(m -> {
assertThat(m.getName()).isEqualTo("kubernetes-with-auto-mogno-binding-mongodb");
});
assertThat(s.getSpec()).satisfies(spec -> {
assertThat(spec.getApplication()).satisfies(a -> {
assertThat(a.getGroup()).isEqualTo("apps");
assertThat(a.getVersion()).isEqualTo("v1");
assertThat(a.getKind()).isEqualTo("Deployment");
});

assertThat(spec.getServices()).hasOnlyOneElementSatisfying(service -> {
assertThat(service.getGroup()).isEqualTo("psmdb.percona.com");
assertThat(service.getVersion()).isEqualTo("v1-9-0");
assertThat(service.getKind()).isEqualTo("PerconaServerMongoDB");
assertThat(service.getName()).isEqualTo("mongodb");
});
});
});
});
assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement()
.isInstanceOfSatisfying(GenericKubernetesResource.class, sb -> assertThat(sb)
.hasFieldOrPropertyWithValue("metadata.name", "kubernetes-with-auto-mogno-binding-mongodb")
.returns("apps", s -> s.get("spec", "application", "group"))
.returns("v1", s -> s.get("spec", "application", "version"))
.returns("Deployment", s -> s.get("spec", "application", "kind"))
.extracting(s -> s.get("spec", "services"))
.asList()
.singleElement().asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("group", "psmdb.percona.com")
.containsEntry("version", "v1-9-0")
.containsEntry("kind", "PerconaServerMongoDB")
.containsEntry("name", "mongodb"));
}
}
Expand Up @@ -6,10 +6,11 @@
import java.nio.file.Path;
import java.util.List;

import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.dekorate.servicebinding.model.ServiceBinding;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.quarkus.builder.Version;
Expand Down Expand Up @@ -59,26 +60,18 @@ public void assertGeneratedResources() throws IOException {
});
});

assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement().satisfies(i -> {
assertThat(i).isInstanceOfSatisfying(ServiceBinding.class, s -> {
assertThat(s.getMetadata()).satisfies(m -> {
assertThat(m.getName()).isEqualTo("kubernetes-with-auto-mysql-binding-mysql");
});
assertThat(s.getSpec()).satisfies(spec -> {
assertThat(spec.getApplication()).satisfies(a -> {
assertThat(a.getGroup()).isEqualTo("apps");
assertThat(a.getVersion()).isEqualTo("v1");
assertThat(a.getKind()).isEqualTo("Deployment");
});

assertThat(spec.getServices()).hasOnlyOneElementSatisfying(service -> {
assertThat(service.getGroup()).isEqualTo("pxc.percona.com");
assertThat(service.getVersion()).isEqualTo("v1-9-0");
assertThat(service.getKind()).isEqualTo("PerconaXtraDBCluster");
assertThat(service.getName()).isEqualTo("mysql");
});
});
});
});
assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement()
.isInstanceOfSatisfying(GenericKubernetesResource.class, sb -> assertThat(sb)
.hasFieldOrPropertyWithValue("metadata.name", "kubernetes-with-auto-mysql-binding-mysql")
.returns("apps", s -> s.get("spec", "application", "group"))
.returns("v1", s -> s.get("spec", "application", "version"))
.returns("Deployment", s -> s.get("spec", "application", "kind"))
.extracting(s -> s.get("spec", "services"))
.asList()
.singleElement().asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("group", "pxc.percona.com")
.containsEntry("version", "v1-9-0")
.containsEntry("kind", "PerconaXtraDBCluster")
.containsEntry("name", "mysql"));
}
}
Expand Up @@ -6,10 +6,11 @@
import java.nio.file.Path;
import java.util.List;

import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.dekorate.servicebinding.model.ServiceBinding;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.quarkus.builder.Version;
Expand Down Expand Up @@ -59,26 +60,18 @@ public void assertGeneratedResources() throws IOException {
});
});

assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement().satisfies(i -> {
assertThat(i).isInstanceOfSatisfying(ServiceBinding.class, s -> {
assertThat(s.getMetadata()).satisfies(m -> {
assertThat(m.getName()).isEqualTo("kubernetes-with-auto-postgres-binding-postgresql");
});
assertThat(s.getSpec()).satisfies(spec -> {
assertThat(spec.getApplication()).satisfies(a -> {
assertThat(a.getGroup()).isEqualTo("apps");
assertThat(a.getVersion()).isEqualTo("v1");
assertThat(a.getKind()).isEqualTo("Deployment");
});

assertThat(spec.getServices()).hasOnlyOneElementSatisfying(service -> {
assertThat(service.getGroup()).isEqualTo("postgres-operator.crunchydata.com");
assertThat(service.getVersion()).isEqualTo("v1beta1");
assertThat(service.getKind()).isEqualTo("PostgresCluster");
assertThat(service.getName()).isEqualTo("postgresql");
});
});
});
});
assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement()
.isInstanceOfSatisfying(GenericKubernetesResource.class, sb -> assertThat(sb)
.hasFieldOrPropertyWithValue("metadata.name", "kubernetes-with-auto-postgres-binding-postgresql")
.returns("apps", s -> s.get("spec", "application", "group"))
.returns("v1", s -> s.get("spec", "application", "version"))
.returns("Deployment", s -> s.get("spec", "application", "kind"))
.extracting(s -> s.get("spec", "services"))
.asList()
.singleElement().asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("group", "postgres-operator.crunchydata.com")
.containsEntry("version", "v1beta1")
.containsEntry("kind", "PostgresCluster")
.containsEntry("name", "postgresql"));
}
}
Expand Up @@ -6,10 +6,11 @@
import java.nio.file.Path;
import java.util.List;

import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.dekorate.servicebinding.model.ServiceBinding;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.quarkus.builder.Version;
Expand Down Expand Up @@ -59,26 +60,18 @@ public void assertGeneratedResources() throws IOException {
});
});

assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement().satisfies(i -> {
assertThat(i).isInstanceOfSatisfying(ServiceBinding.class, s -> {
assertThat(s.getMetadata()).satisfies(m -> {
assertThat(m.getName()).isEqualTo("kubernetes-with-semi-auto-postgres-binding-postgresql");
});
assertThat(s.getSpec()).satisfies(spec -> {
assertThat(spec.getApplication()).satisfies(a -> {
assertThat(a.getGroup()).isEqualTo("apps");
assertThat(a.getVersion()).isEqualTo("v1");
assertThat(a.getKind()).isEqualTo("Deployment");
});

assertThat(spec.getServices()).hasOnlyOneElementSatisfying(service -> {
assertThat(service.getGroup()).isEqualTo("my.custom-operator.com");
assertThat(service.getVersion()).isEqualTo("v1alpha1");
assertThat(service.getKind()).isEqualTo("Postgres");
assertThat(service.getName()).isEqualTo("postgresql");
});
});
});
});
assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement()
.isInstanceOfSatisfying(GenericKubernetesResource.class, sb -> assertThat(sb)
.hasFieldOrPropertyWithValue("metadata.name", "kubernetes-with-semi-auto-postgres-binding-postgresql")
.returns("apps", s -> s.get("spec", "application", "group"))
.returns("v1", s -> s.get("spec", "application", "version"))
.returns("Deployment", s -> s.get("spec", "application", "kind"))
.extracting(s -> s.get("spec", "services"))
.asList()
.singleElement().asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("group", "my.custom-operator.com")
.containsEntry("version", "v1alpha1")
.containsEntry("kind", "Postgres")
.containsEntry("name", "postgresql"));
}
}
Expand Up @@ -7,10 +7,11 @@
import java.nio.file.Path;
import java.util.List;

import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.dekorate.servicebinding.model.ServiceBinding;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.quarkus.builder.Version;
Expand Down Expand Up @@ -58,26 +59,18 @@ public void assertGeneratedResources() throws IOException {
});
});

assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement().satisfies(i -> {
assertThat(i).isInstanceOfSatisfying(ServiceBinding.class, s -> {
assertThat(s.getMetadata()).satisfies(m -> {
assertThat(m.getName()).isEqualTo("kubernetes-with-service-binding-my-db");
});
assertThat(s.getSpec()).satisfies(spec -> {
assertThat(spec.getApplication()).satisfies(a -> {
assertThat(a.getGroup()).isEqualTo("apps");
assertThat(a.getVersion()).isEqualTo("v1");
assertThat(a.getKind()).isEqualTo("Deployment");
});

assertThat(spec.getServices()).hasOnlyOneElementSatisfying(service -> {
assertThat(service.getGroup()).isEqualTo("apps");
assertThat(service.getVersion()).isEqualTo("v1");
assertThat(service.getKind()).isEqualTo("Deployment");
assertThat(service.getName()).isEqualTo("my-postgres");
});
});
});
});
assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement()
.isInstanceOfSatisfying(GenericKubernetesResource.class, sb -> assertThat(sb)
.hasFieldOrPropertyWithValue("metadata.name", "kubernetes-with-service-binding-my-db")
.returns("apps", s -> s.get("spec", "application", "group"))
.returns("v1", s -> s.get("spec", "application", "version"))
.returns("Deployment", s -> s.get("spec", "application", "kind"))
.extracting(s -> s.get("spec", "services"))
.asList()
.singleElement().asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("group", "apps")
.containsEntry("version", "v1")
.containsEntry("kind", "Deployment")
.containsEntry("name", "my-postgres"));
}
}
Expand Up @@ -7,10 +7,11 @@
import java.nio.file.Path;
import java.util.List;

import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.dekorate.servicebinding.model.ServiceBinding;
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.openshift.api.model.DeploymentConfig;
import io.quarkus.builder.Version;
Expand Down Expand Up @@ -52,26 +53,18 @@ public void assertGeneratedResources() throws IOException {
});
});

assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement().satisfies(i -> {
assertThat(i).isInstanceOfSatisfying(ServiceBinding.class, s -> {
assertThat(s.getMetadata()).satisfies(m -> {
assertThat(m.getName()).isEqualTo("openshift-with-service-binding-my-db");
});
assertThat(s.getSpec()).satisfies(spec -> {
assertThat(spec.getApplication()).satisfies(a -> {
assertThat(a.getGroup()).isEqualTo("apps.openshift.io");
assertThat(a.getVersion()).isEqualTo("v1");
assertThat(a.getKind()).isEqualTo("DeploymentConfig");
});

assertThat(spec.getServices()).hasOnlyOneElementSatisfying(service -> {
assertThat(service.getGroup()).isEqualTo("apps");
assertThat(service.getVersion()).isEqualTo("v1");
assertThat(service.getKind()).isEqualTo("Deployment");
assertThat(service.getName()).isEqualTo("my-postgres");
});
});
});
});
assertThat(kubernetesList).filteredOn(i -> "ServiceBinding".equals(i.getKind())).singleElement()
.isInstanceOfSatisfying(GenericKubernetesResource.class, sb -> assertThat(sb)
.hasFieldOrPropertyWithValue("metadata.name", "openshift-with-service-binding-my-db")
.returns("apps.openshift.io", s -> s.get("spec", "application", "group"))
.returns("v1", s -> s.get("spec", "application", "version"))
.returns("DeploymentConfig", s -> s.get("spec", "application", "kind"))
.extracting(s -> s.get("spec", "services"))
.asList()
.singleElement().asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("group", "apps")
.containsEntry("version", "v1")
.containsEntry("kind", "Deployment")
.containsEntry("name", "my-postgres"));
}
}

0 comments on commit 5b41418

Please sign in to comment.