You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/09/29 12:04:13 UTC

[3/5] jclouds-labs git commit: Fix AzureTemplateBuilderLiveTest

Fix AzureTemplateBuilderLiveTest

- remove default creds for all images


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/d48537fd
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/d48537fd
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/d48537fd

Branch: refs/heads/fix/AzureTemplateBuilderLiveTest
Commit: d48537fda1bee602ecb263088f8332dd88f2e31b
Parents: 4e39720
Author: Andrea Turli <an...@gmail.com>
Authored: Wed Sep 28 18:20:26 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Sep 29 13:05:34 2016 +0200

----------------------------------------------------------------------
 azurecompute-arm/pom.xml                        |  7 +--
 .../arm/AzureComputeProviderMetadata.java       | 38 ++++++-------
 .../arm/compute/AzureComputeServiceAdapter.java | 36 ++++--------
 .../AzureComputeServiceContextModule.java       | 16 +-----
 .../functions/DeploymentToNodeMetadata.java     | 35 +++---------
 .../arm/compute/functions/VMImageToImage.java   | 30 +++-------
 ...DefaultLoginCredentialsForImageStrategy.java | 43 --------------
 .../arm/util/DeploymentTemplateBuilder.java     | 60 +++++---------------
 8 files changed, 61 insertions(+), 204 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/pom.xml
----------------------------------------------------------------------
diff --git a/azurecompute-arm/pom.xml b/azurecompute-arm/pom.xml
index df5b835..824e552 100644
--- a/azurecompute-arm/pom.xml
+++ b/azurecompute-arm/pom.xml
@@ -46,7 +46,7 @@
     <dependency>
       <groupId>org.apache.jclouds</groupId>
       <artifactId>jclouds-compute</artifactId>
-      <version>${project.parent.version}</version>
+      <version>${project.version}</version>
     </dependency>
     <dependency>
       <groupId>com.google.auto.service</groupId>
@@ -80,11 +80,6 @@
       <groupId>org.apache.jclouds</groupId>
       <artifactId>jclouds-compute</artifactId>
       <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-compute</artifactId>
-      <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
     </dependency>

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index 460df67..98c212f 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -17,34 +17,31 @@
 package org.jclouds.azurecompute.arm;
 
 
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_TIMEOUT;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_INITIAL_PERIOD;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_MAX_PERIOD;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_FORMAT;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_REGEXP;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
-
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_IMAGE_LOGIN;
-
-import static org.jclouds.oauth.v2.config.CredentialType.CLIENT_CREDENTIALS_SECRET;
-import static org.jclouds.oauth.v2.config.OAuthProperties.RESOURCE;
-import static org.jclouds.oauth.v2.config.OAuthProperties.CREDENTIAL_TYPE;
-
 import java.net.URI;
 import java.util.Properties;
+
 import org.jclouds.azurecompute.arm.domain.Region;
+import org.jclouds.compute.config.ComputeServiceProperties;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.providers.internal.BaseProviderMetadata;
-import org.jclouds.compute.config.ComputeServiceProperties;
-
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
 
 import com.google.auto.service.AutoService;
 
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_INITIAL_PERIOD;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_MAX_PERIOD;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_TIMEOUT;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_FORMAT;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_REGEXP;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
+import static org.jclouds.oauth.v2.config.CredentialType.CLIENT_CREDENTIALS_SECRET;
+import static org.jclouds.oauth.v2.config.OAuthProperties.CREDENTIAL_TYPE;
+import static org.jclouds.oauth.v2.config.OAuthProperties.RESOURCE;
+
 @AutoService(ProviderMetadata.class)
 public class AzureComputeProviderMetadata extends BaseProviderMetadata {
 
@@ -77,7 +74,6 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata {
       properties.put(DEFAULT_SUBNET_ADDRESS_PREFIX, "10.0.0.0/24");
       properties.put(DEFAULT_DATADISKSIZE, "100");
       properties.put(IMAGE_PUBLISHERS, "Canonical,RedHat");
-      properties.put(DEFAULT_IMAGE_LOGIN, "jclouds:Password1!");
       properties.put(TIMEOUT_NODE_TERMINATED, 60 * 10 * 1000);
       return properties;
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
index 61807a9..11a9257 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
@@ -16,11 +16,6 @@
  */
 package org.jclouds.azurecompute.arm.compute;
 
-import static com.google.common.base.Preconditions.checkState;
-import static java.lang.String.format;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jclouds.util.Predicates2.retry;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
@@ -57,7 +52,6 @@ import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
 import org.jclouds.compute.ComputeServiceAdapter;
 import org.jclouds.compute.domain.Template;
 import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.domain.LoginCredentials;
 import org.jclouds.location.Region;
 import org.jclouds.logging.Logger;
 
@@ -73,6 +67,11 @@ import com.google.common.collect.Multimap;
 import com.google.common.collect.Sets;
 import com.google.common.net.UrlEscapers;
 
+import static com.google.common.base.Preconditions.checkState;
+import static java.lang.String.format;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.jclouds.util.Predicates2.retry;
+
 /**
  * Defines the connection between the {@link AzureComputeApi} implementation and the jclouds
  * {@link org.jclouds.compute.ComputeService}.
@@ -80,12 +79,12 @@ import com.google.common.net.UrlEscapers;
 @Singleton
 public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeployment, VMHardware, VMImage, Location> {
 
-   private String azureGroup;
-   protected final CleanupResources cleanupResources;
-
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
    private Logger logger = Logger.NULL;
+
+   private String azureGroup;
+   private final CleanupResources cleanupResources;
    private final AzureComputeApi api;
    private final AzureComputeConstants azureComputeConstants;
    private final Supplier<Set<String>> regionIds;
@@ -113,12 +112,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
            final String group, final String name, final Template template) {
 
       DeploymentTemplateBuilder deploymentTemplateBuilder = api.deploymentTemplateFactory().create(group, name, template);
-
-      final String loginUser = DeploymentTemplateBuilder.getLoginUserUsername();
-      final String loginPassword = DeploymentTemplateBuilder.getLoginPassword();
-
-      DeploymentBody deploymentTemplateBody =  deploymentTemplateBuilder.getDeploymentTemplate();
-
+      DeploymentBody deploymentTemplateBody = deploymentTemplateBuilder.getDeploymentTemplate();
       DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
 
       final String deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplateBuilder.getDeploymentTemplateJson(properties));
@@ -151,16 +145,8 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
          throw new IllegalStateException(illegalStateExceptionMessage);
       }
       final VMDeployment deployment = deployments.iterator().next();
-      NodeAndInitialCredentials<VMDeployment> credential;
-      if (template.getOptions().getPublicKey() != null){
-         String privateKey = template.getOptions().getPrivateKey();
-         credential = new NodeAndInitialCredentials<VMDeployment>(deployment, name,
-                 LoginCredentials.builder().user(loginUser).privateKey(privateKey).authenticateSudo(true).build());
-      } else {
-         credential = new NodeAndInitialCredentials<VMDeployment>(deployment, name,
-                 LoginCredentials.builder().user(loginUser).password(loginPassword).authenticateSudo(true).build());
-      }
-      return credential;
+      // Safe to pass null credentials here, as jclouds will default populate the node with the default credentials from the image, or the ones in the options, if provided.
+      return new NodeAndInitialCredentials<VMDeployment>(deployment, name, null);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
index 6033f42..8e0d118 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
@@ -32,7 +32,6 @@ import org.jclouds.azurecompute.arm.compute.functions.LocationToLocation;
 import org.jclouds.azurecompute.arm.compute.functions.VMHardwareToHardware;
 import org.jclouds.azurecompute.arm.compute.functions.VMImageToImage;
 import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
-import org.jclouds.azurecompute.arm.compute.strategy.AzurePopulateDefaultLoginCredentialsForImageStrategy;
 import org.jclouds.azurecompute.arm.compute.strategy.CreateResourceGroupThenCreateNodes;
 import org.jclouds.azurecompute.arm.domain.Location;
 import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
@@ -47,12 +46,13 @@ import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
 import org.jclouds.compute.domain.Hardware;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.extensions.ImageExtension;
+import org.jclouds.compute.functions.NodeAndTemplateOptionsToStatement;
+import org.jclouds.compute.functions.NodeAndTemplateOptionsToStatementWithoutPublicKey;
 import org.jclouds.compute.options.TemplateOptions;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.compute.reference.ComputeServiceConstants.PollPeriod;
 import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
 import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet;
-import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
 import org.jclouds.logging.Logger;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -64,7 +64,6 @@ import com.google.inject.TypeLiteral;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_IMAGE_LOGIN;
 import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
 import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
 import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
@@ -105,8 +104,7 @@ public class AzureComputeServiceContextModule
       });
 
       bind(TemplateOptions.class).to(AzureTemplateOptions.class);
-      bind(PopulateDefaultLoginCredentialsForImageStrategy.class).to(AzurePopulateDefaultLoginCredentialsForImageStrategy.class);
-      //bind(TemplateOptionsToStatement.class).to(TemplateOptionsToStatementWithoutPublicKey.class);
+      bind(NodeAndTemplateOptionsToStatement.class).to(NodeAndTemplateOptionsToStatementWithoutPublicKey.class);
       bind(CreateNodesInGroupThenAddToSet.class).to(CreateResourceGroupThenCreateNodes.class);
       bind(new TypeLiteral<ImageExtension>() {
       }).to(AzureComputeImageExtension.class);
@@ -143,10 +141,6 @@ public class AzureComputeServiceContextModule
       @Inject
       private String azureImagePublishersProperty;
 
-      @Named(DEFAULT_IMAGE_LOGIN)
-      @Inject
-      private String azureDefaultImageLoginProperty;
-
       @Named(DEFAULT_VNET_ADDRESS_SPACE_PREFIX)
       @Inject
       private String azureDefaultVnetAddressPrefixProperty;
@@ -171,10 +165,6 @@ public class AzureComputeServiceContextModule
          return azureImagePublishersProperty;
       }
 
-      public String azureDefaultImageLogin() {
-         return azureDefaultImageLoginProperty;
-      }
-
       public String azureDefaultVnetAddressPrefixProperty() {
          return azureDefaultVnetAddressPrefixProperty;
       }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToNodeMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToNodeMetadata.java
index 532e786..ba6ce6d 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToNodeMetadata.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToNodeMetadata.java
@@ -22,7 +22,6 @@ import java.util.Set;
 
 import javax.inject.Inject;
 
-import com.google.common.collect.Sets;
 import org.jclouds.azurecompute.arm.AzureComputeApi;
 import org.jclouds.azurecompute.arm.domain.ComputeNode;
 import org.jclouds.azurecompute.arm.domain.Deployment;
@@ -35,25 +34,22 @@ import org.jclouds.azurecompute.arm.domain.VMHardware;
 import org.jclouds.azurecompute.arm.domain.VMImage;
 import org.jclouds.azurecompute.arm.domain.VMSize;
 import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
-import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
 import org.jclouds.azurecompute.arm.util.GetEnumValue;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.NodeMetadataBuilder;
 import org.jclouds.compute.functions.GroupNamingConvention;
 import org.jclouds.domain.Credentials;
 import org.jclouds.domain.Location;
+import org.jclouds.domain.LoginCredentials;
+
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.Hardware;
+import com.google.common.collect.Sets;
 
 public class DeploymentToNodeMetadata implements Function<VMDeployment, NodeMetadata> {
 
-   public static final String JCLOUDS_DEFAULT_USERNAME = "root";
-   public static final String AZURE_LOGIN_USERNAME = DeploymentTemplateBuilder.getLoginUserUsername();
-   public static final String AZURE_LOGIN_PASSWORD = DeploymentTemplateBuilder.getLoginPassword();
-
    private static final Map<ComputeNode.Status, NodeMetadata.Status> INSTANCESTATUS_TO_NODESTATUS =
            ImmutableMap.<ComputeNode.Status, NodeMetadata.Status>builder().
                    put(ComputeNode.Status.GOOD, NodeMetadata.Status.RUNNING).
@@ -84,15 +80,10 @@ public class DeploymentToNodeMetadata implements Function<VMDeployment, NodeMeta
    }
 
    private final AzureComputeApi api;
-
    private final LocationToLocation locationToLocation;
-
    private final GroupNamingConvention nodeNamingConvention;
-
    private final VMImageToImage vmImageToImage;
-
    private final VMHardwareToHardware vmHardwareToHardware;
-
    private final Map<String, Credentials> credentialStore;
 
    @Inject
@@ -146,20 +137,8 @@ public class DeploymentToNodeMetadata implements Function<VMDeployment, NodeMeta
       }
 
       Credentials credentials = credentialStore.get("node#" + from.deployment().name());
-      if (credentials != null && credentials.identity.equals(JCLOUDS_DEFAULT_USERNAME)) {
-         credentials = new Credentials(AZURE_LOGIN_USERNAME, credentials.credential);
-      }
-      else if (credentials == null) {
-         String username = AZURE_LOGIN_USERNAME;
-         String password = AZURE_LOGIN_PASSWORD;
-         if (username == null) {
-            username = "jclouds";
-         }
-         if (password == null) {
-            password = "Password1!";
-         }
-
-         credentials = new Credentials(username, password);
+      if (credentials != null) {
+         builder.credentials(LoginCredentials.fromCredentials(credentials));
       }
       builder.credentials(LoginCredentials.fromCredentials(credentials));
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
index f784842..b515959 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
@@ -16,48 +16,35 @@
  */
 package org.jclouds.azurecompute.arm.compute.functions;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.azurecompute.arm.compute.functions.DeploymentToNodeMetadata.AZURE_LOGIN_PASSWORD;
-import static org.jclouds.azurecompute.arm.compute.functions.DeploymentToNodeMetadata.AZURE_LOGIN_USERNAME;
+import java.util.Set;
 
-import com.google.common.base.Supplier;
-import com.google.common.collect.FluentIterable;
 import org.jclouds.azurecompute.arm.domain.VMImage;
 import org.jclouds.collect.Memoized;
 import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.domain.ImageBuilder;
 import org.jclouds.compute.domain.OperatingSystem;
 import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.domain.Location;
+import org.jclouds.location.predicates.LocationPredicates;
 
 import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+import com.google.common.collect.FluentIterable;
 import com.google.inject.Inject;
-import org.jclouds.domain.Credentials;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.location.predicates.LocationPredicates;
 
-import java.util.Set;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 public class VMImageToImage implements Function<VMImage, Image> {
 
    private static final String UNRECOGNIZED = "UNRECOGNIZED";
-
    private static final String UBUNTU = "Ubuntu";
-
    private static final String WINDOWS = "Windows";
-
    private static final String OPENLOGIC = "openLogic";
-
    private static final String CENTOS = "CentOS";
-
    private static final String COREOS = "CoreOS";
-
    private static final String OPENSUSE = "openSUSE";
-
    private static final String SUSE = "SUSE";
-
    private static final String SQL_SERVER = "SQL Server";
-
    private static final String ORACLE_lINUX = "Oracle Linux";
 
    private final Supplier<Set<? extends org.jclouds.domain.Location>> locations;
@@ -103,7 +90,6 @@ public class VMImageToImage implements Function<VMImage, Image> {
    @Override
    public Image apply(final VMImage image) {
 
-      Credentials credentials = new Credentials(AZURE_LOGIN_USERNAME, AZURE_LOGIN_PASSWORD);
       if (image.custom()) {
 
          final ImageBuilder builder = new ImageBuilder()
@@ -115,8 +101,7 @@ public class VMImageToImage implements Function<VMImage, Image> {
                .status(Image.Status.AVAILABLE)
                .version(image.storage())
                .providerId(image.vhd1())
-               .id(encodeFieldsToUniqueIdCustom(image))
-               .defaultCredentials(LoginCredentials.fromCredentials(credentials));
+               .id(encodeFieldsToUniqueIdCustom(image));
 
          final OperatingSystem.Builder osBuilder = osFamily().apply(image);
          Image retimage = builder.operatingSystem(osBuilder.build()).build();
@@ -130,7 +115,6 @@ public class VMImageToImage implements Function<VMImage, Image> {
                .status(Image.Status.AVAILABLE)
                .version(image.sku())
                .id(encodeFieldsToUniqueId(image))
-               .defaultCredentials(LoginCredentials.fromCredentials(credentials))
                .providerId(image.publisher())
                .location(image.globallyAvailable() ? null : FluentIterable.from(locations.get())
                      .firstMatch(LocationPredicates.idEquals(image.location()))

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/AzurePopulateDefaultLoginCredentialsForImageStrategy.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/AzurePopulateDefaultLoginCredentialsForImageStrategy.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/AzurePopulateDefaultLoginCredentialsForImageStrategy.java
deleted file mode 100644
index 55d1a3c..0000000
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/AzurePopulateDefaultLoginCredentialsForImageStrategy.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.azurecompute.arm.compute.strategy;
-
-import org.jclouds.compute.domain.internal.ImageImpl;
-import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
-import org.jclouds.domain.Credentials;
-import org.jclouds.domain.LoginCredentials;
-
-import static org.jclouds.azurecompute.arm.compute.functions.DeploymentToNodeMetadata.AZURE_LOGIN_PASSWORD;
-import static org.jclouds.azurecompute.arm.compute.functions.DeploymentToNodeMetadata.AZURE_LOGIN_USERNAME;
-
-public class AzurePopulateDefaultLoginCredentialsForImageStrategy implements PopulateDefaultLoginCredentialsForImageStrategy {
-   @Override
-   public LoginCredentials apply(Object o) {
-      ImageImpl node = (ImageImpl)o;
-      String username = AZURE_LOGIN_USERNAME;
-      String password = AZURE_LOGIN_PASSWORD;
-      if (username == null) {
-         username = "jclouds";
-      }
-      if (password == null) {
-         password = "Password1!";
-      }
-      Credentials creds = new Credentials(username, password);
-      LoginCredentials credentials = LoginCredentials.fromCredentials(creds);
-      return credentials;
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d48537fd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
index e5b0a43..31fa6bc 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
@@ -54,10 +54,12 @@ import org.jclouds.azurecompute.arm.domain.TemplateParameterType;
 import org.jclouds.azurecompute.arm.domain.VHD;
 import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
 import org.jclouds.compute.domain.Template;
+import org.jclouds.domain.LoginCredentials;
 import org.jclouds.json.Json;
 import org.jclouds.predicates.Validator;
 import org.jclouds.predicates.validators.DnsNameValidator;
 
+import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
@@ -65,7 +67,6 @@ import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
 
-import static com.google.common.io.BaseEncoding.base64;
 import static org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension.CUSTOM_IMAGE_PREFIX;
 import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.STORAGE_API_VERSION;
 
@@ -75,28 +76,23 @@ public class DeploymentTemplateBuilder {
    }
 
    private final String name;
-   private final String azureGroup;
-   private final String group;
    private final Template template;
    private final Json json;
+   private final LoginCredentials loginCredentials;
 
    private AzureTemplateOptions options;
    private Iterable<String> tags;
    private Map<String, String> userMetaData;
    private List<ResourceDefinition> resources;
    private Map<String, String> variables;
-   private static String loginUser;
-   private static String loginPassword;
    private String location;
    private AzureComputeServiceContextModule.AzureComputeConstants azureComputeConstants;
 
    private static final String DEPLOYMENT_MODE = "Incremental";
 
    @Inject
-   DeploymentTemplateBuilder(Json json, @Assisted("group") String group, @Assisted("name") String name, @Assisted Template template,
-                             final AzureComputeServiceContextModule.AzureComputeConstants azureComputeConstants) {
+   DeploymentTemplateBuilder(Json json, @Assisted("group") String group, @Assisted("name") String name, @Assisted Template template, Function<Template, LoginCredentials> templateToLoginCredentials) {
       this.name = name;
-      this.group = group;
       this.template = template;
       this.options = template.getOptions().as(AzureTemplateOptions.class);
       this.tags = template.getOptions().getTags();
@@ -105,29 +101,7 @@ public class DeploymentTemplateBuilder {
       this.resources = new ArrayList<ResourceDefinition>();
       this.location = template.getLocation().getId();
       this.json = json;
-
-      this.azureComputeConstants = azureComputeConstants;
-      this.azureGroup = this.azureComputeConstants.azureResourceGroup();
-
-      String[] defaultLogin = this.azureComputeConstants.azureDefaultImageLogin().split(":");
-      String defaultUser = null;
-      String defaultPassword = null;
-
-      if (defaultLogin.length == 2) {
-         defaultUser = defaultLogin[0].trim();
-         defaultPassword = defaultLogin[1].trim();
-      }
-
-      loginUser = options.getLoginUser() == null ? defaultUser : options.getLoginUser();
-      loginPassword = options.getLoginPassword() == null ? defaultPassword : options.getLoginPassword();
-   }
-
-   public static String getLoginUserUsername() {
-      return loginUser;
-   }
-
-   public static String getLoginPassword() {
-      return loginPassword;
+      this.loginCredentials = templateToLoginCredentials.apply(template);
    }
 
    public Template getTemplate() {
@@ -378,28 +352,24 @@ public class DeploymentTemplateBuilder {
       //Build OS Profile
       final String computerName = name + "pc";
 
-      variables.put("loginUser", loginUser);
+      variables.put("loginUser", loginCredentials.getUser());
       OSProfile.Builder profileBuilder = OSProfile.builder()
-              .adminUsername(loginUser)
+              .adminUsername(loginCredentials.getUser())
               .computerName(computerName);
 
-      profileBuilder.adminPassword(loginPassword);
-      //boolean usePublicKey = options.getPublicKey() != null;
+      boolean usePublicKey = options.getPublicKey() != null;
 
-      if (keyVaultInUse()) {
-         OSProfile.LinuxConfiguration configuration = OSProfile.LinuxConfiguration.create("false",
+      if (usePublicKey) {
+         OSProfile.LinuxConfiguration configuration = OSProfile.LinuxConfiguration.create("true",
                  OSProfile.LinuxConfiguration.SSH.create(Arrays.asList(
                          OSProfile.LinuxConfiguration.SSH.SSHPublicKey.create(
                                  "[concat('/home/',variables('loginUser'),'/.ssh/authorized_keys')]",
-                                 "[parameters('publicKeyFromAzureKeyVault')]"
-                         ))
-                 ));
+                                 options.getPublicKey())
+                 ))
+         );
          profileBuilder.linuxConfiguration(configuration);
-      }
-
-      if (!Strings.isNullOrEmpty(options.getCustomData())){
-         String encodedCustomData = base64().encode(options.getCustomData().getBytes());
-         profileBuilder.customData(encodedCustomData);
+      } else if (loginCredentials.getOptionalPassword().isPresent()) {
+         profileBuilder.adminPassword(loginCredentials.getOptionalPassword().get());
       }
 
       OSProfile osProfile = profileBuilder.build();