Support multiple setup scripts in location config

New "setup.scripts" config which accepts an array of scripts to execute on the 
node.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/ab9a9215
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/ab9a9215
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/ab9a9215

Branch: refs/heads/master
Commit: ab9a92152430cec9804d7041f9796ad42594c00d
Parents: d0cbcf3
Author: Svetoslav Neykov <[email protected]>
Authored: Wed May 13 21:52:58 2015 +0300
Committer: Svetoslav Neykov <[email protected]>
Committed: Wed May 13 21:52:58 2015 +0300

----------------------------------------------------------------------
 .../location/jclouds/JcloudsLocation.java       | 24 ++++++++++++--------
 .../location/jclouds/JcloudsLocationConfig.java |  3 +++
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab9a9215/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git 
a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
 
b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
index d0c52d8..7aa85b6 100644
--- 
a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
+++ 
b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
@@ -709,16 +709,20 @@ public class JcloudsLocation extends 
AbstractCloudMachineProvisioningLocation im
             if (waitForSshable) {
 
                 String setupScript = 
setup.get(JcloudsLocationConfig.CUSTOM_MACHINE_SETUP_SCRIPT_URL);
-                if (Strings.isNonBlank(setupScript)) {
-                    customisationForLogging.add("custom setup script 
"+setupScript);
-
-                    String setupVarsString = 
setup.get(JcloudsLocationConfig.CUSTOM_MACHINE_SETUP_SCRIPT_VARS);
-                    Map<String, String> substitutions = (setupVarsString != 
null)
-                            ? 
Splitter.on(",").withKeyValueSeparator(":").split(setupVarsString)
-                            : ImmutableMap.<String, String>of();
-                    String scriptContent =  
ResourceUtils.create(this).getResourceAsString(setupScript);
-                    String script = 
TemplateProcessor.processTemplateContents(scriptContent, 
getManagementContext(), substitutions);
-                    sshMachineLocation.execCommands("Customizing node " + 
this, ImmutableList.of(script));
+                List<String> setupScripts = 
setup.get(JcloudsLocationConfig.CUSTOM_MACHINE_SETUP_SCRIPT_URL_LIST);
+                Collection<String> allScripts = new 
MutableList<String>().appendIfNotNull(setupScript).appendAll(setupScripts);
+                for (String setupScriptItem : allScripts) {
+                    if (Strings.isNonBlank(setupScriptItem)) {
+                        customisationForLogging.add("custom setup script 
"+setupScriptItem);
+
+                        String setupVarsString = 
setup.get(JcloudsLocationConfig.CUSTOM_MACHINE_SETUP_SCRIPT_VARS);
+                        Map<String, String> substitutions = (setupVarsString 
!= null)
+                                ? 
Splitter.on(",").withKeyValueSeparator(":").split(setupVarsString)
+                                : ImmutableMap.<String, String>of();
+                        String scriptContent =  
ResourceUtils.create(this).getResourceAsString(setupScriptItem);
+                        String script = 
TemplateProcessor.processTemplateContents(scriptContent, 
getManagementContext(), substitutions);
+                        sshMachineLocation.execCommands("Customizing node " + 
this + " with script " + setupScriptItem, ImmutableList.of(script));
+                    }
                 }
 
                 if 
(setup.get(JcloudsLocationConfig.MAP_DEV_RANDOM_TO_DEV_URANDOM)) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab9a9215/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
----------------------------------------------------------------------
diff --git 
a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
 
b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
index b7b61a7..15ffcfc 100644
--- 
a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
+++ 
b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
@@ -199,6 +199,9 @@ public interface JcloudsLocationConfig extends 
CloudLocationConfig {
     public static final ConfigKey<String> CUSTOM_MACHINE_SETUP_SCRIPT_URL = 
ConfigKeys.newStringConfigKey(
             "setup.script", "Custom script to customize a node");
     
+    public static final ConfigKey<List<String>> 
CUSTOM_MACHINE_SETUP_SCRIPT_URL_LIST = ConfigKeys.newConfigKey(new 
TypeToken<List<String>>() {},
+            "setup.scripts", "A list of scripts to customize a node");
+    
     public static final ConfigKey<String> CUSTOM_MACHINE_SETUP_SCRIPT_VARS = 
ConfigKeys.newStringConfigKey(
             "setup.script.vars", "vars to customize a setup.script i.e.: 
key1:value1,key2:value2");
     

Reply via email to