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 <[email protected]> Authored: Mon Mar 28 23:37:01 2016 +0100 Committer: Aled Sage <[email protected]> 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())); + } } }
