Repository: incubator-brooklyn Updated Branches: refs/heads/master 671f99e6b -> 65bc06adc
Adds pre and post launch command config keys to SoftwareProcess Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/74bf465c Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/74bf465c Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/74bf465c Branch: refs/heads/master Commit: 74bf465c255277e5008005c7d9aad3cbb7e0f948 Parents: 9ca8250 Author: Martin Harris <[email protected]> Authored: Wed Jul 2 15:20:13 2014 +0100 Committer: Martin Harris <[email protected]> Committed: Wed Jul 2 15:20:13 2014 +0100 ---------------------------------------------------------------------- .../brooklyn/entity/basic/BrooklynConfigKeys.java | 13 +++++++++++-- .../entity/basic/AbstractSoftwareProcessDriver.java | 16 ++++++++++++++++ .../basic/AbstractSoftwareProcessSshDriver.java | 10 ++++++++++ .../java/brooklyn/entity/basic/SoftwareProcess.java | 6 ++++++ 4 files changed, 43 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/74bf465c/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java b/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java index 90e52ee..3c75335 100644 --- a/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java +++ b/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java @@ -1,13 +1,15 @@ package brooklyn.entity.basic; -import static brooklyn.entity.basic.ConfigKeys.*; +import static brooklyn.entity.basic.ConfigKeys.newBooleanConfigKey; +import static brooklyn.entity.basic.ConfigKeys.newConfigKey; +import static brooklyn.entity.basic.ConfigKeys.newConfigKeyWithPrefix; +import static brooklyn.entity.basic.ConfigKeys.newStringConfigKey; import brooklyn.config.BrooklynServerConfig; import brooklyn.config.ConfigKey; import brooklyn.event.basic.BasicAttributeSensorAndConfigKey; import brooklyn.event.basic.TemplatedStringAttributeSensorAndConfigKey; import brooklyn.util.internal.ssh.ShellTool; import brooklyn.util.internal.ssh.SshTool; -import brooklyn.util.os.Os; import brooklyn.util.time.Duration; import com.google.common.base.Preconditions; @@ -38,6 +40,13 @@ public class BrooklynConfigKeys { "Provides a label which uniquely identifies an installation, used in the computation of the install dir; " + "this should include something readable, and must include a hash of all data which differentiates an installation " + "(e.g. version, plugins, etc), but should be the same where install dirs can be shared to allow for re-use"); + + public static final ConfigKey<String> PRE_LAUNCH_COMMAND = ConfigKeys.newStringConfigKey("pre.launch.command", + "Command to be run prior to the launch method being called on the driver"); + + public static final ConfigKey<String> POST_LAUNCH_COMMAND = ConfigKeys.newStringConfigKey("post.launch.command", + "Command to be run after the launch method being called on the driver. The implementation in AbstractSoftwareSshDriver " + + "runs this comamnd as an SSH command"); public static final BasicAttributeSensorAndConfigKey<String> INSTALL_DIR = new TemplatedStringAttributeSensorAndConfigKey("install.dir", "Directory for this software to be installed in", "${" http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/74bf465c/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java index 08b85e8..f1a2397 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java +++ b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessDriver.java @@ -17,6 +17,7 @@ import brooklyn.util.task.Tasks; import brooklyn.util.text.TemplateProcessor; import com.google.common.annotations.Beta; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; /** @@ -69,10 +70,22 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr customize(); }}); + if (!Strings.isNullOrEmpty(entity.getConfig(BrooklynConfigKeys.PRE_LAUNCH_COMMAND))) { + DynamicTasks.queue("pre-launch command", new Runnable() { public void run() { + runPreLaunchCommand(entity.getConfig(BrooklynConfigKeys.PRE_LAUNCH_COMMAND)); + }}); + }; + DynamicTasks.queue("launch", new Runnable() { public void run() { waitForConfigKey(BrooklynConfigKeys.LAUNCH_LATCH); launch(); }}); + + if (!Strings.isNullOrEmpty(entity.getConfig(BrooklynConfigKeys.POST_LAUNCH_COMMAND))) { + DynamicTasks.queue("post-launch command", new Runnable() { public void run() { + runPostLaunchCommand(entity.getConfig(BrooklynConfigKeys.POST_LAUNCH_COMMAND)); + }}); + }; DynamicTasks.queue("post-launch", new Runnable() { public void run() { postLaunch(); @@ -84,7 +97,10 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr public abstract void install(); public abstract void customize(); + public abstract void runPreLaunchCommand(String command); public abstract void launch(); + public abstract void runPostLaunchCommand(String command); + @Override public void kill() { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/74bf465c/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java index 9a41f2c..35738a3 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java +++ b/software/base/src/main/java/brooklyn/entity/basic/AbstractSoftwareProcessSshDriver.java @@ -261,6 +261,16 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP if (!flags.containsKey("logPrefix")) flags.put("logPrefix", ""+entity.getId()+"@"+getLocation().getDisplayName()); return getMachine().execScript(flags, summaryForLogging, script, environment); } + + @Override + public void runPreLaunchCommand(String command) { + execute(ImmutableList.of(command), "running pre-launch commands"); + } + + @Override + public void runPostLaunchCommand(String command) { + execute(ImmutableList.of(command), "running post-launch commands"); + } /** * The environment variables to be set when executing the commands (for install, run, check running, etc). http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/74bf465c/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java index 7e60822..4b0568c 100644 --- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java +++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcess.java @@ -33,6 +33,12 @@ public interface SoftwareProcess extends Entity, Startable { @SetFromFlag("customizeLatch") public static final ConfigKey<Boolean> CUSTOMIZE_LATCH = BrooklynConfigKeys.CUSTOMIZE_LATCH; + + @SetFromFlag("preLaunchCommand") + public static final ConfigKey<String> PRE_LAUNCH_COMMAND = BrooklynConfigKeys.PRE_LAUNCH_COMMAND; + + @SetFromFlag("postLaunchCommand") + public static final ConfigKey<String> POST_LAUNCH_COMMAND = BrooklynConfigKeys.POST_LAUNCH_COMMAND; @SetFromFlag("launchLatch") public static final ConfigKey<Boolean> LAUNCH_LATCH = BrooklynConfigKeys.LAUNCH_LATCH;
