From 6f308bf2edf202b0acf1efd7eb9887c34a380347 Mon Sep 17 00:00:00 2001 From: Fabio Burzigotti Date: Wed, 23 Aug 2023 11:47:37 +0200 Subject: [PATCH 1/4] [issue 74] - Fixing the PostgreSQLImageOpenShiftProvisioner so that the application secret is moved to the application interface and used by the provisioning workflow as expected (i.e. implementing the HasSecrets interface) --- ...oakRealmImportOperatorProvisionerTest.java | 10 +++--- .../openshift/ProvisionerCleanupTestCase.java | 2 +- .../PostgreSQLImageOpenShiftApplication.java | 34 ++++++++++++++++++- .../DBImageOpenShiftProvisioner.java | 7 ---- .../PostgreSQLImageOpenShiftProvisioner.java | 33 +++++------------- 5 files changed, 49 insertions(+), 37 deletions(-) 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 6fc30f5f0..344b1fea5 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 @@ -250,12 +250,14 @@ public void exampleSsoWithDatabase() { db.setHost(POSTGRESQL_IMAGE_PROVISIONER.getServiceName()); db.setPort(Integer.toUnsignedLong(POSTGRESQL_IMAGE_PROVISIONER.getPort())); UsernameSecret usernameSecret = new UsernameSecret(); - usernameSecret.setName(POSTGRESQL_IMAGE_PROVISIONER.getSecretName()); - usernameSecret.setKey(PostgreSQLImageOpenShiftProvisioner.POSTGRESQL_USER_KEY); + usernameSecret.setName( + POSTGRESQL_IMAGE_PROVISIONER.getApplication().getApplicationSecretName()); + usernameSecret.setKey(PostgreSQLImageOpenShiftApplication.POSTGRESQL_USER_KEY); db.setUsernameSecret(usernameSecret); PasswordSecret passwordSecret = new PasswordSecret(); - passwordSecret.setName(POSTGRESQL_IMAGE_PROVISIONER.getSecretName()); - passwordSecret.setKey(PostgreSQLImageOpenShiftProvisioner.POSTGRESQL_PASSWORD_KEY); + passwordSecret.setName( + POSTGRESQL_IMAGE_PROVISIONER.getApplication().getApplicationSecretName()); + passwordSecret.setKey(PostgreSQLImageOpenShiftApplication.POSTGRESQL_PASSWORD_KEY); db.setPasswordSecret(passwordSecret); db.setDatabase(POSTGRESQL_IMAGE_PROVISIONER.getApplication().getDbName()); spec.setDb(db); diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java index 93acfe5ad..0a64be155 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java @@ -42,7 +42,7 @@ private static Stream provisionerProvider() { @ParameterizedTest(name = "{displayName}#class({0})") @MethodSource("provisionerProvider") - public void undeploy(OpenShiftProvisioner provisioner) { + public void testProvisioningWorkflowCleanup(OpenShiftProvisioner provisioner) { provisioner.configure(); try { provisioner.preDeploy(); diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLImageOpenShiftApplication.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLImageOpenShiftApplication.java index c1537a2f2..40e726f9c 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLImageOpenShiftApplication.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLImageOpenShiftApplication.java @@ -15,8 +15,15 @@ */ package org.jboss.intersmash.tools.application.openshift; +import java.util.Collections; +import java.util.List; + import org.jboss.intersmash.tools.provision.openshift.PostgreSQLImageOpenShiftProvisioner; +import cz.xtf.builder.builders.SecretBuilder; +import cz.xtf.builder.builders.secret.SecretType; +import io.fabric8.kubernetes.api.model.Secret; + /** * End user Application interface which presents PostgreSQL image application on OpenShift Container Platform. * @@ -33,7 +40,22 @@ *
  • {@link PostgreSQLImageOpenShiftProvisioner}
  • * */ -public interface PostgreSQLImageOpenShiftApplication extends DBImageOpenShiftApplication { +public interface PostgreSQLImageOpenShiftApplication extends DBImageOpenShiftApplication, HasSecrets { + + String POSTGRESQL_USER = "POSTGRESQL_USER"; + String POSTGRESQL_PASSWORD = "POSTGRESQL_PASSWORD"; + String POSTGRESQL_ADMIN_PASSWORD = "POSTGRESQL_ADMIN_PASSWORD"; + + String POSTGRESQL_USER_KEY = POSTGRESQL_USER.replace("_", "-").toLowerCase(); + String POSTGRESQL_PASSWORD_KEY = POSTGRESQL_PASSWORD.replace("_", "-").toLowerCase(); + String POSTGRESQL_ADMIN_PASSWORD_KEY = POSTGRESQL_ADMIN_PASSWORD.replace("_", "-").toLowerCase(); + + /** + * @return name of the secret containing username and password for the database + */ + default String getApplicationSecretName() { + return getName() + "-credentials"; + } default String getName() { return "postgresql"; @@ -42,4 +64,14 @@ default String getName() { default String getAdminPassword() { return "admin123"; } + + @Override + default List getSecrets() { + return Collections.singletonList(new SecretBuilder(getApplicationSecretName()) + .setType(SecretType.OPAQUE).addData(POSTGRESQL_USER_KEY, getUser().getBytes()) + .addData(POSTGRESQL_PASSWORD_KEY, getPassword().getBytes()) + .addData(POSTGRESQL_ADMIN_PASSWORD_KEY, + getAdminPassword().getBytes()) + .build()); + } } 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 600a2263d..d53241108 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 @@ -145,11 +145,4 @@ public String getServiceName() { return dbApplication.getName() + "-service"; } - /** - * @return name of the secret containing username and password for the database - */ - public String getSecretName() { - return dbApplication.getName() + "-credentials"; - } - } 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 834f9dbcc..75bb34a8e 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 @@ -22,20 +22,11 @@ import cz.xtf.builder.builders.ApplicationBuilder; import cz.xtf.builder.builders.pod.ContainerBuilder; -import cz.xtf.builder.builders.secret.SecretType; import lombok.extern.slf4j.Slf4j; @Slf4j public class PostgreSQLImageOpenShiftProvisioner extends DBImageOpenShiftProvisioner { - public static final String POSTGRESQL_USER = "POSTGRESQL_USER"; - public static final String POSTGRESQL_PASSWORD = "POSTGRESQL_PASSWORD"; - public static final String POSTGRESQL_ADMIN_PASSWORD = "POSTGRESQL_ADMIN_PASSWORD"; - - public static final String POSTGRESQL_USER_KEY = POSTGRESQL_USER.replace("_", "-").toLowerCase(); - public static final String POSTGRESQL_PASSWORD_KEY = POSTGRESQL_PASSWORD.replace("_", "-").toLowerCase(); - public static final String POSTGRESQL_ADMIN_PASSWORD_KEY = POSTGRESQL_ADMIN_PASSWORD.replace("_", "-").toLowerCase(); - public PostgreSQLImageOpenShiftProvisioner(PostgreSQLImageOpenShiftApplication pgSQLApplication) { super(pgSQLApplication); } @@ -70,9 +61,9 @@ protected void configureContainer(ContainerBuilder containerBuilder) { @Override public Map getImageVariables() { Map vars = super.getImageVariables(); - vars.remove(POSTGRESQL_USER); - vars.remove(POSTGRESQL_PASSWORD); - vars.remove(POSTGRESQL_ADMIN_PASSWORD); + vars.remove(PostgreSQLImageOpenShiftApplication.POSTGRESQL_USER); + vars.remove(PostgreSQLImageOpenShiftApplication.POSTGRESQL_PASSWORD); + vars.remove(PostgreSQLImageOpenShiftApplication.POSTGRESQL_ADMIN_PASSWORD); vars.remove("POSTGRESQL_USERNAME"); vars.put("POSTGRESQL_MAX_CONNECTIONS", "100"); vars.put("POSTGRESQL_SHARED_BUFFERS", "16MB"); @@ -87,19 +78,13 @@ public Map getImageVariables() { @Override public void customizeApplication(ApplicationBuilder appBuilder) { - // the secret is supposed to be used by applications connecting to the database - appBuilder.secret(getSecretName()) - .setType(SecretType.OPAQUE) - .addData(POSTGRESQL_USER_KEY, dbApplication.getUser().getBytes()) - .addData(POSTGRESQL_PASSWORD_KEY, dbApplication.getPassword().getBytes()) - .addData(POSTGRESQL_ADMIN_PASSWORD_KEY, - dbApplication.getAdminPassword().getBytes()); - // the secret is also used to configure POSTGRESQL_USER, POSTGRESQL_PASSWORD, POSTGRESQL_ADMIN_PASSWORD + // the application secret is used to configure the PostgreSql container env vars, such as POSTGRESQL_USER, + // POSTGRESQL_PASSWORD, POSTGRESQL_ADMIN_PASSWORD appBuilder.deploymentConfig().podTemplate().container().configFromConfigMap( - getSecretName(), + getApplication().getApplicationSecretName(), (String t) -> t.replace("-", "_").toUpperCase(), - POSTGRESQL_USER_KEY, - POSTGRESQL_PASSWORD_KEY, - POSTGRESQL_ADMIN_PASSWORD_KEY); + PostgreSQLImageOpenShiftApplication.POSTGRESQL_USER_KEY, + PostgreSQLImageOpenShiftApplication.POSTGRESQL_PASSWORD_KEY, + PostgreSQLImageOpenShiftApplication.POSTGRESQL_ADMIN_PASSWORD_KEY); } } From cc9a63baa2d0f7e7b43dce367f1587fc28dd9a35 Mon Sep 17 00:00:00 2001 From: Fabio Burzigotti Date: Wed, 23 Aug 2023 12:42:07 +0200 Subject: [PATCH 2/4] [issue 74] - Adding the MySQL and PostreSql provisioners to ProvisionerCleanupTestCase --- .../provision/openshift/ProvisionerCleanupTestCase.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java index 0a64be155..ac393d942 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/ProvisionerCleanupTestCase.java @@ -17,7 +17,9 @@ import java.util.stream.Stream; +import org.jboss.intersmash.tools.provision.openshift.MysqlImageOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.OpenShiftProvisioner; +import org.jboss.intersmash.tools.provision.openshift.PostgreSQLImageOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.WildflyBootableJarImageOpenShiftProvisioner; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; @@ -35,9 +37,11 @@ public class ProvisionerCleanupTestCase { private static Stream provisionerProvider() { return Stream.of( new WildflyBootableJarImageOpenShiftProvisioner( - (OpenShiftProvisionerTestBase.getWildflyBootableJarOpenShiftApplication())), + OpenShiftProvisionerTestBase.getWildflyBootableJarOpenShiftApplication()), new WildflyBootableJarImageOpenShiftProvisioner( - (OpenShiftProvisionerTestBase.getWildflyBootableJarJavaxOpenShiftApplication()))); + OpenShiftProvisionerTestBase.getWildflyBootableJarJavaxOpenShiftApplication()), + new MysqlImageOpenShiftProvisioner(OpenShiftProvisionerTestBase.getMysqlOpenShiftApplication()), + new PostgreSQLImageOpenShiftProvisioner(OpenShiftProvisionerTestBase.getPostgreSQLOpenShiftApplication())); } @ParameterizedTest(name = "{displayName}#class({0})") From a459549bab49babb1c62ca5e8a77592d6564962b Mon Sep 17 00:00:00 2001 From: Fabio Burzigotti Date: Wed, 23 Aug 2023 15:45:10 +0200 Subject: [PATCH 3/4] [issue 74] - Disable KeycloakRealmImportOperatorProvisionerTest ddue to https://github.com/Intersmash/intersmash/issues/76 --- .../openshift/KeycloakRealmImportOperatorProvisionerTest.java | 2 ++ 1 file changed, 2 insertions(+) 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 344b1fea5..fcdf716f4 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,6 +33,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.keycloak.k8s.v2alpha1.Keycloak; import org.keycloak.k8s.v2alpha1.KeycloakRealmImport; @@ -70,6 +71,7 @@ */ @Slf4j @CleanBeforeAll +@Disabled("https://github.com/Intersmash/intersmash/issues/76") public class KeycloakRealmImportOperatorProvisionerTest { private static KeycloakRealmImportOperatorProvisioner KEYCLOAK_OPERATOR_PROVISIONER; From ac5f73534099a7d261381459a232448d2ee8c286 Mon Sep 17 00:00:00 2001 From: Fabio Burzigotti Date: Wed, 23 Aug 2023 17:39:52 +0200 Subject: [PATCH 4/4] [issue 74] - Disable HyperfoilOperatorProvisionerTest due to https://github.com/Intersmash/intersmash/issues/78 --- .../provision/openshift/HyperfoilOperatorProvisionerTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/HyperfoilOperatorProvisionerTest.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/HyperfoilOperatorProvisionerTest.java index aaac0c1ba..f948d883b 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/HyperfoilOperatorProvisionerTest.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/HyperfoilOperatorProvisionerTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; @@ -48,6 +49,7 @@ @CleanBeforeAll @TestMethodOrder(MethodOrderer.OrderAnnotation.class) +@Disabled("https://github.com/Intersmash/intersmash/issues/78") public class HyperfoilOperatorProvisionerTest { private static final Logger logger = LoggerFactory.getLogger(HyperfoilOperatorProvisionerTest.class); private static final String NAME = "hyperfoil";