From f813725790c247bc2f889945aabd994433198df4 Mon Sep 17 00:00:00 2001 From: Marc Guillemot <guillemot@lat-lon.de> Date: Tue, 13 Feb 2024 10:03:39 +0100 Subject: [PATCH] XPLANBOX-2638 add support for env var XPLANBOX_CONFIG --- .../SystemPropertyPropertiesLoader.java | 2 ++ .../SystemPropertyPropertiesLoaderTest.java | 35 +++++++++++++++++-- .../xplan-dokumente-api/Dockerfile | 5 +-- xplan-manager/xplan-manager-api/Dockerfile | 6 ++-- xplan-manager/xplan-manager-web/Dockerfile | 3 +- .../xplan-validator-api/Dockerfile | 5 +-- .../xplan-validator-web/Dockerfile | 7 ++-- .../Dockerfile | 7 ++-- 8 files changed, 53 insertions(+), 17 deletions(-) diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoader.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoader.java index ab3cae6bc9..4636aaa2ad 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoader.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoader.java @@ -105,6 +105,8 @@ public class SystemPropertyPropertiesLoader extends AbstractPropertiesLoader { private Path findConfigDirectory() { LOG.info("Try to receive configuration set with system property {}", CONFIG_SYSTEM_PROPERTY); String configFilePath = System.getProperty(CONFIG_SYSTEM_PROPERTY); + if (configFilePath == null) + configFilePath = System.getenv(CONFIG_SYSTEM_PROPERTY); if (configFilePath != null) return findConfigDirectory(configFilePath); LOG.info("Try to receive configuration from default directory ${user.home}/xplanbox"); diff --git a/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoaderTest.java b/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoaderTest.java index 2dc12da0b1..71171d578e 100644 --- a/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoaderTest.java +++ b/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/configuration/SystemPropertyPropertiesLoaderTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; +import uk.org.webcompere.systemstubs.environment.EnvironmentVariables; import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension; import uk.org.webcompere.systemstubs.properties.SystemProperties; @@ -44,14 +45,42 @@ import static org.junit.jupiter.api.Assertions.assertEquals; class SystemPropertyPropertiesLoaderTest { @Test - void test_withProperty_XPLANBOX_COFIG(@TempDir File xplanBoxConfig, SystemProperties systemProperties) + void test_withProperty_XPLANBOX_CONFIG(@TempDir Path xplanBoxConfig, SystemProperties systemProperties) throws IOException { - systemProperties.set(CONFIG_SYSTEM_PROPERTY, xplanBoxConfig.toString()); + systemProperties.set(CONFIG_SYSTEM_PROPERTY, xplanBoxConfig.toAbsolutePath().toString()); SystemPropertyPropertiesLoader systemPropertyPropertiesLoader = new SystemPropertyPropertiesLoader(); Path configDirectory = systemPropertyPropertiesLoader.getConfigDirectory(); - assertEquals(Paths.get(xplanBoxConfig.toURI()), configDirectory); + assertEquals(xplanBoxConfig, configDirectory); + } + + @Test + void test_withEnvVar_XPLANBOX_CONFIG(@TempDir Path tmpDir, EnvironmentVariables envVars) throws IOException { + envVars.set(CONFIG_SYSTEM_PROPERTY, tmpDir.toAbsolutePath().toString()); + + SystemPropertyPropertiesLoader systemPropertyPropertiesLoader = new SystemPropertyPropertiesLoader(); + Path configDirectory = systemPropertyPropertiesLoader.getConfigDirectory(); + + assertEquals(tmpDir, configDirectory); + } + + @Test + void test_systemPropertyWinsOverEnvVar_XPLANBOX_CONFIG(@TempDir Path tmpDir, SystemProperties systemProperties, + EnvironmentVariables envVars) throws IOException { + + Path dirForSysVar = tmpDir.resolve("subdir2").toAbsolutePath(); + Files.createDirectory(dirForSysVar); + Path dirForEnvProps = tmpDir.resolve("subdir1"); + Files.createDirectory(dirForEnvProps).toAbsolutePath(); + + systemProperties.set(CONFIG_SYSTEM_PROPERTY, dirForSysVar.toString()); + envVars.set(CONFIG_SYSTEM_PROPERTY, dirForEnvProps.toString()); + + SystemPropertyPropertiesLoader systemPropertyPropertiesLoader = new SystemPropertyPropertiesLoader(); + Path configDirectory = systemPropertyPropertiesLoader.getConfigDirectory(); + + assertEquals(configDirectory, dirForSysVar); } @Test diff --git a/xplan-dokumente/xplan-dokumente-api/Dockerfile b/xplan-dokumente/xplan-dokumente-api/Dockerfile index 1a69e8c573..966b8ec81a 100644 --- a/xplan-dokumente/xplan-dokumente-api/Dockerfile +++ b/xplan-dokumente/xplan-dokumente-api/Dockerfile @@ -31,8 +31,9 @@ COPY --from=builder $JMX_EXPORTER_DIR $JMX_EXPORTER_DIR ENV JAVA_ADDITIONAL_ARG_JMX_EXPORTER='-javaagent:$JMX_EXPORTER_DIR/jmx_prometheus_javaagent-0.19.0.jar=12345:$JMX_EXPORTER_DIR/jmx-exporter.config.yaml' # set environment variables -ENV JAVA_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-dokumenten-config/ -Duser.timezone=Europe/Berlin" -ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree +ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree \ + JAVA_ADDITIONAL_ARG_APP="-Duser.timezone=Europe/Berlin" \ + XPLANBOX_CONFIG="/xplanbox/xplan-dokumenten-config/" COPY ${WAR_FILE} /xplanbox/app.war COPY run.sh /xplanbox/ diff --git a/xplan-manager/xplan-manager-api/Dockerfile b/xplan-manager/xplan-manager-api/Dockerfile index 28905fbf08..4b772c2734 100644 --- a/xplan-manager/xplan-manager-api/Dockerfile +++ b/xplan-manager/xplan-manager-api/Dockerfile @@ -20,9 +20,9 @@ LABEL "org.opencontainers.image.created"="$BUILD_DATE" \ "org.opencontainers.image.version"="$XPLANBOX_VERSION" # set environment variables -ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree - -ENV JAVA_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-manager-config/ -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng" +ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree \ + JAVA_ADDITIONAL_ARG_APP="-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng" \ + XPLANBOX_CONFIG="/xplanbox/xplan-manager-config/" COPY ${WAR_FILE} /xplanbox/app.war COPY run.sh /xplanbox/ diff --git a/xplan-manager/xplan-manager-web/Dockerfile b/xplan-manager/xplan-manager-web/Dockerfile index a9c544002b..f28afaa441 100644 --- a/xplan-manager/xplan-manager-web/Dockerfile +++ b/xplan-manager/xplan-manager-web/Dockerfile @@ -20,7 +20,8 @@ LABEL "org.opencontainers.image.created"="$BUILD_DATE" \ "org.opencontainers.image.version"="$XPLANBOX_VERSION" # set environment variables -ENV TOMCAT_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-manager-config/ -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" +ENV TOMCAT_ADDITIONAL_ARG_APP="-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" \ + XPLANBOX_CONFIG="/xplanbox/xplan-manager-config/" # add xplan-manager-web # TODO: add unpacked diff --git a/xplan-validator/xplan-validator-api/Dockerfile b/xplan-validator/xplan-validator-api/Dockerfile index 8006e14dd4..cc335dfd0f 100644 --- a/xplan-validator/xplan-validator-api/Dockerfile +++ b/xplan-validator/xplan-validator-api/Dockerfile @@ -31,8 +31,9 @@ COPY --from=builder $JMX_EXPORTER_DIR $JMX_EXPORTER_DIR ENV JAVA_ADDITIONAL_ARG_JMX_EXPORTER='-javaagent:$JMX_EXPORTER_DIR/jmx_prometheus_javaagent-0.19.0.jar=12345:$JMX_EXPORTER_DIR/jmx-exporter.config.yaml' # set environment variables -ENV JAVA_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-validator-config/ -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" -ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree +ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree \ + JAVA_ADDITIONAL_ARG_APP="-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" \ + XPLANBOX_CONFIG="/xplanbox/xplan-validator-config/" COPY ${WAR_FILE} /xplanbox/app.war COPY run.sh /xplanbox/ diff --git a/xplan-validator/xplan-validator-web/Dockerfile b/xplan-validator/xplan-validator-web/Dockerfile index 344d054cac..f26d9248dc 100644 --- a/xplan-validator/xplan-validator-web/Dockerfile +++ b/xplan-validator/xplan-validator-web/Dockerfile @@ -20,9 +20,10 @@ LABEL "org.opencontainers.image.created"="$BUILD_DATE" \ "org.opencontainers.image.version"="$XPLANBOX_VERSION" # set environment variables -ENV TOMCAT_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-validator-config -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" -ENV TOMCAT_ADDITIONAL_ARG_JAVA17_EXPORTS="--add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED" -ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree +ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree \ + TOMCAT_ADDITIONAL_ARG_APP="-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" \ + TOMCAT_ADDITIONAL_ARG_JAVA17_EXPORTS="--add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED" \ + XPLANBOX_CONFIG="/xplanbox/xplan-validator-config" USER root diff --git a/xplan-webservices/xplan-webservices-validator-wms/Dockerfile b/xplan-webservices/xplan-webservices-validator-wms/Dockerfile index e8a0abb1d1..4bb17175a0 100644 --- a/xplan-webservices/xplan-webservices-validator-wms/Dockerfile +++ b/xplan-webservices/xplan-webservices-validator-wms/Dockerfile @@ -20,9 +20,10 @@ LABEL "org.opencontainers.image.created"="$BUILD_DATE" \ "org.opencontainers.image.version"="$XPLANBOX_VERSION" # set environment variables -ENV TOMCAT_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-validator-config -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" -ENV TOMCAT_ADDITIONAL_ARG_JAVA17_EXPORTS="--add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED" -ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree +ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree \ + TOMCAT_ADDITIONAL_ARG_APP="-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" \ + TOMCAT_ADDITIONAL_ARG_JAVA17_EXPORTS="--add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED" \ + XPLANBOX_CONFIG="/xplanbox/xplan-validator-config" USER root -- GitLab