brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject [1/2] brooklyn-server git commit: Windows @ GCE: exec startup script to enable WinRM
Date Tue, 29 Mar 2016 08:38:49 GMT
Repository: brooklyn-server
Updated Branches:
  refs/heads/master 85770a0d6 -> e171d1b41


Windows @ GCE: exec startup script to enable WinRM

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

Branch: refs/heads/master
Commit: c56f713a3566b7e5f64f0e0ee9c0d1b612d46774
Parents: 660ebbb
Author: Aled Sage <aled.sage@gmail.com>
Authored: Mon Mar 28 23:37:01 2016 +0100
Committer: Aled Sage <aled.sage@gmail.com>
Committed: Mon Mar 28 23:37:01 2016 +0100

----------------------------------------------------------------------
 .../location/jclouds/JcloudsLocation.java       | 39 +++++++++++++++++++-
 1 file changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c56f713a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index aebd778..83addb3 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -1536,10 +1536,45 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation
im
         }
         TemplateOptions options = template.getOptions();
 
+        // For windows, we need a startup-script to be executed that will enable winrm access.
+        // If there is already conflicting userMetadata, then don't replace it (and just
warn).
+        // TODO this injection is hacky and (currently) cloud specific.
         boolean windows = isWindows(template, config);
         if (windows) {
-            if (!(config.containsKey(JcloudsLocationConfig.USER_METADATA_STRING) || config.containsKey(JcloudsLocationConfig.USER_METADATA_MAP)))
{
-                config.put(JcloudsLocationConfig.USER_METADATA_STRING, WinRmMachineLocation.getDefaultUserMetadataString(config()));
+            String initScript = WinRmMachineLocation.getDefaultUserMetadataString(config());
+            String provider = getProvider();
+            if ("google-compute-engine".equals(provider)) {
+                // see https://cloud.google.com/compute/docs/startupscript:
+                // Set "sysprep-specialize-script-cmd" in metadata.
+                String startupScriptKey = "sysprep-specialize-script-cmd";
+                Object metadataMapRaw = config.get(USER_METADATA_MAP);
+                if (metadataMapRaw instanceof Map) {
+                    Map<?,?> metadataMap = (Map<?, ?>) metadataMapRaw;
+                    if (metadataMap.containsKey(startupScriptKey)) {
+                        LOG.warn("Not adding startup-script for Windows VM on "+provider+",
because already has key "+startupScriptKey+" in config "+USER_METADATA_MAP.getName());
+                    } else {
+                        Map<Object, Object> metadataMapReplacement = MutableMap.copyOf(metadataMap);
+                        metadataMapReplacement.put(startupScriptKey, initScript);
+                        config.put(USER_METADATA_MAP, metadataMapReplacement);
+                        LOG.debug("Adding startup-script to enable WinRM for Windows VM on
"+provider);
+                    }
+                } else if (metadataMapRaw == null) {
+                    Map<String, String> metadataMapReplacement = MutableMap.of(startupScriptKey,
initScript);
+                    config.put(USER_METADATA_MAP, metadataMapReplacement);
+                    LOG.debug("Adding startup-script to enable WinRM for Windows VM on "+provider);
+                }
+            } else {
+                // For AWS and vCloudDirector, we just set user_metadata_string.
+                // For Azure-classic, there is no capability to execute a startup script.
+                boolean userMetadataString = config.containsKey(JcloudsLocationConfig.USER_METADATA_STRING);
+                boolean userMetadataMap = config.containsKey(JcloudsLocationConfig.USER_METADATA_MAP);
+                if (!(userMetadataString || userMetadataMap)) {
+                    config.put(JcloudsLocationConfig.USER_METADATA_STRING, WinRmMachineLocation.getDefaultUserMetadataString(config()));
+                    LOG.debug("Adding startup-script to enable WinRM for Windows VM on "+provider);
+                } else {
+                    LOG.warn("Not adding startup-script for Windows VM on "+provider+", because
already has config "
+                            +(userMetadataString ? USER_METADATA_STRING.getName() : USER_METADATA_MAP.getName()));
+                }
             }
         }
                


Mime
View raw message