Repository: incubator-brooklyn Updated Branches: refs/heads/master 324bb38be -> 08995e068
accept `-D...` options as part of `launch`, treat them as system properties as if passed as a JVM arg, similar to how maven does it Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a20f85b7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a20f85b7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a20f85b7 Branch: refs/heads/master Commit: a20f85b7f07a40048f296edcd06db7dae04217b1 Parents: 324bb38 Author: Alex Heneveld <[email protected]> Authored: Sun Sep 20 17:15:30 2015 +0100 Committer: Alex Heneveld <[email protected]> Committed: Sun Sep 20 17:43:37 2015 -0500 ---------------------------------------------------------------------- .../org/apache/brooklyn/cli/AbstractMain.java | 37 ++++++++++++++++++-- .../main/java/org/apache/brooklyn/cli/Main.java | 4 ++- .../java/org/apache/brooklyn/cli/CliTest.java | 34 ++++++++++++++++-- 3 files changed, 68 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a20f85b7/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java ---------------------------------------------------------------------- diff --git a/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java b/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java index b55111c..619768e 100644 --- a/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java +++ b/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java @@ -33,19 +33,22 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.concurrent.Callable; import javax.inject.Inject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.brooklyn.api.catalog.BrooklynCatalog; import org.apache.brooklyn.cli.Main.LaunchCommand; import org.apache.brooklyn.core.BrooklynVersion; +import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.exceptions.FatalConfigurationRuntimeException; import org.apache.brooklyn.util.exceptions.FatalRuntimeException; import org.apache.brooklyn.util.exceptions.UserFacingException; +import org.apache.brooklyn.util.text.KeyValueParser; import org.apache.brooklyn.util.text.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Objects; @@ -117,7 +120,7 @@ public abstract class AbstractMain { .add("verbose", verbose) .add("quiet", quiet); } - + @Override public String toString() { return string().toString(); @@ -150,6 +153,34 @@ public abstract class AbstractMain { .add("arguments", arguments); } } + + /** superclass which reads `-D` system property definitions and applies them + * <p> + * useful when scripting, e.g. where brooklyn.sh encodes `java o.a.b.Main "$@"` + * but we want the caller to be able to pass system properties + */ + public static abstract class BrooklynCommandWithSystemDefines extends BrooklynCommandCollectingArgs { + @Option(type = OptionType.GLOBAL, name = { "-D" }, description = "Set java system property") + public List<String> defines1; + + @Option(name = { "-D" }, description = "Set java system property") + public List<String> defines2; + + public List<String> getDefines() { return MutableList.copyOf(defines1).appendAll(defines2); } + public Map<String,String> getDefinesAsMap() { return KeyValueParser.parseMap(Strings.join(getDefines(),",")); } + public void applyDefinesAsSystemProperties() { System.getProperties().putAll(getDefinesAsMap()); } + + public ToStringHelper string() { + return super.string() + .add("defines", getDefines()); + } + + @Override + public Void call() throws Exception { + applyDefinesAsSystemProperties(); + return null; + } + } @Command(name = "help", description = "Display help for available commands") public static class HelpCommand extends BrooklynCommand { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a20f85b7/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java ---------------------------------------------------------------------- diff --git a/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java b/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java index b546d7b..1c66a04 100644 --- a/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java +++ b/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java @@ -194,7 +194,7 @@ public class Main extends AbstractMain { } @Command(name = "launch", description = "Starts a server, optionally with applications") - public static class LaunchCommand extends BrooklynCommandCollectingArgs { + public static class LaunchCommand extends BrooklynCommandWithSystemDefines { @Option(name = { "--localBrooklynProperties" }, title = "local brooklyn.properties file", description = "Load the given properties file, specific to this launch (appending to and overriding global properties)") @@ -381,6 +381,8 @@ public class Main extends AbstractMain { @Override public Void call() throws Exception { + super.call(); + // Configure launcher BrooklynLauncher launcher; AppShutdownHandler shutdownHandler = new AppShutdownHandler(); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a20f85b7/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java ---------------------------------------------------------------------- diff --git a/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java b/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java index 01ec00f..c3d9eb6 100644 --- a/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java +++ b/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java @@ -47,6 +47,7 @@ import org.apache.brooklyn.api.entity.ImplementedBy; import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.cli.AbstractMain.BrooklynCommand; import org.apache.brooklyn.cli.AbstractMain.BrooklynCommandCollectingArgs; +import org.apache.brooklyn.cli.AbstractMain.DefaultInfoCommand; import org.apache.brooklyn.cli.AbstractMain.HelpCommand; import org.apache.brooklyn.cli.Main.AppShutdownHandler; import org.apache.brooklyn.cli.Main.GeneratePasswordCommand; @@ -300,12 +301,39 @@ public class CliTest { cli.parse("launch", "blah", "my.App"); } + @Test public void testHelpCommand() { Cli<BrooklynCommand> cli = buildCli(); BrooklynCommand command = cli.parse("help"); - assertTrue(command instanceof HelpCommand); - command = cli.parse(); - assertTrue(command instanceof HelpCommand); + assertTrue(command instanceof HelpCommand, "Command is: "+command); + } + + @Test + public void testDefaultInfoCommand() { + Cli<BrooklynCommand> cli = buildCli(); + BrooklynCommand command = cli.parse(""); + assertTrue(command instanceof DefaultInfoCommand, "Command is: "+command); + } + + @Test + public void testCliSystemPropertyDefines() { + Cli<BrooklynCommand> cli = buildCli(); + BrooklynCommand command0 = cli.parse( + "-Dorg.apache.brooklyn.cli.CliTest.sample1=foo", + "-Dorg.apache.brooklyn.cli.CliTest.sample2=bar", + "launch", + "-Dorg.apache.brooklyn.cli.CliTest.sample3=baz" + ); + assertTrue(command0 instanceof LaunchCommand); + LaunchCommand command = (LaunchCommand) command0; + assertEquals(command.getDefines().size(), 3, + "Command is: "+command); + assertTrue(command.getDefines().get(0).equals("org.apache.brooklyn.cli.CliTest.sample1=foo"), + "Command is: "+command); + assertTrue(command.getDefines().get(2).equals("org.apache.brooklyn.cli.CliTest.sample3=baz"), + "Command is: "+command); + assertEquals(command.getDefinesAsMap().get("org.apache.brooklyn.cli.CliTest.sample3"), "baz", + "Command is: "+command); } @Test
