diff --git a/CHANGELOG.md b/CHANGELOG.md
index fd73467954..ce76ed2bc3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,10 +20,11 @@ Usage:
# ./scripts/changelog.sh semanticVersionNumber [linkLabelStartNumber]
./scripts/extract-changelog-for-version.sh 1.3.37 5
```
-### 1.0.0-alpha-SNAPSHOT
+### 1.0.0-SNAPSHOT
* Fix #182: Assembly is never null
* Fix #198: Wildfly works in OpenShift with S2I binary build (Docker)
-* Fix : BaseGenerator retrieves runtime mode from context (not from missing properties)
+* Fix #199: BaseGenerator retrieves runtime mode from context (not from missing properties)
+* Fix #201: Webapp-Wildfly supports S2I source builds too (3 modes Docker, OpenShift-Docker, OpenShift-S2I)
### 1.0.0-alpha-3 (2020-05-06)
* Fix #167: Add CMD for wildfly based applications
diff --git a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/FromSelector.java b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/FromSelector.java
index 1343caaec1..427069606a 100644
--- a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/FromSelector.java
+++ b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/FromSelector.java
@@ -32,7 +32,6 @@
* Helper class to encapsulate the selection of a base image
*
* @author roland
- * @since 12/08/16
*/
public abstract class FromSelector {
@@ -117,4 +116,34 @@ protected String getIstagFrom() {
return isRedHat() ? redhatIstag : upstreamIstag;
}
}
+
+ public static final class NoRedHatSupportFromSelector extends FromSelector {
+
+ private final String upstreamDocker;
+ private final String upstreamS2i;
+ private final String upstreamIstag;
+
+ public NoRedHatSupportFromSelector(GeneratorContext context, String prefix) {
+ super(context);
+ DefaultImageLookup lookup = new DefaultImageLookup(NoRedHatSupportFromSelector.class);
+
+ this.upstreamDocker = lookup.getImageName(prefix + ".upstream.docker");
+ this.upstreamS2i = lookup.getImageName(prefix + ".upstream.s2i");
+ this.upstreamIstag = lookup.getImageName(prefix + ".upstream.istag");
+ }
+
+ @Override
+ protected String getDockerBuildFrom() {
+ return upstreamDocker;
+ }
+
+ @Override
+ protected String getS2iBuildFrom() {
+ return upstreamS2i;
+ }
+
+ protected String getIstagFrom() {
+ return upstreamIstag;
+ }
+ }
}
diff --git a/jkube-kit/generator/webapp/pom.xml b/jkube-kit/generator/webapp/pom.xml
index 87dec7cdfa..20c781d0e5 100644
--- a/jkube-kit/generator/webapp/pom.xml
+++ b/jkube-kit/generator/webapp/pom.xml
@@ -38,7 +38,10 @@
junit
junit
-
+
+ org.jmockit
+ jmockit
+
diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java
index 6134e28d3b..635133f9ba 100644
--- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java
+++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java
@@ -15,6 +15,7 @@
import java.util.Collections;
import java.util.List;
+import java.util.Map;
/**
* Interface encapsulating a certain application handler
@@ -71,15 +72,39 @@ public interface AppServerHandler {
*/
List exposedPorts();
+ /**
+ * A Map containing environment variables to add to the Image.
+ *
+ * @return the Map containing environment variables.
+ */
+ default Map getEnv() {
+ return Collections.emptyMap();
+ }
+
+ /**
+ * The name for the assembly configuration (will also be the name of the directory where
+ * artifacts are placed for Dockerfile COPY).
+ *
+ * @return the assembly name.
+ */
+ default String getAssemblyName() {
+ return null;
+ }
+
/**
* A list of commands to run during image build phase.
*
- * @return the list of commands to run
+ * @return the list of commands to run.
*/
default List runCmds() {
return Collections.emptyList();
}
+ /**
+ * If this handler support S2I source builds.
+ *
+ * @return true if the handler supports S2I builds, false otherwise.
+ */
default boolean supportsS2iBuild() {
return false;
}
diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/WebAppGenerator.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/WebAppGenerator.java
index 0e8753ae98..1f74c0e724 100644
--- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/WebAppGenerator.java
+++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/WebAppGenerator.java
@@ -133,6 +133,7 @@ private AppServerHandler createCustomAppServerHandler(String from) {
protected Map getEnv(AppServerHandler handler) {
Map defaultEnv = new HashMap<>();
defaultEnv.put("DEPLOY_DIR", getDeploymentDir(handler));
+ defaultEnv.putAll(handler.getEnv());
return defaultEnv;
}
@@ -144,7 +145,10 @@ private AssemblyConfiguration createAssembly(AppServerHandler handler) {
getProject().getProperties().setProperty("jkube.generator.webapp.path",path);
final AssemblyConfiguration.AssemblyConfigurationBuilder builder = AssemblyConfiguration.builder();
- builder.targetDir(getDeploymentDir(handler)).descriptorRef("webapp");
+ builder
+ .descriptorRef("webapp")
+ .name(handler.getAssemblyName())
+ .targetDir(getDeploymentDir(handler));
String user = getUser(handler);
if (user != null) {
diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java
index 4a7b83e550..3093c57825 100644
--- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java
+++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java
@@ -16,9 +16,12 @@
import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import org.eclipse.jkube.generator.api.FromSelector;
import org.eclipse.jkube.generator.api.GeneratorContext;
import org.eclipse.jkube.kit.common.util.JKubeProjectUtil;
+import org.eclipse.jkube.kit.config.image.build.OpenShiftBuildStrategy;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
/**
@@ -28,10 +31,14 @@
*/
public class WildFlyAppSeverHandler extends AbstractAppServerHandler {
- private static final String PROPERTY_IMAGE_NAME = "wildfly.upstream.docker";
+ private static final String HANDLER_NAME = "wildfly";
+ private static final String PROPERTY_IMAGE_NAME = HANDLER_NAME;
+
+ private final FromSelector fromSelector;
public WildFlyAppSeverHandler(GeneratorContext context) {
- super("wildfly", context);
+ super(HANDLER_NAME, context);
+ this.fromSelector = new FromSelector.NoRedHatSupportFromSelector(context, PROPERTY_IMAGE_NAME);
}
@Override
@@ -63,7 +70,7 @@ private boolean isNotThorntail() {
@Override
public String getFrom() {
- return imageLookup.getImageName(PROPERTY_IMAGE_NAME);
+ return fromSelector.getFrom();
}
@Override
@@ -71,15 +78,28 @@ public List exposedPorts() {
return Collections.singletonList("8080");
}
- @Override
- public String getDeploymentDir() {
- return "/opt/jboss/wildfly/standalone/deployments";
- }
+ @Override
+ public String getDeploymentDir() {
+ // Applicable for Docker image - ignored for s2i
+ return "/opt/jboss/wildfly/standalone/deployments";
+ }
- @Override
- public String getCommand() {
- return "/opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0";
- }
+ @Override
+ public String getCommand() {
+ // Applicable for Docker image - ignored for s2i
+ return "/opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0";
+ }
+
+ @Override
+ public Map getEnv() {
+ // Applicable for s2i image - ignored for Docker
+ return Collections.singletonMap("GALLEON_PROVISION_LAYERS", "cloud-server,web-clustering");
+ }
+
+ @Override
+ public String getAssemblyName() {
+ return "deployments";
+ }
@Override
public String getUser() {
@@ -88,13 +108,18 @@ public String getUser() {
@Override
public List runCmds() {
- // OpenShift runs pods in a restricted security context (SCC) which randomizes the user.
- // Make required runtime directories writeable for all users
- if (generatorContext.getRuntimeMode() == RuntimeMode.openshift) {
+ if (generatorContext.getRuntimeMode() == RuntimeMode.openshift
+ && generatorContext.getStrategy() == OpenShiftBuildStrategy.docker) {
+ // OpenShift runs pods in a restricted security context (SCC) which randomizes the user.
+ // Make required runtime directories writeable for all users
return Collections.singletonList(
- "chmod -R a+rw /opt/jboss/wildfly/standalone/"
- );
+ "chmod -R a+rw /opt/jboss/wildfly/standalone/");
}
return super.runCmds();
}
+
+ @Override
+ public boolean supportsS2iBuild() {
+ return true;
+ }
}
diff --git a/jkube-kit/generator/webapp/src/main/resources-filtered/META-INF/jkube/default-images.properties b/jkube-kit/generator/webapp/src/main/resources-filtered/META-INF/jkube/default-images.properties
index dbd7bf3511..697971dbe0 100644
--- a/jkube-kit/generator/webapp/src/main/resources-filtered/META-INF/jkube/default-images.properties
+++ b/jkube-kit/generator/webapp/src/main/resources-filtered/META-INF/jkube/default-images.properties
@@ -16,4 +16,6 @@
# The images with their versions are set in the parent/pom.xml
tomcat.upstream.docker=${image.tomcat.upstream}
jetty.upstream.docker=${image.jetty.upstream}
-wildfly.upstream.docker=${image.wildfly.upstream}
+wildfly.upstream.docker=${image.wildfly.upstream.docker}
+wildfly.upstream.s2i=${image.wildfly.upstream.s2i}
+wildfly.upstream.istag=${image.wildfly.upstream.istag}
diff --git a/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandlerTest.java b/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandlerTest.java
new file mode 100644
index 0000000000..3280d8d0d6
--- /dev/null
+++ b/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandlerTest.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.generator.webapp.handler;
+
+
+import java.util.Collections;
+
+import org.eclipse.jkube.generator.api.GeneratorContext;
+import org.eclipse.jkube.kit.config.image.build.OpenShiftBuildStrategy;
+import org.eclipse.jkube.kit.config.resource.RuntimeMode;
+
+import mockit.Expectations;
+import mockit.Mocked;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class WildFlyAppSeverHandlerTest {
+
+ @Mocked
+ private GeneratorContext generatorContext;
+
+ @Test
+ public void kubernetes() {
+ // Given
+ // @formatter:off
+ new Expectations() {{
+ generatorContext.getRuntimeMode(); result = RuntimeMode.kubernetes;
+// generatorContext.getStrategy(); result = OpenShiftBuildStrategy.docker;
+ }};
+ // @formatter:on
+ // When
+ final WildFlyAppSeverHandler handler = new WildFlyAppSeverHandler(generatorContext);
+ // Then
+ assertCommonValues(handler);
+ assertEquals("jboss/wildfly:19.0.0.Final", handler.getFrom());
+ assertTrue(handler.runCmds().isEmpty());
+ }
+
+ @Test
+ public void openShiftDockerStrategy() {
+ // Given
+ // @formatter:off
+ new Expectations() {{
+ generatorContext.getRuntimeMode(); result = RuntimeMode.openshift;
+ generatorContext.getStrategy(); result = OpenShiftBuildStrategy.docker;
+ }};
+ // @formatter:on
+ // When
+ final WildFlyAppSeverHandler handler = new WildFlyAppSeverHandler(generatorContext);
+ // Then
+ assertCommonValues(handler);
+ assertEquals("jboss/wildfly:19.0.0.Final", handler.getFrom());
+ assertEquals(Collections.singletonList("chmod -R a+rw /opt/jboss/wildfly/standalone/"), handler.runCmds());
+ }
+
+ @Test
+ public void openShiftSourceStrategy() {
+ // Given
+ // @formatter:off
+ new Expectations() {{
+ generatorContext.getRuntimeMode(); result = RuntimeMode.openshift;
+ generatorContext.getStrategy(); result = OpenShiftBuildStrategy.s2i;
+ }};
+ // @formatter:on
+ // When
+ final WildFlyAppSeverHandler handler = new WildFlyAppSeverHandler(generatorContext);
+ // Then
+ assertCommonValues(handler);
+ assertEquals("quay.io/wildfly/wildfly-centos7:19.0", handler.getFrom());
+ assertTrue(handler.runCmds().isEmpty());
+ }
+
+ private static void assertCommonValues(WildFlyAppSeverHandler handler) {
+ assertTrue(handler.supportsS2iBuild());
+ assertEquals("deployments", handler.getAssemblyName());
+ assertEquals("/opt/jboss/wildfly/standalone/deployments", handler.getDeploymentDir());
+ assertEquals("/opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0", handler.getCommand());
+ assertEquals("jboss:jboss:jboss", handler.getUser());
+ assertEquals(Collections.singletonMap("GALLEON_PROVISION_LAYERS", "cloud-server,web-clustering"), handler.getEnv());
+ assertEquals(Collections.singletonList("8080"), handler.exposedPorts());
+ }
+}
\ No newline at end of file
diff --git a/jkube-kit/parent/pom.xml b/jkube-kit/parent/pom.xml
index c6bde12c85..acc5d8a7a7 100644
--- a/jkube-kit/parent/pom.xml
+++ b/jkube-kit/parent/pom.xml
@@ -98,7 +98,8 @@
1.2.1
1.5.1
- 19.0.0.Final
+ 19.0.0.Final
+ 19.0
fabric8/tomcat-9:${version.image.tomcat.upstream}
fabric8/jetty-9:${version.image.jetty.upstream}
- jboss/wildfly:${version.image.wildfly.upstream}
+ jboss/wildfly:${version.image.wildfly.upstream.docker}
+ quay.io/wildfly/wildfly-centos7:${version.image.wildfly.upstream.s2i}
+ wildfly:${version.image.wildfly.upstream.s2i}
+
diff --git a/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/generator/_webapp.adoc b/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/generator/_webapp.adoc
index affee99a6a..fc0a3cc321 100644
--- a/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/generator/_webapp.adoc
+++ b/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/generator/_webapp.adoc
@@ -16,7 +16,7 @@ The base images chosen are:
| | Docker Build | S2I Build
| *Tomcat*
-| `jkube.tomcat-8`
+| `jkube.tomcat-9`
| ---
| *Jetty*
@@ -25,7 +25,7 @@ The base images chosen are:
| *Wildfly*
| `jboss/wildfly`
-| ---
+| https://github.com/wildfly/wildfly-s2i[`quay.io/wildfly/wildfly-centos7`]
|===
[IMPORTANT]
diff --git a/quickstarts/maven/webapp-wildfly/pom.xml b/quickstarts/maven/webapp-wildfly/pom.xml
index 7c2dd8e844..fec872c449 100644
--- a/quickstarts/maven/webapp-wildfly/pom.xml
+++ b/quickstarts/maven/webapp-wildfly/pom.xml
@@ -24,7 +24,6 @@
war
- docker
${project.version}
1.8
1.8