diff --git a/gradle-plugin/it/src/it/extension-configuration/build.gradle b/gradle-plugin/it/src/it/extension-configuration/build.gradle index 7f562c2631..4d328af017 100644 --- a/gradle-plugin/it/src/it/extension-configuration/build.gradle +++ b/gradle-plugin/it/src/it/extension-configuration/build.gradle @@ -46,6 +46,16 @@ kubernetes { pushRegistry = 'quay.io' pushRetries = 5 kubernetesTemplate = file('build/META-INF/jkube/kubernetes') + watchMode = 'copy' + watchInterval = 1000 + watchKeepRunning = true + watchPostExec = 'ls -lt' + watchAutoCreateCustomNetworks = true + watchKeepContainer = true + watchRemoveVolumes = true + watchContainerNamePattern = '%g-%l' + watchFollow = true + watchShowLogs = 'true' access { namespace = 'default' } @@ -56,6 +66,14 @@ kubernetes { includes = ['openliberty', 'spring-boot'] excludes = ['webapp'] } + watcher { + includes = ['spring-boot'] + config { + 'spring-boot' { + serviceUrlWaitTimeSeconds = 10 + } + } + } resources { controllerName = 'test' configMap { diff --git a/gradle-plugin/it/src/it/extension-configuration/expected/expected-config.yml b/gradle-plugin/it/src/it/extension-configuration/expected/expected-config.yml index 8a01e422d1..532ec47db0 100644 --- a/gradle-plugin/it/src/it/extension-configuration/expected/expected-config.yml +++ b/gradle-plugin/it/src/it/extension-configuration/expected/expected-config.yml @@ -31,6 +31,16 @@ skipresource: true pushregistry: quay.io pushretries: 5 kubernetestemplate: "@endsWith('extension-configuration/build/META-INF/jkube/kubernetes')@" +watchMode: "copy" +watchinterval: 1000 +watchkeeprunning: true +watchpostexec: "ls -lt" +watchautocreatecustomnetworks: true +watchkeepcontainer: true +watchremovevolumes: true +watchcontainernamepattern: "%g-%l" +watchfollow: true +watchshowlogs: "true" access: namespace: "default" enricher: @@ -42,6 +52,12 @@ generator: - "spring-boot" excludes: - "webapp" +watcher: + includes: + - "spring-boot" + config: + spring-boot: + serviceUrlWaitTimeSeconds: 10 resources: controllerName: "test" configMap: diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java index 64c642e31e..93594d8985 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java @@ -24,6 +24,7 @@ import java.util.stream.Collectors; import org.eclipse.jkube.kit.build.service.docker.config.DockerMachineConfiguration; +import org.eclipse.jkube.kit.build.service.docker.helper.ContainerNamingUtil; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; @@ -31,6 +32,7 @@ import org.eclipse.jkube.kit.common.util.ResourceClassifier; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; +import org.eclipse.jkube.kit.config.image.WatchMode; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.eclipse.jkube.kit.config.image.build.RegistryAuthConfiguration; import org.eclipse.jkube.kit.config.resource.MappingConfig; @@ -233,6 +235,26 @@ public abstract class KubernetesExtension { public abstract Property getSkipBuild(); + public abstract Property getWatchKeepRunning(); + + public abstract Property getWatchInterval(); + + public abstract Property getWatchPostExec(); + + public abstract Property getWatchAutoCreateCustomNetworks(); + + public abstract Property getWatchKeepContainer(); + + public abstract Property getWatchRemoveVolumes(); + + public abstract Property getWatchFollow(); + + public abstract Property getWatchShowLogs(); + + public abstract Property getWatchContainerNamePattern(); + + public WatchMode watchMode; + public JKubeBuildStrategy buildStrategy; public ClusterConfiguration access; @@ -243,6 +265,8 @@ public abstract class KubernetesExtension { public ProcessorConfig generator; + public ProcessorConfig watcher; + public List images; public DockerMachineConfiguration machine; @@ -295,6 +319,10 @@ public void generator(Closure closure) { generator = closureTo(closure, ProcessorConfig.class); } + public void watcher(Closure closure) { + watcher = closureTo(closure, ProcessorConfig.class); + } + /** * Provide support for image configurations as: * @@ -384,6 +412,11 @@ public JKubeBuildStrategy getBuildStrategyOrDefault() { .orElse(buildStrategy != null ? buildStrategy : JKubeBuildStrategy.docker); } + public WatchMode getWatchModeOrDefault() { + return getProperty("jkube.watch.mode", WatchMode::valueOf) + .orElse(watchMode != null ? watchMode : WatchMode.both); + } + public boolean getOfflineOrDefault() { return getOrDefaultBoolean("jkube.offline", this::getOffline, DEFAULT_OFFLINE); } @@ -613,6 +646,42 @@ public boolean getSkipBuildOrDefault() { return getOrDefaultBoolean("jkube.skip.build", this::getSkipBuild, false); } + public Integer getWatchIntervalOrDefault() { + return getOrDefaultInteger("jkube.watch.interval", this::getWatchInterval, 5000); + } + + public boolean getWatchKeepRunningOrDefault() { + return getOrDefaultBoolean("jkube.watch.keepRunning", this::getWatchKeepRunning, false); + } + + public String getWatchPostExecOrNull() { + return getOrDefaultString("jkube.watch.postExec", this::getWatchPostExec, null); + } + + public boolean getWatchAutoCreateCustomNetworksOrDefault() { + return getOrDefaultBoolean("jkube.watch.autoCreateCustomNetworks", this::getWatchAutoCreateCustomNetworks, false); + } + + public boolean getWatchKeepContainerOrDefault() { + return getOrDefaultBoolean("jkube.watch.keepContainer", this::getWatchKeepContainer, false); + } + + public boolean getWatchRemoveVolumesOrDefault() { + return getOrDefaultBoolean("jkube.watch.removeVolumes", this::getWatchRemoveVolumes, false); + } + + public String getWatchContainerNamePatternOrDefault() { + return getOrDefaultString("jkube.watch.containerNamePattern", this::getWatchContainerNamePattern, ContainerNamingUtil.DEFAULT_CONTAINER_NAME_PATTERN); + } + + public boolean getWatchFollowOrDefault() { + return getOrDefaultBoolean("jkube.watch.follow", this::getWatchFollow, false); + } + + public String getWatchShowLogsOrNull() { + return getOrDefaultString("jkube.watch.showLogs", this::getWatchShowLogs, null); + } + protected boolean getOrDefaultBoolean(String property, Supplier> dslGetter, boolean defaultValue) { return getOrDefault(property, Boolean::parseBoolean, dslGetter, defaultValue); } diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/KubernetesExtensionPropertyTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/KubernetesExtensionPropertyTest.java index 0c2b2dfbfc..4db2a33a2c 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/KubernetesExtensionPropertyTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/KubernetesExtensionPropertyTest.java @@ -18,9 +18,11 @@ import java.util.Arrays; import java.util.Collection; +import org.eclipse.jkube.kit.build.service.docker.helper.ContainerNamingUtil; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.config.image.WatchMode; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.junit.Before; import org.junit.Test; @@ -125,7 +127,17 @@ public static Collection data() { Paths.get("META-INF", "jkube", "other").toString(), Paths.get("META-INF", "jkube", "other").toFile(), new File(BASE, "build").toPath().resolve(Paths.get("META-INF", "jkube", "kubernetes")).toFile() - }); + }, + new Object[] { "getWatchModeOrDefault", "jkube.watch.mode", "copy", WatchMode.copy, WatchMode.both}, + new Object[] { "getWatchIntervalOrDefault", "jkube.watch.interval", "10000", 10000, 5000}, + new Object[] { "getWatchKeepRunningOrDefault", "jkube.watch.keepRunning", "true", true, false}, + new Object[] { "getWatchPostExecOrNull", "jkube.watch.postExec", "ls -lt", "ls -lt", null}, + new Object[] { "getWatchAutoCreateCustomNetworksOrDefault", "jkube.watch.autoCreateCustomNetworks", "true", true, false}, + new Object[] { "getWatchKeepContainerOrDefault", "jkube.watch.keepContainer", "true", true, false}, + new Object[] { "getWatchRemoveVolumesOrDefault", "jkube.watch.removeVolumes", "true", true, false}, + new Object[] { "getWatchContainerNamePatternOrDefault", "jkube.watch.containerNamePattern", "%n-%g", "%n-%g", ContainerNamingUtil.DEFAULT_CONTAINER_NAME_PATTERN}, + new Object[] { "getWatchFollowOrDefault", "jkube.watch.follow", "true", true, false}, + new Object[] { "getWatchShowLogsOrNull", "jkube.watch.showLogs", "true", "true", null}); } @Parameterized.Parameter diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java index e874d6662f..ebf21ac23f 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java @@ -327,8 +327,53 @@ public Property getSkipResource() { return new DefaultProperty<>(Boolean.class); } + @Override + public Property getWatchKeepRunning() { + return new DefaultProperty<>(Boolean.class); + } + @Override public Property getSkipBuild() { return new DefaultProperty<>(Boolean.class); } + + @Override + public Property getWatchInterval() { + return new DefaultProperty<>(Integer.class); + } + + @Override + public Property getWatchPostExec() { + return new DefaultProperty<>(String.class); + } + + @Override + public Property getWatchAutoCreateCustomNetworks() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchKeepContainer() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchRemoveVolumes() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchFollow() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchShowLogs() { + return new DefaultProperty<>(String.class); + } + + @Override + public Property getWatchContainerNamePattern() { + return new DefaultProperty<>(String.class); + } } diff --git a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java index af54a73f02..1eeae7f887 100644 --- a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java +++ b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java @@ -354,8 +354,53 @@ public Property getSkipResource() { return new DefaultProperty<>(Boolean.class); } + @Override + public Property getWatchKeepRunning() { + return new DefaultProperty<>(Boolean.class); + } + @Override public Property getSkipBuild() { return new DefaultProperty<>(Boolean.class); } + + @Override + public Property getWatchInterval() { + return new DefaultProperty<>(Integer.class); + } + + @Override + public Property getWatchPostExec() { + return new DefaultProperty<>(String.class); + } + + @Override + public Property getWatchAutoCreateCustomNetworks() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchKeepContainer() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchRemoveVolumes() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchFollow() { + return new DefaultProperty<>(Boolean.class); + } + + @Override + public Property getWatchShowLogs() { + return new DefaultProperty<>(String.class); + } + + @Override + public Property getWatchContainerNamePattern() { + return new DefaultProperty<>(String.class); + } }