From 1f47cb2795bf2f91dd401db8fd42646a4908d6bf Mon Sep 17 00:00:00 2001 From: andreaTP Date: Wed, 27 Apr 2022 09:54:33 +0100 Subject: [PATCH] Fix disableDefaultIngress CR field of the operator --- .../src/main/operator/basic-deployment.adoc | 16 ++++++++++++++ .../operator/v2alpha1/KeycloakIngress.java | 2 +- .../operator/v2alpha1/crds/KeycloakSpec.java | 4 ++-- .../operator/CRSerializationTest.java | 22 +++++++++++++++++++ .../operator/KeycloakIngressE2EIT.java | 6 +++++ .../test-serialization-keycloak-cr.yml | 18 +++++++++++++++ 6 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 operator/src/test/java/org/keycloak/operator/CRSerializationTest.java create mode 100644 operator/src/test/resources/test-serialization-keycloak-cr.yml diff --git a/docs/guides/src/main/operator/basic-deployment.adoc b/docs/guides/src/main/operator/basic-deployment.adoc index 48b2bbd4b69..7c4685e5937 100644 --- a/docs/guides/src/main/operator/basic-deployment.adoc +++ b/docs/guides/src/main/operator/basic-deployment.adoc @@ -164,6 +164,22 @@ CONDITION: RollingUpdate === Accessing the Keycloak Deployment The Keycloak deployment is, by default, exposed through a basic nginx ingress and it will be accessible through the provided hostname. +If the default ingress doesn't fit your use-case you can disable it by setting `disableDefaultIngress: true`: + +[source,bash] +---- +cat <> example-kc.yaml +apiVersion: k8s.keycloak.org/v2alpha1 +kind: Keycloak +metadata: + name: example-kc +spec: + ... + disableDefaultIngress: true +EOF +kubectl apply -f example-kc.yaml +---- +And you can provide an alternative ingress resource pointing to the service `-service`. For debugging and development purposes we suggest you to directly connect to the Keycloak service using a port forward: diff --git a/operator/src/main/java/org/keycloak/operator/v2alpha1/KeycloakIngress.java b/operator/src/main/java/org/keycloak/operator/v2alpha1/KeycloakIngress.java index 8690fc7c763..17ad7f54c0e 100644 --- a/operator/src/main/java/org/keycloak/operator/v2alpha1/KeycloakIngress.java +++ b/operator/src/main/java/org/keycloak/operator/v2alpha1/KeycloakIngress.java @@ -43,7 +43,7 @@ public class KeycloakIngress extends OperatorManagedResource implements StatusUp @Override protected Optional getReconciledResource() { var defaultIngress = newIngress(); - if (keycloak.getSpec().isDefaultIngressDisabled() && existingIngress != null) { + if (keycloak.getSpec().isDisableDefaultIngress() && existingIngress != null) { client.network().v1().ingresses().delete(existingIngress); return Optional.empty(); } else if (existingIngress == null) { diff --git a/operator/src/main/java/org/keycloak/operator/v2alpha1/crds/KeycloakSpec.java b/operator/src/main/java/org/keycloak/operator/v2alpha1/crds/KeycloakSpec.java index 1bb3bc500a1..4e32deded8b 100644 --- a/operator/src/main/java/org/keycloak/operator/v2alpha1/crds/KeycloakSpec.java +++ b/operator/src/main/java/org/keycloak/operator/v2alpha1/crds/KeycloakSpec.java @@ -63,11 +63,11 @@ public class KeycloakSpec { return this.hostname.equals(Constants.INSECURE_DISABLE); } - public void setDefaultIngressDisabled(boolean value) { + public void setDisableDefaultIngress(boolean value) { this.disableDefaultIngress = value; } - public boolean isDefaultIngressDisabled() { + public boolean isDisableDefaultIngress() { return this.disableDefaultIngress; } diff --git a/operator/src/test/java/org/keycloak/operator/CRSerializationTest.java b/operator/src/test/java/org/keycloak/operator/CRSerializationTest.java new file mode 100644 index 00000000000..7eb1cd7cc77 --- /dev/null +++ b/operator/src/test/java/org/keycloak/operator/CRSerializationTest.java @@ -0,0 +1,22 @@ +package org.keycloak.operator; + +import io.fabric8.kubernetes.client.utils.Serialization; +import org.junit.jupiter.api.Test; +import org.keycloak.operator.v2alpha1.crds.Keycloak; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CRSerializationTest { + + @Test + public void testDeserialization() { + Keycloak keycloak = Serialization.unmarshal(this.getClass().getResourceAsStream("/test-serialization-keycloak-cr.yml"), Keycloak.class); + + assertEquals("my-hostname", keycloak.getSpec().getHostname()); + assertEquals("my-image", keycloak.getSpec().getImage()); + assertEquals("my-tls-secret", keycloak.getSpec().getTlsSecret()); + assertTrue(keycloak.getSpec().isDisableDefaultIngress()); + } + +} diff --git a/operator/src/test/java/org/keycloak/operator/KeycloakIngressE2EIT.java b/operator/src/test/java/org/keycloak/operator/KeycloakIngressE2EIT.java index ebe98a7bbf4..9b58e713992 100644 --- a/operator/src/test/java/org/keycloak/operator/KeycloakIngressE2EIT.java +++ b/operator/src/test/java/org/keycloak/operator/KeycloakIngressE2EIT.java @@ -121,5 +121,11 @@ public class KeycloakIngressE2EIT extends ClusterOperatorTest { assertEquals("HTTPS", i.getMetadata().getAnnotations().get("nginx.ingress.kubernetes.io/backend-protocol")); assertEquals(Constants.KEYCLOAK_HTTPS_PORT, i.getSpec().getDefaultBackend().getService().getPort().getNumber()); }); + + // Delete the ingress + kc.getSpec().setDisableDefaultIngress(true); + K8sUtils.deployKeycloak(k8sclient, kc, true); + + assertThat(k8sclient.network().v1().ingresses().inNamespace(namespace).list().getItems().size()).isEqualTo(0); } } diff --git a/operator/src/test/resources/test-serialization-keycloak-cr.yml b/operator/src/test/resources/test-serialization-keycloak-cr.yml new file mode 100644 index 00000000000..2daf28c64b7 --- /dev/null +++ b/operator/src/test/resources/test-serialization-keycloak-cr.yml @@ -0,0 +1,18 @@ +apiVersion: k8s.keycloak.org/v2alpha1 +kind: Keycloak +metadata: + name: test-serialization-kc +spec: + instances: 3 + image: my-image + serverConfiguration: + - name: key1 + value: value1 + hostname: my-hostname + tlsSecret: my-tls-secret + disableDefaultIngress: true + unsupported: + podTemplate: + metadata: + labels: + my-label: "foo"