From bd5a77932c1f38bb57e78d1f76af833da319f02c Mon Sep 17 00:00:00 2001 From: Tommasso Borgato Date: Tue, 6 Jun 2023 16:48:52 +0200 Subject: [PATCH] Fix https://github.com/Intersmash/intersmash/issues/37: modifications after review --- README.md | 19 ++++++++++--------- ...oakRealmImportOperatorProvisionerTest.java | 9 +-------- .../intersmash/tools/IntersmashConfig.java | 1 - .../DBImageOpenShiftProvisioner.java | 7 ++++--- ...eycloakRealmImportOperatorProvisioner.java | 6 +----- .../PostgreSQLImageOpenShiftProvisioner.java | 2 +- .../tools/util/tls/CertificatesUtils.java | 8 +++++--- 7 files changed, 22 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 7db4bb806..ac1fbe687 100644 --- a/README.md +++ b/README.md @@ -245,15 +245,16 @@ public class PostgresqlProvisionTest { Mapping of implemented provisioners: -| Product | Application | Provisioner | Notes | -|:-----------|:-------------------------------------|:-------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| ActiveMQ | ActiveMQOperatorApplication* | ActiveMQOperatorProvisioner | | -| Kafka | KafkaOperatorApplication | KafkaOperatorProvisioner | | -| Wildfly | WildflyImageOpenShiftApplication | WildflyImageOpenShiftProvisioner | Available both for Git sources and binary based s2i v2 build (either a pre-built deployment or a filesystem resource like a Maven project folder) | -| Wildfly | WildflyHelmChartOpenShiftApplication | WildflyHelmChartOpenShiftProvisioner | The `wildfly-2.3.2` tag of https://github.com/wildfly/wildfly-charts is used and the model is generated based on the https://raw.githubusercontent.com/wildfly/wildfly-charts/main/charts/wildfly/values.schema.json value schema file | | -| Infinispan | InfinispanOperatorApplication | InfinispanOperatorProvisioner | | -| Keycloak | KeycloakOpenShiftApplication | KeycloakTemplateOpenShiftProvisioner | | -| Keycloak | KeycloakOperatorApplication | KeycloakOperatorProvisioner | | +| Product | Application | Provisioner | Notes | +|:-----------|:-------------------------------------|:-------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ActiveMQ | ActiveMQOperatorApplication* | ActiveMQOperatorProvisioner | | +| Kafka | KafkaOperatorApplication | KafkaOperatorProvisioner | | +| Wildfly | WildflyImageOpenShiftApplication | WildflyImageOpenShiftProvisioner | Available both for Git sources and binary based s2i v2 build (either a pre-built deployment or a filesystem resource like a Maven project folder) | +| Wildfly | WildflyHelmChartOpenShiftApplication | WildflyHelmChartOpenShiftProvisioner | The `wildfly-2.3.2` tag of https://github.com/wildfly/wildfly-charts is used and the model is generated based on the https://raw.githubusercontent.com/wildfly/wildfly-charts/main/charts/wildfly/values.schema.json value schema file | | +| Infinispan | InfinispanOperatorApplication | InfinispanOperatorProvisioner | | +| Keycloak | KeycloakOpenShiftApplication | KeycloakTemplateOpenShiftProvisioner | | +| Keycloak | KeycloakOperatorApplication | KeycloakOperatorProvisioner | | +| Keycloak | KeycloakRealmImportOperatorApplication | KeycloakRealmImportOperatorProvisioner | The latest Quarkus based Keycloak Operator, doesn't provide stable CRDs yet (see https://www.keycloak.org/2022/09/operator-crs); this operator offers a temporary solution which supports the `Keycloak` and `KeycloakRealmImport` Custom Resources: these are the only supported CR at the time of writing | Additional services provisioners: diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java index ab9d54759..e1b2c14ce 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java @@ -33,7 +33,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.keycloak.k8s.v2alpha1.Keycloak; import org.keycloak.k8s.v2alpha1.KeycloakRealmImport; @@ -71,7 +70,6 @@ */ @Slf4j @CleanBeforeAll -//@Disabled("WIP - Disabled until global-test.properties is configured with the required property") public class KeycloakRealmImportOperatorProvisionerTest { private static KeycloakRealmImportOperatorProvisioner KEYCLOAK_OPERATOR_PROVISIONER; @@ -135,12 +133,6 @@ public static void createOperatorGroup() throws IOException { OpenShifts.adminBinary().execute("apply", "-f", OperatorGroup.SINGLE_NAMESPACE.save().getAbsolutePath()); } - @BeforeEach - public void cleanup() throws IOException { - if (!Objects.isNull(KEYCLOAK_OPERATOR_PROVISIONER)) - KEYCLOAK_OPERATOR_PROVISIONER.unsubscribe(); - } - @AfterAll public static void removeOperatorGroup() { OpenShifts.adminBinary().execute("delete", "operatorgroup", "--all"); @@ -225,6 +217,7 @@ public void exampleSso() { @Test public void exampleSsoWithDatabase() { try { + POSTGRESQL_IMAGE_PROVISIONER.configure(); POSTGRESQL_IMAGE_PROVISIONER.preDeploy(); POSTGRESQL_IMAGE_PROVISIONER.deploy(); diff --git a/tools/intersmash-tools-core/src/main/java/org/jboss/intersmash/tools/IntersmashConfig.java b/tools/intersmash-tools-core/src/main/java/org/jboss/intersmash/tools/IntersmashConfig.java index a38370352..457f15546 100644 --- a/tools/intersmash-tools-core/src/main/java/org/jboss/intersmash/tools/IntersmashConfig.java +++ b/tools/intersmash-tools-core/src/main/java/org/jboss/intersmash/tools/IntersmashConfig.java @@ -108,7 +108,6 @@ public class IntersmashConfig { // KEYCLOAK private static final String KEYCLOAK_IMAGE_URL = "intersmash.keycloak.image"; private static final String KEYCLOAK_REALM_IMPORT_IMAGE_URL = "intersmash.keycloak.realm_import.image"; - private static final String KEYCLOAK_TEMPLATES = "intersmash.keycloak.templates"; // ACTIVEMQ private static final String ACTIVEMQ_IMAGE_URL = "intersmash.activemq.image"; diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/DBImageOpenShiftProvisioner.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/DBImageOpenShiftProvisioner.java index c5bf40de2..600a2263d 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/DBImageOpenShiftProvisioner.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/DBImageOpenShiftProvisioner.java @@ -68,7 +68,7 @@ public Map getImageVariables() { return vars; } - public void customizeApplicationBuilder(ApplicationBuilder appBuilder) { + public void customizeApplication(ApplicationBuilder appBuilder) { } public abstract String getSymbolicName(); @@ -99,7 +99,7 @@ public void deploy() { .addContainerSelector("deploymentconfig", dbApplication.getName()) .addContainerSelector("name", dbApplication.getName()); - customizeApplicationBuilder(appBuilder); + customizeApplication(appBuilder); appBuilder.buildApplication(openShift).deploy(); @@ -137,7 +137,8 @@ public String getUrl(String routeName, boolean secure) { } /** - * When using {@link ApplicationBuilder} to build the application, then the service name defaults to the application nane + * Returns the service name used to expose the database functionality inside OpenShift; + * When using {@link ApplicationBuilder} to build the application (which is always the case here), then the service name defaults to the application nane * @return service name to access the database */ public String getServiceName() { diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/KeycloakRealmImportOperatorProvisioner.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/KeycloakRealmImportOperatorProvisioner.java index c199b64cc..bdc934abc 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/KeycloakRealmImportOperatorProvisioner.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/KeycloakRealmImportOperatorProvisioner.java @@ -86,17 +86,13 @@ public void subscribe() { if (Strings.isNullOrEmpty(IntersmashConfig.keycloakRealmImportImageURL())) { super.subscribe(); } else { - // RELATED_IMAGE_RHSSO_OPENJ9 and RELATED_IMAGE_RHSSO_OPENJDK, determine the final value for RELATED_IMAGE_RHSSO subscribe( INSTALLPLAN_APPROVAL_MANUAL, - // TODO: check if these env variables still make sense in the new quarkus operator Map.of( // Custom Keycloak image to be used: overrides the Keycloak image at the operator level: all // Keycloak instances will be spun out of this image // e.g. OPERATOR_KEYCLOAK_IMAGE=quay.io/keycloak/keycloak:21.1.1 --> operator.keycloak.image - "OPERATOR_KEYCLOAK_IMAGE", IntersmashConfig.keycloakRealmImportImageURL() - // "PROFILE", "RHSSO" - )); + "OPERATOR_KEYCLOAK_IMAGE", IntersmashConfig.keycloakRealmImportImageURL())); } } diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLImageOpenShiftProvisioner.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLImageOpenShiftProvisioner.java index 86b8f3229..834f9dbcc 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLImageOpenShiftProvisioner.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLImageOpenShiftProvisioner.java @@ -86,7 +86,7 @@ public Map getImageVariables() { } @Override - public void customizeApplicationBuilder(ApplicationBuilder appBuilder) { + public void customizeApplication(ApplicationBuilder appBuilder) { // the secret is supposed to be used by applications connecting to the database appBuilder.secret(getSecretName()) .setType(SecretType.OPAQUE) diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java index 251d11025..b3d1773e9 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java @@ -45,7 +45,9 @@ public static class CertificateAndKey { /** * Generates a key and self-signed certificate for that key; it also generates a truststore containing the certificate; - * @return + * @param hostname: to be used as Common Name (CN) for the certificate + * @param tlsSecretName: name of the secret to be created in OpenShift containing key and certificate + * @return wrapper object {@link CertificateAndKey} containing details about the newly created key, certificate and secret */ public static CertificateAndKey generateSelfSignedCertificateAndKey(String hostname, String tlsSecretName) { CertificateAndKey certificateAndKey = new CertificateAndKey(); @@ -113,11 +115,11 @@ private static void processCall(Path cwd, String... args) { } } } catch (IOException | InterruptedException e) { - throw new IllegalStateException("Failed executing " + String.join(" ", args)); + throw new RuntimeException("Failed executing " + String.join(" ", args)); } if (result != 0) { - throw new IllegalStateException("Failed executing " + String.join(" ", args)); + throw new RuntimeException("Failed executing " + String.join(" ", args)); } }