Return-Path: X-Original-To: apmail-brooklyn-commits-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8F071199AF for ; Tue, 29 Mar 2016 08:38:49 +0000 (UTC) Received: (qmail 5488 invoked by uid 500); 29 Mar 2016 08:38:49 -0000 Delivered-To: apmail-brooklyn-commits-archive@brooklyn.apache.org Received: (qmail 5454 invoked by uid 500); 29 Mar 2016 08:38:49 -0000 Mailing-List: contact commits-help@brooklyn.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.apache.org Delivered-To: mailing list commits@brooklyn.apache.org Received: (qmail 5445 invoked by uid 99); 29 Mar 2016 08:38:49 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 29 Mar 2016 08:38:49 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4C39ADFC74; Tue, 29 Mar 2016 08:38:49 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: svet@apache.org To: commits@brooklyn.apache.org Date: Tue, 29 Mar 2016 08:38:49 -0000 Message-Id: <54b4c52862044ff5af1154a6df435bf5@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/2] brooklyn-server git commit: Windows @ GCE: exec startup script to enable WinRM 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 Authored: Mon Mar 28 23:37:01 2016 +0100 Committer: Aled Sage 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 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 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())); + } } }