From 62058241fa9079bc2e47ff6cf0e7d9451099ca43 Mon Sep 17 00:00:00 2001 From: Fabio Burzigotti Date: Thu, 30 Nov 2023 18:41:33 +0100 Subject: [PATCH 1/2] [issue 114] - Adding the PostgreSql template provisioner (for legacy internal tests) --- .../OpenShiftProvisionerTestBase.java | 21 ++++- .../openshift/PostgreSQLImageTestCase.java | 2 +- .../openshift/ProvisionerCleanupTestCase.java | 6 +- .../DBTemplateOpenShiftApplication.java | 19 ++++ ...ostgreSQLTemplateOpenShiftApplication.java | 22 +++++ .../template/PostgreSQLTemplate.java | 25 ++++++ ...ostgreSQLTemplateOpenShiftProvisioner.java | 86 +++++++++++++++++++ ...QLTemplateOpenShiftProvisionerFactory.java | 19 ++++ ...ersmash.tools.provision.ProvisionerFactory | 1 + .../provision/ProvisionerManagerTestCase.java | 18 +++- 10 files changed, 215 insertions(+), 4 deletions(-) create mode 100644 tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/DBTemplateOpenShiftApplication.java create mode 100644 tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLTemplateOpenShiftApplication.java create mode 100644 tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/template/PostgreSQLTemplate.java create mode 100644 tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java create mode 100644 tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/OpenShiftProvisionerTestBase.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/OpenShiftProvisionerTestBase.java index f82eed7a8..3b2c77f0d 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/OpenShiftProvisionerTestBase.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/OpenShiftProvisionerTestBase.java @@ -40,12 +40,14 @@ import org.jboss.intersmash.tools.application.openshift.KafkaOperatorApplication; import org.jboss.intersmash.tools.application.openshift.MysqlImageOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.PostgreSQLImageOpenShiftApplication; +import org.jboss.intersmash.tools.application.openshift.PostgreSQLTemplateOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.RhSsoTemplateOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.WildflyImageOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.input.BinarySource; import org.jboss.intersmash.tools.application.openshift.input.BuildInput; import org.jboss.intersmash.tools.application.openshift.input.BuildInputBuilder; import org.jboss.intersmash.tools.application.openshift.template.Eap7Template; +import org.jboss.intersmash.tools.application.openshift.template.PostgreSQLTemplate; import org.jboss.intersmash.tools.application.openshift.template.RhSsoTemplate; import org.jboss.intersmash.tools.util.ProcessKeystoreGenerator; import org.jboss.intersmash.tools.util.openshift.WildflyOpenShiftUtils; @@ -576,7 +578,7 @@ public String getDbName() { }; } - public static PostgreSQLImageOpenShiftApplication getPostgreSQLOpenShiftApplication() { + public static PostgreSQLImageOpenShiftApplication getPostgreSQLImageOpenShiftApplication() { return new PostgreSQLImageOpenShiftApplication() { @Override @@ -596,6 +598,23 @@ public String getDbName() { }; } + public static PostgreSQLTemplateOpenShiftApplication getPostgreSQLTemplateOpenShiftApplication() { + return new PostgreSQLTemplateOpenShiftApplication() { + + String NAME = "postgresql"; + + @Override + public PostgreSQLTemplate getTemplate() { + return PostgreSQLTemplate.POSTGRESQL_EPHEMERAL; + } + + @Override + public String getName() { + return NAME; + } + }; + } + /** * This method serves just for testing purpose. It implements necessary methods of {@link * KafkaOperatorApplication} interface so we can successfully use it in our tests. diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/PostgreSQLImageTestCase.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/PostgreSQLImageTestCase.java index 334713bf9..25080bb48 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/PostgreSQLImageTestCase.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/PostgreSQLImageTestCase.java @@ -34,7 +34,7 @@ public class PostgreSQLImageTestCase { private static final OpenShift openShift = OpenShifts.master(); private static final PostgreSQLImageOpenShiftApplication application = OpenShiftProvisionerTestBase - .getPostgreSQLOpenShiftApplication(); + .getPostgreSQLImageOpenShiftApplication(); private static final PostgreSQLImageOpenShiftProvisioner provisioner = new PostgreSQLImageOpenShiftProvisioner(application); @BeforeAll 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 dd13ebd09..1781057fa 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 @@ -23,6 +23,7 @@ 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.PostgreSQLTemplateOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.RhSsoTemplateOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.WildflyBootableJarImageOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.WildflyImageOpenShiftProvisioner; @@ -48,7 +49,10 @@ private static Stream provisionerProvider() { new WildflyBootableJarImageOpenShiftProvisioner( OpenShiftProvisionerTestBase.getWildflyBootableJarJavaxOpenShiftApplication()), new MysqlImageOpenShiftProvisioner(OpenShiftProvisionerTestBase.getMysqlOpenShiftApplication()), - new PostgreSQLImageOpenShiftProvisioner(OpenShiftProvisionerTestBase.getPostgreSQLOpenShiftApplication())); + new PostgreSQLImageOpenShiftProvisioner( + OpenShiftProvisionerTestBase.getPostgreSQLImageOpenShiftApplication()), + new PostgreSQLTemplateOpenShiftProvisioner( + OpenShiftProvisionerTestBase.getPostgreSQLTemplateOpenShiftApplication())); } else if (IntersmashTestsuiteProperties.isProductizedTestExecutionProfileEnabled()) { return Stream.of( new WildflyImageOpenShiftProvisioner( diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/DBTemplateOpenShiftApplication.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/DBTemplateOpenShiftApplication.java new file mode 100644 index 000000000..015decdbe --- /dev/null +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/DBTemplateOpenShiftApplication.java @@ -0,0 +1,19 @@ +package org.jboss.intersmash.tools.application.openshift; + +import java.util.Collections; +import java.util.Map; + +import org.jboss.intersmash.tools.provision.openshift.template.OpenShiftTemplate; + +/** + * This interface is not supposed to be implemented by user Applications. See the "Mapping of implemented provisioners" + * section of Appsint README.md file for the up-to-date list of supported end users Applications. + */ +public interface DBTemplateOpenShiftApplication + extends TemplateApplication { + + @Override + default Map getParameters() { + return Collections.emptyMap(); + } +} diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLTemplateOpenShiftApplication.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLTemplateOpenShiftApplication.java new file mode 100644 index 000000000..f018c395c --- /dev/null +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/PostgreSQLTemplateOpenShiftApplication.java @@ -0,0 +1,22 @@ +package org.jboss.intersmash.tools.application.openshift; + +import org.jboss.intersmash.tools.application.openshift.template.PostgreSQLTemplate; + +/** + * End user Application interface which presents PostgreSQL template application on OpenShift Container Platform. + * + * See {@link PostgreSQLTemplate} for available templates the + * application can represent. + * + * The application will be deployed by: + *
    + *
  • {@link org.jboss.intersmash.tools.provision.openshift.PostgreSQLTemplateOpenShiftProvisioner}
  • + *
+ */ +public interface PostgreSQLTemplateOpenShiftApplication extends DBTemplateOpenShiftApplication { + + default String getName() { + return "postgresql"; + } + +} diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/template/PostgreSQLTemplate.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/template/PostgreSQLTemplate.java new file mode 100644 index 000000000..4c3cc1b10 --- /dev/null +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/application/openshift/template/PostgreSQLTemplate.java @@ -0,0 +1,25 @@ +package org.jboss.intersmash.tools.application.openshift.template; + +import org.jboss.intersmash.tools.provision.openshift.template.OpenShiftTemplate; + +/** + * OpenShift templates for PostgreSQL. + * + * These are build in {@code openshift} namespace by default. + */ +public enum PostgreSQLTemplate implements OpenShiftTemplate { + POSTGRESQL_EPHEMERAL("postgresql-ephemeral"), + POSTGRESQL_PERSISTENT("postgresql-persistent"); + + private String name; + + PostgreSQLTemplate(String name) { + this.name = name; + } + + @Override + public String getLabel() { + return name; + } + +} diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java new file mode 100644 index 000000000..9a3c614d9 --- /dev/null +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java @@ -0,0 +1,86 @@ +package org.jboss.intersmash.tools.provision.openshift; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.jboss.intersmash.tools.application.openshift.PostgreSQLTemplateOpenShiftApplication; +import org.jboss.intersmash.tools.provision.openshift.template.OpenShiftTemplate; +import org.slf4j.event.Level; + +import cz.xtf.core.event.helpers.EventHelper; +import cz.xtf.core.openshift.OpenShiftWaiters; +import cz.xtf.core.openshift.OpenShifts; +import cz.xtf.core.waiting.failfast.FailFastCheck; +import io.fabric8.kubernetes.api.model.KubernetesList; +import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.openshift.api.model.Template; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class PostgreSQLTemplateOpenShiftProvisioner implements OpenShiftProvisioner { + private FailFastCheck ffCheck = () -> false; + private final PostgreSQLTemplateOpenShiftApplication postgreSQLApplication; + private final OpenShiftTemplate postgreSQLTemplate; + private KubernetesList kubernetesList; + + public PostgreSQLTemplateOpenShiftProvisioner(PostgreSQLTemplateOpenShiftApplication postgreSQLApplication) { + this.postgreSQLApplication = postgreSQLApplication; + this.postgreSQLTemplate = postgreSQLApplication.getTemplate(); + } + + @Override + public PostgreSQLTemplateOpenShiftApplication getApplication() { + return postgreSQLApplication; + } + + @Override + public void deploy() { + ffCheck = FailFastUtils.getFailFastCheck(EventHelper.timeOfLastEventBMOrTestNamespaceOrEpoch(), + postgreSQLApplication.getName()); + + Map parameters = new HashMap<>(postgreSQLApplication.getParameters()); + // DATABASE_SERVICE_NAME parameter has to be aligned with the getName() in case that default is not used + if (!postgreSQLApplication.getName().equals("postgresql") || parameters.containsKey("DATABASE_SERVICE_NAME")) { + String dbServiceName = parameters.getOrDefault("DATABASE_SERVICE_NAME", ""); + if (!dbServiceName.equals(postgreSQLApplication.getName())) { + log.warn("DATABASE_SERVICE_NAME has to be aligned with the application name, setting it according to name: {}.", + postgreSQLApplication.getName()); + parameters.put("DATABASE_SERVICE_NAME", postgreSQLApplication.getName()); + } + } + // Get the template from the openshift namespace, recreate it into test namespace and deploy + Template template = OpenShifts.master("openshift") + .getTemplate(postgreSQLApplication.getTemplate().getLabel()); + template.getMetadata().setNamespace(openShift.getNamespace()); + template.getMetadata().setResourceVersion(null); + openShift.createTemplate(template); + kubernetesList = openShift.processAndDeployTemplate(template.getMetadata().getName(), parameters); + OpenShiftWaiters.get(openShift, ffCheck).isDcReady(postgreSQLApplication.getName()).waitFor(); + } + + @Override + public void undeploy() { + openShift.deleteResources(kubernetesList); + openShift.deleteTemplate(postgreSQLApplication.getTemplate().getLabel()); + } + + @Override + public List getPods() { + return openShift.getPods(getApplication().getName()); + } + + @Override + public void scale(int replicas, boolean wait) { + openShift.scale(postgreSQLApplication.getName(), replicas); + if (wait) { + OpenShiftWaiters.get(openShift, ffCheck).areExactlyNPodsReady(replicas, "name", postgreSQLTemplate.getLabel()) + .level(Level.DEBUG).waitFor(); + } + } + + @Override + public String getUrl(String routeName, boolean secure) { + throw new UnsupportedOperationException("Route is not created for DB applications."); + } +} diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java new file mode 100644 index 000000000..03342ce4a --- /dev/null +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java @@ -0,0 +1,19 @@ +package org.jboss.intersmash.tools.provision.openshift; + +import org.jboss.intersmash.tools.application.Application; +import org.jboss.intersmash.tools.application.openshift.PostgreSQLTemplateOpenShiftApplication; +import org.jboss.intersmash.tools.provision.ProvisionerFactory; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class PostgreSQLTemplateOpenShiftProvisionerFactory + implements ProvisionerFactory { + + @Override + public PostgreSQLTemplateOpenShiftProvisioner getProvisioner(Application application) { + if (PostgreSQLTemplateOpenShiftApplication.class.isAssignableFrom(application.getClass())) + return new PostgreSQLTemplateOpenShiftProvisioner((PostgreSQLTemplateOpenShiftApplication) application); + return null; + } +} diff --git a/tools/intersmash-tools-provisioners/src/main/resources/META-INF/services/org.jboss.intersmash.tools.provision.ProvisionerFactory b/tools/intersmash-tools-provisioners/src/main/resources/META-INF/services/org.jboss.intersmash.tools.provision.ProvisionerFactory index 4363dfd75..60374f5bd 100644 --- a/tools/intersmash-tools-provisioners/src/main/resources/META-INF/services/org.jboss.intersmash.tools.provision.ProvisionerFactory +++ b/tools/intersmash-tools-provisioners/src/main/resources/META-INF/services/org.jboss.intersmash.tools.provision.ProvisionerFactory @@ -10,3 +10,4 @@ org.jboss.intersmash.tools.provision.openshift.RhSsoOperatorProvisionerFactory org.jboss.intersmash.tools.provision.helm.WildflyHelmChartOpenShiftProvisionerFactory org.jboss.intersmash.tools.provision.openshift.Eap7ImageOpenShiftProvisionerFactory org.jboss.intersmash.tools.provision.openshift.RhSsoTemplateOpenShiftProvisionerFactory +org.jboss.intersmash.tools.provision.openshift.PostgreSQLTemplateOpenShiftProvisionerFactory diff --git a/tools/intersmash-tools-provisioners/src/test/java/org/jboss/intersmash/tools/provision/ProvisionerManagerTestCase.java b/tools/intersmash-tools-provisioners/src/test/java/org/jboss/intersmash/tools/provision/ProvisionerManagerTestCase.java index 318ad0101..fd56e79f3 100644 --- a/tools/intersmash-tools-provisioners/src/test/java/org/jboss/intersmash/tools/provision/ProvisionerManagerTestCase.java +++ b/tools/intersmash-tools-provisioners/src/test/java/org/jboss/intersmash/tools/provision/ProvisionerManagerTestCase.java @@ -25,15 +25,18 @@ import org.jboss.intersmash.tools.application.openshift.KafkaOperatorApplication; import org.jboss.intersmash.tools.application.openshift.MysqlImageOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.PostgreSQLImageOpenShiftApplication; +import org.jboss.intersmash.tools.application.openshift.PostgreSQLTemplateOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.RhSsoTemplateOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.WildflyImageOpenShiftApplication; import org.jboss.intersmash.tools.application.openshift.WildflyOperatorApplication; +import org.jboss.intersmash.tools.application.openshift.template.PostgreSQLTemplate; import org.jboss.intersmash.tools.application.openshift.template.RhSsoTemplate; import org.jboss.intersmash.tools.provision.openshift.ActiveMQOperatorProvisioner; import org.jboss.intersmash.tools.provision.openshift.Eap7LegacyS2iBuildTemplateProvisioner; import org.jboss.intersmash.tools.provision.openshift.KafkaOperatorProvisioner; import org.jboss.intersmash.tools.provision.openshift.MysqlImageOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.PostgreSQLImageOpenShiftProvisioner; +import org.jboss.intersmash.tools.provision.openshift.PostgreSQLTemplateOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.RhSsoTemplateOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.WildflyBootableJarImageOpenShiftProvisioner; import org.jboss.intersmash.tools.provision.openshift.WildflyImageOpenShiftProvisioner; @@ -136,7 +139,7 @@ public void kafkaOperatorProvisioner() { } /** - * Eap7LegacyS2iBuildTemplateApplication/Eap7LegacyS2iBuildTemplateProvisioner + * Eap7LegacyS2iBuildTemplateApplication / Eap7LegacyS2iBuildTemplateProvisioner */ @Test public void eapS2iBuildTemplateProvisioner() { @@ -158,6 +161,19 @@ public void openShiftRhSsoTemplateProvisioner() { Assertions.assertEquals(RhSsoTemplateOpenShiftProvisioner.class, actual.getClass()); } + /** + * | PostgreSQLTemplateOpenShiftApplication / PostgreSQLTemplateOpenShiftProvisioner | + */ + @Test + public void openShiftPostgreSQLTemplateProvisioner() { + application = mock(PostgreSQLTemplateOpenShiftApplication.class); + when(((PostgreSQLTemplateOpenShiftApplication) application).getTemplate()) + .thenReturn(PostgreSQLTemplate.POSTGRESQL_PERSISTENT); + + Provisioner actual = ProvisionerManager.getProvisioner(application); + Assertions.assertEquals(PostgreSQLTemplateOpenShiftProvisioner.class, actual.getClass()); + } + @Test public void unsupportedProvisioner() { Assertions.assertThrows(UnsupportedOperationException.class, From 3316aaeec357f9fa19a783912075df857ab623f0 Mon Sep 17 00:00:00 2001 From: Fabio Burzigotti Date: Mon, 11 Dec 2023 13:44:04 +0100 Subject: [PATCH 2/2] [issue 114] - Adding Javadoc to the provisioner classes --- .../openshift/PostgreSQLTemplateOpenShiftProvisioner.java | 5 +++++ .../PostgreSQLTemplateOpenShiftProvisionerFactory.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java index 9a3c614d9..c5c410d8a 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisioner.java @@ -17,6 +17,11 @@ import io.fabric8.openshift.api.model.Template; import lombok.extern.slf4j.Slf4j; +/** + * Provisions PostgreSql on OpenShift via PostgreSql template available on OpenShift and based on a + * {@link PostgreSQLTemplateOpenShiftApplication} concrete implementation. + * + */ @Slf4j public class PostgreSQLTemplateOpenShiftProvisioner implements OpenShiftProvisioner { private FailFastCheck ffCheck = () -> false; diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java index 03342ce4a..ed3482960 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/provision/openshift/PostgreSQLTemplateOpenShiftProvisionerFactory.java @@ -6,6 +6,10 @@ import lombok.extern.slf4j.Slf4j; +/** + * Provides logic to obtain a {@link PostgreSQLTemplateOpenShiftProvisioner} instance that is initialized with a + * given {@link PostgreSQLTemplateOpenShiftApplication} instance. + */ @Slf4j public class PostgreSQLTemplateOpenShiftProvisionerFactory implements ProvisionerFactory {