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

jclouds-labs git commit: remove DeploymentToNodemetadata

Repository: jclouds-labs
Updated Branches:
  refs/heads/fix/AzureTemplateBuilderLiveTest e450fd464 -> 8d223b1ee


remove DeploymentToNodemetadata

- remove DeploymentToTemplateBuilder util
- adjust the rest of the code, accordingly


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

Branch: refs/heads/fix/AzureTemplateBuilderLiveTest
Commit: 8d223b1ee45dbd496d3d4d6149a89c6fe4928f84
Parents: e450fd4
Author: Andrea Turli <an...@gmail.com>
Authored: Tue Oct 4 15:05:18 2016 +0200
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Oct 4 15:05:18 2016 +0200

----------------------------------------------------------------------
 .../azurecompute/arm/AzureComputeApi.java       |   3 -
 .../arm/compute/AzureComputeServiceAdapter.java |  15 -
 .../functions/DeploymentToNodeMetadata.java     | 219 --------
 .../functions/DeploymentToVMDeployment.java     | 122 -----
 .../arm/config/AzureComputeHttpApiModule.java   |   3 -
 .../arm/util/DeploymentTemplateBuilder.java     | 547 -------------------
 .../arm/features/DeploymentApiLiveTest.java     |  47 +-
 .../features/DeploymentTemplateBuilderTest.java | 296 ----------
 .../TemplateToDeploymentTemplateLiveTest.java   | 281 ----------
 9 files changed, 33 insertions(+), 1500 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
index 42749cf..7706737 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
@@ -17,7 +17,6 @@
 package org.jclouds.azurecompute.arm;
 
 import org.jclouds.azurecompute.arm.features.DeploymentApi;
-import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
 import org.jclouds.azurecompute.arm.features.JobApi;
 import org.jclouds.azurecompute.arm.features.LocationApi;
 import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi;
@@ -165,6 +164,4 @@ public interface AzureComputeApi extends Closeable {
    @Delegate
    ResourceProviderApi getResourceProviderApi();
 
-   @Provides
-   DeploymentTemplateBuilder.Factory deploymentTemplateFactory();
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/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 0b7072a..5ee484d 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
@@ -390,21 +390,6 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
    @Override
    public Iterable<VirtualMachine> listNodes() {
       return api.getVirtualMachineApi(azureGroup).list();
-      /*
-      return FluentIterable.from(api.getDeploymentApi(azureGroup).list())
-              .filter(isDeploymentInRegions)
-              .filter(new Predicate<Deployment>() {
-                 @Override
-                 public boolean apply(Deployment deployment) {
-                    Value storageAccountNameValue = deployment.properties().parameters().get("storageAccountName");
-                    String storageAccountName = storageAccountNameValue.value();
-                    String key = api.getStorageAccountApi(azureGroup).getKeys(storageAccountName).key1();
-                    return !BlobHelper.customImageExists(storageAccountName, key);
-                 }
-              })
-              .transform(deploymentToVMDeployment)
-              .toList();
-       */              
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/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
deleted file mode 100644
index f7e3b5b..0000000
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToNodeMetadata.java
+++ /dev/null
@@ -1,219 +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.functions;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.jclouds.azurecompute.arm.AzureComputeApi;
-import org.jclouds.azurecompute.arm.domain.Deployment;
-import org.jclouds.azurecompute.arm.domain.ImageReference;
-import org.jclouds.azurecompute.arm.domain.IpConfiguration;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
-import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
-import org.jclouds.azurecompute.arm.domain.VMDeployment;
-import org.jclouds.azurecompute.arm.domain.VirtualMachine;
-import org.jclouds.azurecompute.arm.util.GetEnumValue;
-import org.jclouds.collect.Memoized;
-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.compute.reference.ComputeServiceConstants;
-import org.jclouds.domain.Credentials;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.logging.Logger;
-
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Splitter;
-import com.google.common.base.Supplier;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.find;
-
-public class DeploymentToNodeMetadata implements Function<VMDeployment, NodeMetadata> {
-
-   @Resource
-   @Named(ComputeServiceConstants.COMPUTE_LOGGER)
-   protected Logger logger = Logger.NULL;
-   
-   // When using the Deployment API to deploy an ARM template, the deployment goes through
-   // stages.  Accepted -> Running -> Succeeded.  Only when the deployment has SUCCEEDED is
-   // the resource deployed using the template actually ready.
-   //
-   // To get details about the resource(s) deployed via template, one needs to query the
-   // various resources after the deployment has "SUCCEEDED".
-   private static final Map<Deployment.ProvisioningState, NodeMetadata.Status> STATUS_TO_NODESTATUS =
-           ImmutableMap.<Deployment.ProvisioningState, NodeMetadata.Status>builder().
-                   put(Deployment.ProvisioningState.ACCEPTED, NodeMetadata.Status.PENDING).
-                   put(Deployment.ProvisioningState.READY, NodeMetadata.Status.PENDING).
-                   put(Deployment.ProvisioningState.RUNNING, NodeMetadata.Status.PENDING).
-                   put(Deployment.ProvisioningState.CANCELED, NodeMetadata.Status.TERMINATED).
-                   put(Deployment.ProvisioningState.FAILED, NodeMetadata.Status.ERROR).
-                   put(Deployment.ProvisioningState.DELETED, NodeMetadata.Status.TERMINATED).
-                   put(Deployment.ProvisioningState.SUCCEEDED, NodeMetadata.Status.RUNNING).
-                   put(Deployment.ProvisioningState.UNRECOGNIZED, NodeMetadata.Status.UNRECOGNIZED).
-                   build();
-
-   public static Deployment.ProvisioningState provisioningStateFromString(final String text) {
-      return (Deployment.ProvisioningState) GetEnumValue.fromValueOrDefault(text, Deployment.ProvisioningState.UNRECOGNIZED);
-   }
-
-   private final AzureComputeApi api;
-   private final GroupNamingConvention nodeNamingConvention;
-   private final Supplier<Map<String, ? extends Image>> images;
-   private final Supplier<Set<? extends Location>> locations;
-   private final Supplier<Map<String, ? extends Hardware>> hardwares;
-   private final Map<String, Credentials> credentialStore;
-
-   @Inject
-   DeploymentToNodeMetadata(
-           AzureComputeApi api,
-           GroupNamingConvention.Factory namingConvention, 
-           Supplier<Map<String, ? extends Image>> images,
-           Supplier<Map<String, ? extends Hardware>> hardwares, 
-           @Memoized Supplier<Set<? extends Location>> locations, Map<String, Credentials> credentialStore) {
-      this.api = api;
-      this.nodeNamingConvention = namingConvention.createWithoutPrefix();
-      this.images = checkNotNull(images, "images cannot be null");
-      this.locations = checkNotNull(locations, "locations cannot be null");
-      this.hardwares = checkNotNull(hardwares, "hardwares cannot be null");
-      this.credentialStore = credentialStore;
-   }
-
-   @Override
-   public NodeMetadata apply(final VMDeployment from) {
-      final NodeMetadataBuilder builder = new NodeMetadataBuilder();
-      VirtualMachine virtualMachine = from.virtualMachine();
-      builder.id(from.deploymentId()); 
-      builder.providerId(virtualMachine.id());
-      builder.name(virtualMachine.name());
-      //builder.hostname(deployment.name() + "pc");
-      String group = this.nodeNamingConvention.extractGroup(virtualMachine.name());
-      builder.group(group);
-      //builder.status(getStatus(virtualMachine.properties().provisioningState()));
-
-      Credentials credentials = credentialStore.get("node#" + virtualMachine.name());
-      builder.credentials(LoginCredentials.fromCredentials(credentials));
-
-      builder.publicAddresses(getPublicIpAddresses(from.ipAddressList()));
-      builder.privateAddresses(getPrivateIpAddresses(from.networkInterfaceCards()));
-
-      if (virtualMachine != null) {
-         if (virtualMachine.tags() != null) {
-            Map<String, String> userMetaData = virtualMachine.tags();
-            builder.userMetadata(userMetaData);
-            builder.tags(Splitter.on(",").split(userMetaData.get("tags")));
-         }
-         String locationName = virtualMachine.location();
-         builder.location(getLocation(locationName));
-         
-         ImageReference imageReference = virtualMachine.properties().storageProfile().imageReference();
-         Optional<? extends Image> image = findImage(imageReference, locationName);
-         if (image.isPresent()) {
-            builder.imageId(image.get().getId());
-            builder.operatingSystem(image.get().getOperatingSystem());
-         } else {
-            logger.info(">> image with id %s for virtualmachine %s was not found. "
-                            + "This might be because the image that was used to create the virtualmachine has a new id.",
-                    virtualMachine.id(), virtualMachine.id());
-         }
-         
-         builder.hardware(getHardware(virtualMachine.properties().hardwareProfile().vmSize()));
-      }
-
-      return builder.build();
-   }
-
-   private Iterable<String> getPrivateIpAddresses(List<NetworkInterfaceCard> networkInterfaceCards) {
-      return FluentIterable.from(networkInterfaceCards)
-              .filter(new Predicate<NetworkInterfaceCard>() {
-                 @Override
-                 public boolean apply(NetworkInterfaceCard nic) {
-                    return nic != null && nic.properties() != null && nic.properties().ipConfigurations() != null;
-                 }
-              }).transformAndConcat(new Function<NetworkInterfaceCard, Iterable<IpConfiguration>>() {
-                 @Override
-                 public Iterable<IpConfiguration> apply(NetworkInterfaceCard nic) {
-                    return nic.properties().ipConfigurations();
-                 }
-              }).filter(new Predicate<IpConfiguration>() {
-                 @Override
-                 public boolean apply(IpConfiguration ip) {
-                    return ip != null && ip.properties() != null && ip.properties().privateIPAddress() != null;
-                 }
-              }).transform(new Function<IpConfiguration, String>() {
-                 @Override
-                 public String apply(IpConfiguration ipConfiguration) {
-                    return ipConfiguration.properties().privateIPAddress();
-                 }
-              }).toSet();
-   }
-
-   private Iterable<String> getPublicIpAddresses(List<PublicIPAddress> publicIPAddresses) {
-      return FluentIterable.from(publicIPAddresses)
-              .filter(new Predicate<PublicIPAddress>() {
-                 @Override
-                 public boolean apply(PublicIPAddress publicIPAddress) {
-                    return publicIPAddress != null && publicIPAddress.properties() != null && publicIPAddress.properties().ipAddress() != null;
-                 }
-              }).transform(new Function<PublicIPAddress, String>() {
-                 @Override
-                 public String apply(PublicIPAddress publicIPAddress) {
-                    return publicIPAddress.properties().ipAddress();
-                 }
-              }).toSet();
-   }
-
-   private NodeMetadata.Status getStatus(String provisioningState) {
-      return STATUS_TO_NODESTATUS.get(provisioningStateFromString(provisioningState));
-   }
-
-   protected Location getLocation(final String locationName) {
-      return find(locations.get(), new Predicate<Location>() {
-         @Override
-         public boolean apply(Location location) {
-            return locationName != null && locationName.equals(location.getId());
-         }
-      }, null);
-   }
-
-   protected Optional<? extends Image> findImage(ImageReference imageReference, String locatioName) {
-      return Optional.fromNullable(images.get().get(VMImageToImage.encodeFieldsToUniqueId(false, locatioName, imageReference)));
-   }
-
-   protected Hardware getHardware(final String vmSize) {
-      return Iterables.find(hardwares.get().values(), new Predicate<Hardware>() {
-         @Override
-         public boolean apply(Hardware input) {
-            return input.getId().equals(vmSize);
-         }
-      });
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToVMDeployment.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToVMDeployment.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToVMDeployment.java
deleted file mode 100644
index 2e3d12c..0000000
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/DeploymentToVMDeployment.java
+++ /dev/null
@@ -1,122 +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.functions;
-
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.azurecompute.arm.AzureComputeApi;
-import org.jclouds.azurecompute.arm.domain.Deployment;
-import org.jclouds.azurecompute.arm.domain.Deployment.Dependency;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
-import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
-import org.jclouds.azurecompute.arm.domain.VMDeployment;
-import org.jclouds.azurecompute.arm.domain.VirtualMachine;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Iterables;
-
-/**
- * Converts an Deployment into a VMDeployment.
- */
-@Singleton
-public class DeploymentToVMDeployment implements Function<Deployment, VMDeployment> {
-
-   private final AzureComputeApi api;
-
-   @Inject
-   DeploymentToVMDeployment(AzureComputeApi api) {
-      this.api = api;
-   }
-
-   @Override
-   public VMDeployment apply(final Deployment deployment) {
-      if (deployment.properties() == null || deployment.properties().dependencies() == null) return null;
-      List<Dependency> dependencies = deployment.properties().dependencies();
-      String resourceGroup = getResourceGroupFromId(deployment.id());
-
-      VirtualMachine virtualMachine = getVirtualMachine(dependencies, resourceGroup);
-      
-      List<NetworkInterfaceCard> networkInterfaceCards = getNetworkInterfaceCards(dependencies, resourceGroup);
-      List<PublicIPAddress> ipAddressList = getPublicIPAddress(dependencies, resourceGroup);
-
-      return VMDeployment.create(deployment.name(), virtualMachine, ipAddressList, networkInterfaceCards);
-   }
-
-   private VirtualMachine getVirtualMachine(List<Dependency> dependencies, String resourceGroup) {
-      Dependency dependency = Iterables.find(dependencies, new DependencyPredicate("Microsoft.Compute/virtualMachines"));
-      return api.getVirtualMachineApi(resourceGroup).get(dependency.resourceName());
-   }
-
-   private List<PublicIPAddress> getPublicIPAddress(List<Dependency> dependencies, final String resourceGroup) {
-      List<PublicIPAddress> list = FluentIterable.from(dependencies)
-              .filter(new DependencyPredicate("Microsoft.Network/networkInterfaces"))
-              .transformAndConcat(new Function<Dependency, Iterable<Dependency>>() {
-                 @Override
-                 public Iterable<Dependency> apply(Dependency input) {
-                    return input.dependsOn();
-                 }
-              }).filter(new DependencyPredicate("Microsoft.Network/publicIPAddresses"))
-              .transform(new Function<Dependency, PublicIPAddress>() {
-                 @Override
-                 public PublicIPAddress apply(Dependency input) {
-                    return api.getPublicIPAddressApi(resourceGroup).get(input.resourceName());
-                 }
-              }).toList();
-      return list;
-   }
-
-   private String getResourceGroupFromId(String id) {
-      String searchStr = "/resourceGroups/";
-      int indexStart = id.lastIndexOf(searchStr) + searchStr.length();
-      searchStr = "/providers/";
-      int indexEnd = id.lastIndexOf(searchStr);
-
-      String resourceGroup = id.substring(indexStart, indexEnd);
-      return resourceGroup;
-   }
-
-   private List<NetworkInterfaceCard> getNetworkInterfaceCards(List<Dependency> dependencies, final String resourceGroup) {
-      List<NetworkInterfaceCard> result = FluentIterable.from(dependencies)
-              .filter(new DependencyPredicate("Microsoft.Network/networkInterfaces"))
-      .transform(new Function<Dependency, NetworkInterfaceCard>() {
-         @Override
-         public NetworkInterfaceCard apply(Dependency input) {
-            return api.getNetworkInterfaceCardApi(resourceGroup).get(input.resourceName());
-         }
-      }).toList();
-      return result;
-   }
-
-   private static class DependencyPredicate implements Predicate<Dependency> {
-
-      private final String resourceType;
-      
-      public DependencyPredicate(String resourceType) {
-         this.resourceType = resourceType;
-      }
-
-      @Override
-      public boolean apply(Dependency dependency) {
-         return dependency.resourceType().equals(resourceType);
-      }
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
index bd1750f..991c738 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
@@ -18,7 +18,6 @@ package org.jclouds.azurecompute.arm.config;
 
 import org.jclouds.azurecompute.arm.AzureComputeApi;
 import org.jclouds.azurecompute.arm.handlers.AzureComputeErrorHandler;
-import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
 import org.jclouds.http.HttpErrorHandler;
 import org.jclouds.http.annotation.ClientError;
 import org.jclouds.http.annotation.Redirection;
@@ -30,7 +29,6 @@ import org.jclouds.rest.ConfiguresHttpApi;
 import org.jclouds.rest.config.HttpApiModule;
 
 import com.google.inject.Scopes;
-import com.google.inject.assistedinject.FactoryModuleBuilder;
 
 @ConfiguresHttpApi
 public class AzureComputeHttpApiModule extends HttpApiModule<AzureComputeApi> {
@@ -51,7 +49,6 @@ public class AzureComputeHttpApiModule extends HttpApiModule<AzureComputeApi> {
 
    @Override
    protected void configure() {
-      install(new FactoryModuleBuilder().build(DeploymentTemplateBuilder.Factory.class));
       super.configure();
       bind(OAuthScopes.class).toInstance(OAuthScopes.NoScopes.create());
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/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
deleted file mode 100644
index 08f3a87..0000000
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
+++ /dev/null
@@ -1,547 +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.util;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension;
-import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
-import org.jclouds.azurecompute.arm.domain.DataDisk;
-import org.jclouds.azurecompute.arm.domain.DeploymentBody;
-import org.jclouds.azurecompute.arm.domain.DeploymentProperties;
-import org.jclouds.azurecompute.arm.domain.DeploymentTemplate;
-import org.jclouds.azurecompute.arm.domain.DiagnosticsProfile;
-import org.jclouds.azurecompute.arm.domain.DnsSettings;
-import org.jclouds.azurecompute.arm.domain.HardwareProfile;
-import org.jclouds.azurecompute.arm.domain.IdReference;
-import org.jclouds.azurecompute.arm.domain.ImageReference;
-import org.jclouds.azurecompute.arm.domain.IpConfiguration;
-import org.jclouds.azurecompute.arm.domain.IpConfigurationProperties;
-import org.jclouds.azurecompute.arm.domain.KeyVaultReference;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties;
-import org.jclouds.azurecompute.arm.domain.NetworkProfile;
-import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroupProperties;
-import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule;
-import org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties;
-import org.jclouds.azurecompute.arm.domain.OSDisk;
-import org.jclouds.azurecompute.arm.domain.OSProfile;
-import org.jclouds.azurecompute.arm.domain.PublicIPAddressProperties;
-import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
-import org.jclouds.azurecompute.arm.domain.StorageProfile;
-import org.jclouds.azurecompute.arm.domain.StorageService;
-import org.jclouds.azurecompute.arm.domain.StorageService.StorageServiceProperties;
-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;
-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;
-
-public class DeploymentTemplateBuilder {
-   public interface Factory {
-      DeploymentTemplateBuilder create(@Assisted("group") String group, @Assisted("name") String name, Template template);
-   }
-
-   private final String name;
-   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 String location;
-
-   private static final String DEPLOYMENT_MODE = "Incremental";
-
-   @Inject
-   DeploymentTemplateBuilder(Json json, @Assisted("group") String group, @Assisted("name") String name, @Assisted Template template, Function<Template, LoginCredentials> templateToLoginCredentials) {
-      this.name = name;
-      this.template = template;
-      this.options = template.getOptions().as(AzureTemplateOptions.class);
-      this.tags = template.getOptions().getTags();
-      this.userMetaData = template.getOptions().getUserMetadata();
-      this.variables = new HashMap<String, String>();
-      this.resources = new ArrayList<ResourceDefinition>();
-      this.location = template.getLocation().getId();
-      this.json = json;
-      this.loginCredentials = templateToLoginCredentials.apply(template);
-   }
-
-   public Template getTemplate() {
-      return template;
-   }
-
-   public DeploymentBody getDeploymentTemplate() {
-
-      addStorageResource();
-      addPublicIpAddress();
-      addNetworkSecurityGroup();
-      addNetworkInterfaceCard();
-      addVirtualMachine();
-
-
-      DeploymentTemplate.TemplateParameters templateParameters = null;
-      DeploymentTemplate.Parameters parameters = null;
-
-      if (keyVaultInUse()){
-         String[] keyVaultInfo = options.getKeyVaultIdAndSecret().split(":");
-         Preconditions.checkArgument(keyVaultInfo.length == 2);
-         String vaultId = keyVaultInfo[0].trim();
-         String secretName = keyVaultInfo[1].trim();
-
-         templateParameters = DeploymentTemplate.TemplateParameters.create(TemplateParameterType.create("securestring"));
-         parameters = DeploymentTemplate.Parameters.create(KeyVaultReference.create(KeyVaultReference.Reference.create(IdReference.create(vaultId), secretName)));
-      } else {
-         templateParameters = DeploymentTemplate.TemplateParameters.create(null);
-         parameters = DeploymentTemplate.Parameters.create(null);
-      }
-
-
-      DeploymentTemplate template = DeploymentTemplate.builder()
-              .schema("https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#")
-              .contentVersion("1.0.0.0")
-              .resources(resources)
-              .variables(variables)
-              .parameters(templateParameters)
-              .build();
-
-      DeploymentBody body = DeploymentBody.create(template, DEPLOYMENT_MODE, parameters);
-
-      return body;
-   }
-
-   public String getDeploymentTemplateJson(DeploymentProperties properties) {
-      return json.toJson(properties);
-   }
-
-   private void addStorageResource() {
-      String storageAccountName = null;
-
-      String imageName = template.getImage().getName();
-      if (imageName.startsWith(CUSTOM_IMAGE_PREFIX)) {
-         storageAccountName = template.getImage().getVersion();
-      }
-
-      if (Strings.isNullOrEmpty(storageAccountName)) {
-         storageAccountName = generateStorageAccountName(name);
-      }
-
-      Validator<String> validator = new DnsNameValidator(3, 24);
-      validator.validate(storageAccountName);
-
-      variables.put("storageAccountName", storageAccountName);
-
-      ResourceDefinition storageAccount = ResourceDefinition.builder()
-              .name("[variables('storageAccountName')]")
-              .type("Microsoft.Storage/storageAccounts")
-              .location(location)
-              .apiVersion(STORAGE_API_VERSION)
-              .properties(
-                      StorageServiceProperties.builder()
-                              .accountType(StorageService.AccountType.Standard_LRS)
-                              .build()
-              )
-              .build();
-
-      resources.add(storageAccount);
-   }
-
-   private void addPublicIpAddress() {
-      String publicIPAddressName = name + "publicip";
-      String dnsLabelPrefix = options.getDNSLabelPrefix();
-
-      PublicIPAddressProperties.Builder properties = PublicIPAddressProperties.builder();
-
-      if (!Strings.isNullOrEmpty(dnsLabelPrefix)) {
-         properties.dnsSettings(DnsSettings.builder().domainNameLabel(dnsLabelPrefix).build());
-         variables.put("dnsLabelPrefix", dnsLabelPrefix);
-      }
-
-      properties.publicIPAllocationMethod("Dynamic");
-      variables.put("publicIPAddressName", publicIPAddressName);
-      variables.put("publicIPAddressReference", "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]");
-
-      ResourceDefinition publicIpAddress = ResourceDefinition.builder()
-              .name("[variables('publicIPAddressName')]")
-              .type("Microsoft.Network/publicIPAddresses")
-              .location(location)
-              .apiVersion(STORAGE_API_VERSION)
-              .properties(properties.build())
-              .build();
-
-      resources.add(publicIpAddress);
-   }
-
-   private void addNetworkInterfaceCard() {
-
-      List<IpConfiguration> ipConfigurations = new ArrayList<IpConfiguration>();
-
-      String ipConfigurationName = name + "ipconfig";
-      String subnetId = options.getSubnetId();
-
-      variables.put("ipConfigurationName", ipConfigurationName);
-      variables.put("subnetReference", subnetId);
-
-      IpConfiguration ipConfig = IpConfiguration.create(ipConfigurationName, null, null, null,
-              IpConfigurationProperties.builder()
-                      .privateIPAllocationMethod("Dynamic")
-                      .publicIPAddress(IdReference.create("[variables('publicIPAddressReference')]"))
-                      .subnet(IdReference.create("[variables('subnetReference')]"))
-                      .build());
-
-      ipConfigurations.add(ipConfig);
-
-      // Check to see if we have defined a network security group
-      IdReference networkSecurityGroup = null;
-      int ports[] = options.getInboundPorts();
-      if ((ports != null) && (ports.length > 0)) {
-         networkSecurityGroup = IdReference.create("[variables('networkSecurityGroupNameReference')]");
-      }
-
-      ArrayList<String> depends = new ArrayList<String>(Arrays.asList("[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]"));
-
-      NetworkInterfaceCardProperties.Builder networkInterfaceCardPropertiesBuilder = NetworkInterfaceCardProperties.builder();
-      networkInterfaceCardPropertiesBuilder.ipConfigurations(ipConfigurations);
-      if (networkSecurityGroup != null) {
-         networkInterfaceCardPropertiesBuilder.networkSecurityGroup(networkSecurityGroup);
-         depends.add("[concat('Microsoft.Network/networkSecurityGroups/', variables('networkSecurityGroupName'))]");
-      }
-      NetworkInterfaceCardProperties networkInterfaceCardProperties = networkInterfaceCardPropertiesBuilder.build();
-
-      String networkInterfaceCardName = name + "nic";
-      variables.put("networkInterfaceCardName", networkInterfaceCardName);
-      variables.put("networkInterfaceCardReference", "[resourceId('Microsoft.Network/networkInterfaces',variables('networkInterfaceCardName'))]");
-
-      ResourceDefinition networkInterfaceCard = ResourceDefinition.builder()
-              .name("[variables('networkInterfaceCardName')]")
-              .type("Microsoft.Network/networkInterfaces")
-              .location(location)
-              .apiVersion(STORAGE_API_VERSION)
-              .dependsOn(depends)
-              .properties(networkInterfaceCardProperties)
-              .build();
-
-      resources.add(networkInterfaceCard);
-   }
-
-   private void addNetworkSecurityGroup() {
-      int inboundPorts[] = options.getInboundPorts();
-      if ((inboundPorts != null) && (inboundPorts.length > 0)) {
-         variables.put("networkSecurityGroupName", name + "nsg");
-         variables.put("networkSecurityGroupNameReference", "[resourceId('Microsoft.Network/networkSecurityGroups',variables('networkSecurityGroupName'))]");
-
-         List<String> portRanges = simplifyPorts(inboundPorts);
-
-         List<NetworkSecurityRule> rules = new ArrayList<NetworkSecurityRule>();
-         int priority = 1234;
-         for (String portRange : portRanges) {
-            NetworkSecurityRuleProperties ruleProperties = NetworkSecurityRuleProperties.builder()
-                    .description("default-allow-port-" + portRange)
-                    .protocol(NetworkSecurityRuleProperties.Protocol.All)
-                    .access(NetworkSecurityRuleProperties.Access.Allow)
-                    .sourcePortRange("*")
-                    .destinationPortRange(portRange)
-                    .sourceAddressPrefix("*")
-                    .destinationAddressPrefix("*")
-                    .priority(priority)
-                    .direction(NetworkSecurityRuleProperties.Direction.Inbound)
-                    .build();
-
-            NetworkSecurityRule networkSecurityRule = NetworkSecurityRule.create(
-                    "default-allow-port-" + portRange,
-                    null,
-                    null,
-                    ruleProperties);
-
-            rules.add(networkSecurityRule);
-            priority++;
-         }
-
-         NetworkSecurityGroupProperties networkSecurityGroupProperties = NetworkSecurityGroupProperties.builder()
-                 .securityRules(rules)
-                 .build();
-
-         ResourceDefinition networkSecurityGroup = ResourceDefinition.builder()
-                 .name("[variables('networkSecurityGroupName')]")
-                 .type("Microsoft.Network/networkSecurityGroups").location(location)
-                 .apiVersion(STORAGE_API_VERSION)
-                 .properties(networkSecurityGroupProperties)
-                 .build();
-         resources.add(networkSecurityGroup);
-      }
-
-   }
-
-   /**
-    * Helper function for simplifying an array of ports to a list of ranges as list of strings
-    * @param ports array of int
-    * @return list of strings representing ranges
-    */
-   public static List<String> simplifyPorts(int[] ports) {
-      Preconditions.checkArgument(ports != null && ports.length != 0);
-      ArrayList<String> output = new ArrayList<String>();
-      Arrays.sort(ports);
-
-      int range_start = ports[0];
-      int range_end = ports[0];
-      for (int i = 1; i < ports.length; i++) {
-         if ((ports[i - 1] == ports[i] - 1) || (ports[i - 1] == ports[i])){
-            // Range continues.
-            range_end = ports[i];
-         }
-         else {
-            // Range ends.
-            output.add(formatRange(range_start, range_end));
-            range_start = ports[i];
-            range_end = ports[i];
-         }
-      }
-      // Make sure we get the last range.
-      output.add(formatRange(range_start, range_end));
-      return output;
-   }
-
-   private static String formatRange(int start, int finish) {
-      if (start == finish){
-         return Integer.toString(start);
-      }
-      else {
-         return String.format("%s-%s", Integer.toString(start), Integer.toString(finish));
-      }
-   }
-
-   private void addVirtualMachine() {
-      //Build OS Profile
-      final String computerName = name + "pc";
-
-      variables.put("loginUser", loginCredentials.getUser());
-      OSProfile.Builder profileBuilder = OSProfile.builder()
-              .adminUsername(loginCredentials.getUser())
-              .computerName(computerName);
-
-      boolean usePublicKey = options.getPublicKey() != null;
-
-      if (usePublicKey || keyVaultInUse()) {
-         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')]",
-                               keyVaultInUse() ? "[parameters('publicKeyFromAzureKeyVault')]" : options.getPublicKey())
-                 ))
-         );
-         profileBuilder.linuxConfiguration(configuration);
-      } else if (loginCredentials.getOptionalPassword().isPresent()) {
-         profileBuilder.adminPassword(loginCredentials.getOptionalPassword().get());
-      }
-      
-      if (!Strings.isNullOrEmpty(options.getCustomData())){
-         String encodedCustomData = base64().encode(options.getCustomData().getBytes());
-         profileBuilder.customData(encodedCustomData);
-      }
-
-      OSProfile osProfile = profileBuilder.build();
-
-      //Build OsDisk
-      final String storageAccountContainerName = name + "vhds";
-      variables.put("storageAccountContainerName", storageAccountContainerName);
-
-      final String osDiskName = name + "osdisk";
-      variables.put("osDiskName", osDiskName);
-
-      boolean usingMarketplaceImage = true;
-      String cusotomImageUri = "";
-
-      // Handle custom image case if description starts with CUSTOM_IMAGE_PREFIX
-      String vhd1 = template.getImage().getProviderId();
-      String description = template.getImage().getDescription();
-      if (description.substring(0, CUSTOM_IMAGE_PREFIX.length()).equals(CUSTOM_IMAGE_PREFIX)) {
-         String storageName = template.getImage().getVersion();
-         cusotomImageUri = vhd1;
-         cusotomImageUri = "https://" + storageName + ".blob.core.windows.net/system/Microsoft.Compute/Images/" + AzureComputeImageExtension.CONTAINER_NAME + "/" + cusotomImageUri;
-      }
-
-      if (!cusotomImageUri.isEmpty()) {
-         usingMarketplaceImage = false;
-      }
-
-      OSDisk osDisk = getOsDisk("[concat('http://',variables('storageAccountName'),'.blob.core.windows.net/',variables('storageAccountContainerName'),'/',variables('osDiskName'),'.vhd')]", cusotomImageUri);
-
-      //Create Data Disk(s) and add to list
-      final String dataDiskName = name + "datadisk";
-      variables.put("dataDiskName", dataDiskName);
-      final String dataDiskSize = "100";
-      
-      List<DataDisk> dataDisks = new ArrayList<DataDisk>();
-      DataDisk dataDisk = DataDisk.builder()
-              .name("[variables('dataDiskName')]")
-              .diskSizeGB(dataDiskSize)
-              .lun(0)
-              .vhd(
-                      VHD.create("[concat('http://',variables('storageAccountName'),'.blob.core.windows.net/',variables('storageAccountContainerName'),'/',variables('dataDiskName'),'.vhd')]")
-              )
-              .createOption("Empty")
-              .build();
-
-      dataDisks.add(dataDisk);
-
-      //Create Storage Profile
-      StorageProfile.Builder storageProfileBuilder = StorageProfile.builder()
-              .osDisk(osDisk)
-              .dataDisks(dataDisks);
-
-      if (usingMarketplaceImage) {
-         //Build Image Reference if marketplace image is used
-         ImageReference imageReference = getImageReference(template.getImage().getProviderId(),
-                 template.getImage().getName(),
-                 template.getImage().getVersion());
-
-         storageProfileBuilder.imageReference(imageReference);
-      }
-      StorageProfile storageProfile = storageProfileBuilder.build();
-
-
-      //Create Network Profile for this VM (links to network interface cards)
-      NetworkProfile networkProfile = NetworkProfile.create(
-              Arrays.asList(
-                      IdReference.create("[variables('networkInterfaceCardReference')]")
-              ));
-
-      //Boot Diagnostics
-      DiagnosticsProfile diagnosticsProfile = DiagnosticsProfile.create(
-              DiagnosticsProfile.BootDiagnostics.builder()
-                      .enabled(true)
-                      .storageUri("[concat('http://',variables('storageAccountName'),'.blob.core.windows.net')]")
-                      .build());
-
-      //Build VirtualMachine properties based on above properties.
-      final String vmSize = template.getHardware().getId();
-      HardwareProfile hw = HardwareProfile.create(vmSize);
-
-      VirtualMachineProperties properties = VirtualMachineProperties.builder()
-              .hardwareProfile(hw)
-              .osProfile(osProfile)
-              .storageProfile(storageProfile)
-              .networkProfile(networkProfile)
-              .diagnosticsProfile(diagnosticsProfile)
-              .build();
-
-
-      String tagString = Joiner.on(",").join(Lists.newArrayList(tags));
-      if (tagString.isEmpty())
-         tagString = "jclouds";
-      userMetaData.put("tags", tagString);
-
-      variables.put("virtualMachineName", name);
-      ResourceDefinition virtualMachine = ResourceDefinition.builder()
-              .name("[variables('virtualMachineName')]")
-              .type("Microsoft.Compute/virtualMachines")
-              .location(location)
-              .apiVersion("2015-06-15")
-              .dependsOn(Arrays.asList("[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
-                      "[concat('Microsoft.Network/networkInterfaces/', variables('networkInterfaceCardName'))]"))
-              .tags(userMetaData)
-              .properties(properties)
-              .build();
-
-      resources.add(virtualMachine);
-   }
-
-
-   private ImageReference getImageReference(String publisher, String offer, String sku) {
-      return ImageReference.builder()
-              .publisher(publisher)
-              .offer(offer)
-              .sku(sku)
-              .version("latest")
-              .build();
-
-   }
-
-   private OSDisk getOsDisk(String vhdUri, String imageUri) {
-      OSDisk.Builder builder = OSDisk.builder();
-      builder.name("[variables('osDiskName')]");
-      builder.caching("ReadWrite");
-      builder.createOption("FromImage");
-      builder.vhd(VHD.create(vhdUri));
-
-      if (!imageUri.isEmpty()) {
-         builder.osType("Linux");
-         builder.image(VHD.create(imageUri));
-      }
-      return builder.build();
-   }
-
-   private boolean keyVaultInUse(){
-      return !Strings.isNullOrEmpty(options.getKeyVaultIdAndSecret());
-   }
-
-   /**
-    * Generates a valid storage account
-    *
-    * Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.
-    *
-    * @param name the node name
-    * @return the storage account name starting from a sanitized name (with only numbers and lowercase letters only ).
-    * If sanitized name is between 3 and 24 characters, storage account name is equals to sanitized name.
-    * If sanitized name is less than 3 characters, storage account is sanitized name plus 4 random chars.
-    * If sanitized name is more than 24 characters, storage account is first 10 chars of sanitized name plus 4 random chars plus last 10 chars of sanitized name.
-    */
-   public static String generateStorageAccountName(String name) {
-      String storageAccountName = name.replaceAll("[^a-z0-9]", "");
-      int nameLength = storageAccountName.length();
-      if (nameLength >= 3 && nameLength <= 24) {
-         return storageAccountName;
-      }
-
-      String random = UUID.randomUUID().toString().replaceAll("[^a-z0-9]", "").substring(0, 4);
-      if (nameLength < 3) {
-         storageAccountName = new StringBuilder().append(storageAccountName).append(random).toString();
-      }
-      if (nameLength > 24) {
-         storageAccountName = shorten(storageAccountName, random);
-      }
-      return storageAccountName;
-   }
-
-   private static String shorten(String storageAccountName, String random) {
-      String prefix = storageAccountName.substring(0, 10);
-      String suffix = storageAccountName.substring(storageAccountName.length() - 10, storageAccountName.length());
-      return String.format("%s%s%s", prefix, random, suffix);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
index 7476828..fe4c3ee 100644
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
+++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
@@ -22,12 +22,9 @@ import java.util.List;
 import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
 import org.jclouds.azurecompute.arm.domain.Deployment;
 import org.jclouds.azurecompute.arm.domain.Deployment.ProvisioningState;
-import org.jclouds.azurecompute.arm.domain.DeploymentBody;
-import org.jclouds.azurecompute.arm.domain.DeploymentProperties;
 import org.jclouds.azurecompute.arm.domain.Subnet;
 import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
 import org.jclouds.compute.domain.Hardware;
 import org.jclouds.compute.domain.HardwareBuilder;
 import org.jclouds.compute.domain.Image;
@@ -137,12 +134,6 @@ public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest {
       return new TemplateImpl(image, hardware, region, options);
    }
 
-   private DeploymentTemplateBuilder getDeploymentTemplateBuilderWithOptions(TemplateOptions options) {
-      Template template = getTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = api.deploymentTemplateFactory().create(resourceGroupName, deploymentName, template);
-      return templateBuilder;
-   }
-
    @Test
    public void testValidate(){
       Deployment deploymentInvalid = null;
@@ -168,12 +159,40 @@ public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest {
       AzureTemplateOptions options = new AzureTemplateOptions();
       options.authorizePublicKey(rsakey);
       options.subnetId(subnetId);
-      DeploymentTemplateBuilder templateBuilder = getDeploymentTemplateBuilderWithOptions(options);
-      DeploymentBody deploymentTemplateBody = templateBuilder.getDeploymentTemplate();
 
-      DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
-
-      String deploymentTemplate = templateBuilder.getDeploymentTemplateJson(properties);
+      String deploymentTemplate = "{\n" +
+              "  \"id\": \"/subscriptions/04f7ec88-8e28-41ed-8537-5e17766001f5/resourceGroups/jims216group/providers/Microsoft.Resources/deployments/jcdep1458344383064\",\n" +
+              "  \"name\": \"jcdep1458344383064\",\n" +
+              "  \"properties\": {\n" +
+              "    \"parameters\": {\n" +
+              "      \"newStorageAccountName\": {\n" +
+              "        \"type\": \"String\",\n" +
+              "        \"value\": \"jcres1458344383064\"\n" +
+              "      },\n" +
+              "      \"storageAccountType\": {\n" +
+              "        \"type\": \"String\",\n" +
+              "        \"value\": \"Standard_LRS\"\n" +
+              "      },\n" +
+              "      \"location\": {\n" +
+              "        \"type\": \"String\",\n" +
+              "        \"value\": \"West US\"\n" +
+              "      }\n" +
+              "    },\n" +
+              "    \"mode\": \"Incremental\",\n" +
+              "    \"provisioningState\": \"Accepted\",\n" +
+              "    \"timestamp\": \"2016-03-18T23:39:47.3048037Z\",\n" +
+              "    \"duration\": \"PT2.4433028S\",\n" +
+              "    \"correlationId\": \"8dee9711-8632-4948-9fe6-368bb75e6438\",\n" +
+              "    \"providers\": [{\n" +
+              "      \"namespace\": \"Microsoft.Storage\",\n" +
+              "      \"resourceTypes\": [{\n" +
+              "        \"resourceType\": \"storageAccounts\",\n" +
+              "        \"locations\": [\"westus\"]\n" +
+              "      }]\n" +
+              "    }],\n" +
+              "    \"dependencies\": []\n" +
+              "  }\n" +
+              "}";
       deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
 
       Deployment deploymentValid = api().validate(deploymentName, deploymentTemplate);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
deleted file mode 100644
index d14e3c6..0000000
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
+++ /dev/null
@@ -1,296 +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.features;
-
-import java.util.List;
-import java.util.Map;
-
-import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
-import org.jclouds.azurecompute.arm.domain.DeploymentBody;
-import org.jclouds.azurecompute.arm.domain.ImageReference;
-import org.jclouds.azurecompute.arm.domain.IpConfiguration;
-import org.jclouds.azurecompute.arm.domain.IpConfigurationProperties;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties;
-import org.jclouds.azurecompute.arm.domain.PublicIPAddressProperties;
-import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
-import org.jclouds.azurecompute.arm.domain.StorageService;
-import org.jclouds.azurecompute.arm.domain.StorageService.StorageServiceProperties;
-import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
-import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
-import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.HardwareBuilder;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.ImageBuilder;
-import org.jclouds.compute.domain.OperatingSystem;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.compute.domain.internal.TemplateImpl;
-import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LocationBuilder;
-import org.jclouds.domain.LocationScope;
-import org.jclouds.domain.LoginCredentials;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.Iterables;
-import com.google.inject.Key;
-import com.google.inject.name.Names;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-@Test(groups = "unit", testName = "DeploymentTemplateBuilderTest", singleThreaded = true)
-public class DeploymentTemplateBuilderTest extends BaseAzureComputeApiMockTest {
-
-   final String group = "jcgroup";
-   final String vnetName = group + "virtualnetwork";
-   final String subnetId = "";
-
-   @Test
-   public void testResourceGroup() {
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions();
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      List<ResourceDefinition> resources = deploymentBody.template().resources();
-      Map<String, String> variables = deploymentBody.template().variables();
-
-      ResourceDefinition resource = getResourceByType(resources, "Microsoft.Storage/storageAccounts");
-
-      StorageServiceProperties properties = (StorageServiceProperties) resource.properties();
-      assertEquals(properties.accountType(), StorageService.AccountType.Standard_LRS);
-      assertTrue(variables.containsKey(parseVariableName(resource.name())));
-   }
-
-   @Test
-   void testPublicIpAddress() {
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions();
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      List<ResourceDefinition> resources = deploymentBody.template().resources();
-      Map<String, String> variables = deploymentBody.template().variables();
-
-      ResourceDefinition resource = getResourceByType(resources, "Microsoft.Network/publicIPAddresses");
-
-      PublicIPAddressProperties properties = (PublicIPAddressProperties) resource.properties();
-      assertEquals(properties.publicIPAllocationMethod(), "Dynamic");
-      assertTrue(variables.containsKey(parseVariableName(resource.name())));
-   }
-
-   @Test
-   void testNetworkInterfaceCard() {
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions();
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      List<ResourceDefinition> resources = deploymentBody.template().resources();
-      Map<String, String> variables = deploymentBody.template().variables();
-
-      ResourceDefinition resource = getResourceByType(resources, "Microsoft.Network/networkInterfaces");
-
-      NetworkInterfaceCardProperties properties = (NetworkInterfaceCardProperties) resource.properties();
-      List<IpConfiguration> ipConfigs = properties.ipConfigurations();
-      assertTrue(ipConfigs.size() > 0);
-      IpConfigurationProperties ipProperties = ipConfigs.get(0).properties();
-      assertEquals(ipProperties.privateIPAllocationMethod(), "Dynamic");
-      assertNotNull(ipProperties.publicIPAddress());
-      assertNotNull(ipProperties.subnet());
-
-      assertTrue(variables.containsKey(parseVariableName(resource.name())));
-   }
-
-   @Test
-   void testVirtualMachine() {
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions();
-      Template template = builder.getTemplate();
-
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      List<ResourceDefinition> resources = deploymentBody.template().resources();
-      Map<String, String> variables = deploymentBody.template().variables();
-
-      ResourceDefinition resource = getResourceByType(resources, "Microsoft.Compute/virtualMachines");
-      assertNotNull(resource);
-
-      VirtualMachineProperties properties = (VirtualMachineProperties) resource.properties();
-      assertEquals(properties.hardwareProfile().vmSize(), template.getHardware().getId());
-
-      ImageReference image = properties.storageProfile().imageReference();
-      assertEquals(image.publisher(), template.getImage().getProviderId());
-      assertEquals(image.offer(), template.getImage().getName());
-      assertEquals(image.sku(), template.getImage().getVersion());
-      assertEquals(image.version(), "latest");
-
-      assertTrue(variables.containsKey(parseVariableName(resource.name())));
-   }
-
-   @Test
-   void testAddStorageResourceWhenNameIsLongerThan24Chars() {
-      String name = "thishasmorethan24characters";
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions(name);
-
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      assertTrue(Iterables.contains(deploymentBody.template().variables().keySet(), "storageAccountName"));
-      String storageAccountName = deploymentBody.template().variables().get("storageAccountName");
-      assertEquals(storageAccountName.length(), 24);
-      assertEquals(storageAccountName.substring(0, 10), "thishasmor");
-      assertEquals(storageAccountName.substring(storageAccountName.length() - 10, storageAccountName.length()), "characters");
-   }
-
-   @Test
-   void testAddStorageResourceWhenNameIsExactly24Chars() {
-      String name = "ithasexactly24characters";
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions(name);
-
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      assertTrue(Iterables.contains(deploymentBody.template().variables().keySet(), "storageAccountName"));
-      assertEquals(deploymentBody.template().variables().get("storageAccountName").length(), 24);
-      assertEquals(deploymentBody.template().variables().get("storageAccountName"), name);
-   }
-
-   @Test
-   void testAddStorageResourceWhenNameIsLessThan3Chars() {
-      String name = "3c";
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithEmptyOptions(name);
-
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-      assertTrue(Iterables.contains(deploymentBody.template().variables().keySet(), "storageAccountName"));
-      assertEquals(deploymentBody.template().variables().get("storageAccountName").length(), 6);
-      assertEquals(deploymentBody.template().variables().get("storageAccountName").substring(0, 2), name);
-   }
-
-   @Test
-   void testCustomOptions(){
-      final String dnsLabelPrefix = "mydnslabel";
-      final String customData = "echo customData";
-      final String customData64 = "ZWNobyBjdXN0b21EYXRh";
-      final String keyvaultString = "/url/to/vault/:publickeysecret";
-
-      AzureTemplateOptions options = new AzureTemplateOptions()
-            .customData(customData)
-            .DNSLabelPrefix(dnsLabelPrefix)
-            .keyVaultIdAndSecret(keyvaultString);
-
-      options.virtualNetworkName(vnetName);
-      options.subnetId(subnetId);
-
-      assertEquals(options.as(AzureTemplateOptions.class).getCustomData(), customData);
-      assertEquals(options.getDNSLabelPrefix(), dnsLabelPrefix);
-      assertEquals(options.as(AzureTemplateOptions.class).getKeyVaultIdAndSecret(), keyvaultString);
-
-      DeploymentTemplateBuilder builder = getMockDeploymentTemplateBuilderWithOptions(options);
-
-      DeploymentBody deploymentBody = builder.getDeploymentTemplate();
-
-      List<ResourceDefinition> resources = deploymentBody.template().resources();
-      ResourceDefinition publicIpResource = getResourceByType(resources, "Microsoft.Network/publicIPAddresses");
-      assertNotNull(publicIpResource);
-
-      PublicIPAddressProperties ipProperties = (PublicIPAddressProperties) publicIpResource.properties();
-      assertEquals(ipProperties.dnsSettings().domainNameLabel(), dnsLabelPrefix);
-
-      ResourceDefinition vmResource = getResourceByType(resources, "Microsoft.Compute/virtualMachines");
-      assertNotNull(vmResource);
-
-      VirtualMachineProperties virtualMachineProperties = (VirtualMachineProperties) vmResource.properties();
-      assertEquals(virtualMachineProperties.osProfile().customData(), customData64);
-
-      //populated when keyvault is used to get public key.
-      assertNotNull(virtualMachineProperties.osProfile().linuxConfiguration().ssh().publicKeys());
-   }
-
-   @Test(expectedExceptions = IllegalArgumentException.class)
-   void testSimplifyPortsWithPortsNull() {
-      int[] ports = null;
-      DeploymentTemplateBuilder.simplifyPorts(ports);
-   }
-
-   @Test(expectedExceptions = IllegalArgumentException.class)
-   void testSimplifyPortsWithPortsEmpty() {
-      int[] ports = new int[0];
-      DeploymentTemplateBuilder.simplifyPorts(ports);
-   }
-
-   @Test
-   void testSimplifyPorts() {
-      int[] ports = {8084, 22, 8081, 8080, 8082};
-      List<String> ranges = DeploymentTemplateBuilder.simplifyPorts(ports);
-      assertEquals(ranges.size(), 3);
-      assertEquals(ranges.get(0), "22");
-      assertEquals(ranges.get(1), "8080-8082");
-      assertEquals(ranges.get(2), "8084");
-   }
-
-   private Template getMockTemplate(TemplateOptions options) {
-      options.as(AzureTemplateOptions.class).virtualNetworkName(vnetName);
-      options.as(AzureTemplateOptions.class).subnetId(subnetId);
-      
-      LoginCredentials defaultImageCredentials = context.utils().injector()
-            .getInstance(Key.get(LoginCredentials.class, Names.named("image")));
-
-      Location provider = (new LocationBuilder()).scope(LocationScope.PROVIDER).id("azurecompute-arm").description("azurecompute-arm").build();
-      Location region = (new LocationBuilder()).scope(LocationScope.REGION).id("northeurope").description("North Europe").parent(provider).build();
-      OperatingSystem os = OperatingSystem.builder().name("osName").version("osVersion").description("osDescription").arch("X86_32").build();
-      //Note that version is set to "latest"
-      
-      Image image = (new ImageBuilder()).id("imageId").providerId("imageId").name("imageName")
-            .description("imageDescription").version("sku").operatingSystem(os).status(Image.Status.AVAILABLE)
-            .location(region).defaultCredentials(defaultImageCredentials).build();
-      Hardware hardware = (new HardwareBuilder()).id("Standard_A0").build();
-      return new TemplateImpl(image, hardware, region, options);
-   }
-
-   private DeploymentTemplateBuilder getMockDeploymentTemplateBuilderWithEmptyOptions() {
-      return getMockDeploymentTemplateBuilderWithEmptyOptions("mydeployment");
-   }
-
-   private DeploymentTemplateBuilder getMockDeploymentTemplateBuilderWithEmptyOptions(String name) {
-      AzureTemplateOptions options = new AzureTemplateOptions();
-      options.virtualNetworkName(vnetName);
-      options.subnetId(subnetId);
-
-      Template template = getMockTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = api.deploymentTemplateFactory().create(group, name, template);
-      return templateBuilder;
-   }
-
-   private DeploymentTemplateBuilder getMockDeploymentTemplateBuilderWithOptions(TemplateOptions options) {
-      return getMockDeploymentTemplateBuilderWithOptions("mydeployment", options);
-   }
-
-   private DeploymentTemplateBuilder getMockDeploymentTemplateBuilderWithOptions(String name, TemplateOptions options) {
-      ((AzureTemplateOptions)options).virtualNetworkName(vnetName);
-      ((AzureTemplateOptions)options).subnetId(subnetId);
-
-      Template template = getMockTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = api.deploymentTemplateFactory().create(group, name, template);
-      return templateBuilder;
-   }
-
-   private ResourceDefinition getResourceByType(List<ResourceDefinition> resources, String type) {
-      for (ResourceDefinition r : resources) {
-         if (r.type().equals(type)) {
-            return r;
-         }
-      }
-      Assert.fail("Resource with type: " + type + " not found");
-      return null;
-   }
-
-   private String parseVariableName(String variable) {
-      String[] parts = variable.split("\'");
-      assertTrue(parts.length == 3);
-      return parts[1];
-   }
-}
-

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8d223b1e/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
deleted file mode 100644
index 3b87663..0000000
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
+++ /dev/null
@@ -1,281 +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.features;
-
-import java.net.URI;
-
-import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
-import org.jclouds.azurecompute.arm.domain.Deployment;
-import org.jclouds.azurecompute.arm.domain.DeploymentBody;
-import org.jclouds.azurecompute.arm.domain.DeploymentProperties;
-import org.jclouds.azurecompute.arm.domain.Subnet;
-import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
-import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.HardwareBuilder;
-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.compute.domain.Template;
-import org.jclouds.compute.domain.internal.TemplateImpl;
-import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LocationBuilder;
-import org.jclouds.domain.LocationScope;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.google.common.net.UrlEscapers;
-
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-@Test(groups = "live", testName = "TemplateToDeploymentTemplateLiveTest", singleThreaded = true)
-public class TemplateToDeploymentTemplateLiveTest extends BaseAzureComputeApiLiveTest {
-
-   private int maxTestDuration = 400;
-   private int pollingInterval = 3; // how frequently to poll for create status
-   private String resourceGroupName;
-   private String deploymentName;
-   private String vnetName;
-   private String subnetId;
-   private String virtualNetworkName;
-
-   @BeforeClass
-   @Override
-   public void setup() {
-      super.setup();
-      resourceGroupName = String.format("rg-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
-      assertNotNull(createResourceGroup(resourceGroupName));
-      virtualNetworkName = String.format("vn-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
-
-      //Subnets belong to a virtual network so that needs to be created first
-      VirtualNetwork vn = createDefaultVirtualNetwork(resourceGroupName, virtualNetworkName, "10.2.0.0/16", LOCATION);
-      assertNotNull(vn);
-      vnetName = vn.name();
-
-      //Subnet needs to be up & running before NIC can be created
-      String subnetName = String.format("s-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
-      Subnet subnet = createDefaultSubnet(resourceGroupName, subnetName, virtualNetworkName, "10.2.0.0/23");
-      assertNotNull(subnet);
-      assertNotNull(subnet.id());
-      subnetId = subnet.id();
-   }
-
-   @AfterClass
-   @Override
-   protected void tearDown() {
-      super.tearDown();
-      URI uri = deleteResourceGroup(resourceGroupName);
-      assertResourceDeleted(uri);
-   }
-
-   @Test
-   public void testValidateDeploymentTemplateLinuxNodeWithOptions() {
-      Long now = System.currentTimeMillis();
-      deploymentName = "jc" + now;
-
-      AzureTemplateOptions options = new AzureTemplateOptions();
-      options.virtualNetworkName(vnetName);
-      options.subnetId(subnetId);
-
-      options.inboundPorts(22, 8080);
-
-      DeploymentTemplateBuilder templateBuilder = getDeploymentTemplateBuilderWithOptions(options);
-
-      DeploymentBody deploymentTemplateBody = templateBuilder.getDeploymentTemplate();
-
-      DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
-
-      String deploymentTemplate = templateBuilder.getDeploymentTemplateJson(properties);
-      deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
-
-      //Validates that template is syntactically correct
-      Deployment deployment = api().validate(deploymentName, deploymentTemplate);
-      assertNotNull(deployment);
-   }
-
-   @Test
-   public void testValidateDeploymentTemplateLinuxNode() {
-      Long now = System.currentTimeMillis();
-      deploymentName = "jc" + now;
-
-      DeploymentTemplateBuilder templateBuilder = getDeploymentTemplateBuilderWithEmptyOptions();
-
-      DeploymentBody deploymentTemplateBody = templateBuilder.getDeploymentTemplate();
-
-      DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
-
-      String deploymentTemplate = templateBuilder.getDeploymentTemplateJson(properties);
-      deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
-
-      //Validates that template is syntactically correct
-      Deployment deployment = api().validate(deploymentName, deploymentTemplate);
-      assertNotNull(deployment);
-   }
-
-   @Test
-   public void testValidateDeploymentTemplateWithCustomOptions() {
-      Long now = System.currentTimeMillis();
-      deploymentName = "jc" + now;
-
-      String rsakey = new String("ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAmfk/QSF0pvnrpdz+Ah2KulGruKU+8FFBdlw938MpOysRdmp7uwpH6Z7+5VNGNdxFIAyc/W3UaZXF9hTsU8+78TlwkZpsr2mzU+ycu37XLAQ8Uv7hjsAN0DkKKPrZ9lgUUfZVKV/8E/JIAs03gIbL6zO3y7eYJQ5fNeZb+nji7tQT+YLpGq/FDegvraPKVMQbCSCZhsHyWhdPLyFlu9/30npZ0ahYOPI/KyZxFDtM/pHp88+ZAk9Icq5owaLRWcJQqrBGWqjbZnHtjdDqvHZ+C0wPhdJZPyfkHOrSYTwSQBXfX4JLRRCz3J1jf62MbQWT1o6Y4JEs1ZP1Skxu6zR96Q== mocktest");
-      TemplateOptions options = new AzureTemplateOptions()
-              .DNSLabelPrefix("mydnslabel")
-              .virtualNetworkAddressPrefix("10.0.0.0/20")
-              .subnetAddressPrefix("10.0.0.0/25")
-              .authorizePublicKey(rsakey);
-
-      ((AzureTemplateOptions)options).virtualNetworkName(vnetName);
-      ((AzureTemplateOptions)options).subnetId(subnetId);
-
-      DeploymentTemplateBuilder templateBuilder = getDeploymentTemplateBuilderWithOptions(options);
-
-      DeploymentBody deploymentTemplateBody = templateBuilder.getDeploymentTemplate();
-
-      DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
-
-      String deploymentTemplate = templateBuilder.getDeploymentTemplateJson(properties);
-      deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
-
-      Deployment deployment = api().validate(deploymentName, deploymentTemplate);
-      assertNotNull(deployment);
-   }
-
-   @Test
-   public void testValidateDeploymentTemplateLinuxNodeWithSSH() {
-      Long now = System.currentTimeMillis();
-      deploymentName = "jc" + now;
-
-      String rsakey = new String("ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAmfk/QSF0pvnrpdz+Ah2KulGruKU+8FFBdlw938MpOysRdmp7uwpH6Z7+5VNGNdxFIAyc/W3UaZXF9hTsU8+78TlwkZpsr2mzU+ycu37XLAQ8Uv7hjsAN0DkKKPrZ9lgUUfZVKV/8E/JIAs03gIbL6zO3y7eYJQ5fNeZb+nji7tQT+YLpGq/FDegvraPKVMQbCSCZhsHyWhdPLyFlu9/30npZ0ahYOPI/KyZxFDtM/pHp88+ZAk9Icq5owaLRWcJQqrBGWqjbZnHtjdDqvHZ+C0wPhdJZPyfkHOrSYTwSQBXfX4JLRRCz3J1jf62MbQWT1o6Y4JEs1ZP1Skxu6zR96Q== mocktest");
-
-      AzureTemplateOptions options = new AzureTemplateOptions();
-      options.virtualNetworkName(vnetName);
-      options.subnetId(subnetId);
-
-      options.authorizePublicKey(rsakey);
-      DeploymentTemplateBuilder templateBuilder = getDeploymentTemplateBuilderWithOptions(options);
-
-      DeploymentBody deploymentTemplateBody = templateBuilder.getDeploymentTemplate();
-
-      DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
-
-      String deploymentTemplate = templateBuilder.getDeploymentTemplateJson(properties);
-      deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
-
-      Deployment deployment = api().validate(deploymentName, deploymentTemplate);
-      assertNotNull(deployment);
-   }
-
-   @Test
-   public void testCreateDeploymentTemplateLinuxNode() {
-      Long now = System.currentTimeMillis();
-      deploymentName = "jc" + now;
-
-      String rsakey = new String("ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAmfk/QSF0pvnrpdz+Ah2KulGruKU+8FFBdlw938MpOysRdmp7uwpH6Z7+5VNGNdxFIAyc/W3UaZXF9hTsU8+78TlwkZpsr2mzU+ycu37XLAQ8Uv7hjsAN0DkKKPrZ9lgUUfZVKV/8E/JIAs03gIbL6zO3y7eYJQ5fNeZb+nji7tQT+YLpGq/FDegvraPKVMQbCSCZhsHyWhdPLyFlu9/30npZ0ahYOPI/KyZxFDtM/pHp88+ZAk9Icq5owaLRWcJQqrBGWqjbZnHtjdDqvHZ+C0wPhdJZPyfkHOrSYTwSQBXfX4JLRRCz3J1jf62MbQWT1o6Y4JEs1ZP1Skxu6zR96Q== mocktest");
-
-      AzureTemplateOptions options = new AzureTemplateOptions();
-      options.virtualNetworkName(vnetName);
-      options.subnetId(subnetId);
-
-      options.authorizePublicKey(rsakey);
-      options.inboundPorts(22, 8080);
-      DeploymentTemplateBuilder templateBuilder = getDeploymentTemplateBuilderWithOptions(options);
-
-      DeploymentBody deploymentTemplateBody = templateBuilder.getDeploymentTemplate();
-      DeploymentProperties properties = DeploymentProperties.create(deploymentTemplateBody);
-
-      String deploymentTemplate = templateBuilder.getDeploymentTemplateJson(properties);
-      deploymentTemplate = UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
-
-      //creates an actual VM using deployment template
-      Deployment deployment = api().create(deploymentName, deploymentTemplate);
-
-      Deployment.ProvisioningState state = Deployment.ProvisioningState.fromValue(deployment.properties().provisioningState());
-      int testTime = 0;
-      while (testTime < maxTestDuration) {
-         if ((state == Deployment.ProvisioningState.SUCCEEDED) ||
-                 (state == Deployment.ProvisioningState.CANCELED) ||
-                 (state == Deployment.ProvisioningState.DELETED) ||
-                 (state == Deployment.ProvisioningState.FAILED)) {
-            break;
-         }
-
-         // sleep a little bit before polling, timeout after a fixed time
-         try {
-            Thread.sleep(pollingInterval * 1000);
-         } catch (InterruptedException e) {
-            e.printStackTrace();
-         }
-         testTime += pollingInterval;
-
-         deployment = api().get(deploymentName);
-         assertNotNull(deployment);
-         state = Deployment.ProvisioningState.fromValue(deployment.properties().provisioningState());
-      }
-      assertTrue(state == Deployment.ProvisioningState.SUCCEEDED);
-      assertNotNull(deployment);
-   }
-
-   private Template getTemplate(TemplateOptions options) {
-      Location provider = (new LocationBuilder()).scope(LocationScope.PROVIDER).id("azurecompute-arm").description("azurecompute-arm").build();
-      Location region = (new LocationBuilder()).scope(LocationScope.REGION).id(LOCATION).description(LOCATIONDESCRIPTION).parent(provider).build();
-
-      OperatingSystem os = OperatingSystem.builder()
-              .family(OsFamily.UBUNTU)
-              .description("14.04.3-LTS")
-              .is64Bit(true)
-              .build();
-
-      Image image = (new ImageBuilder())
-              .id("UbuntuServer14.04.3-LTS")
-              .providerId("Canonical")
-              .name("UbuntuServer")
-              .description("14.04.3-LTS")
-              .version("14.04.3-LTS")
-              .operatingSystem(os)
-              .status(Image.Status.AVAILABLE)
-              .location(region)
-              .build();
-
-      Hardware hardware = (new HardwareBuilder()).id("Standard_A0").build();
-      return new TemplateImpl(image, hardware, region, options);
-   }
-
-   private DeploymentTemplateBuilder getDeploymentTemplateBuilderWithEmptyOptions() {
-      AzureTemplateOptions options = new AzureTemplateOptions();
-      options.virtualNetworkName(vnetName);
-      options.subnetId(subnetId);
-
-      Template template = getTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = api.deploymentTemplateFactory().create(resourceGroupName, deploymentName, template);
-      return templateBuilder;
-   }
-
-   private DeploymentTemplateBuilder getDeploymentTemplateBuilderWithOptions(TemplateOptions options) {
-      Template template = getTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = api.deploymentTemplateFactory().create(resourceGroupName, deploymentName, template);
-      return templateBuilder;
-   }
-
-   private DeploymentApi api() {
-      return api.getDeploymentApi(resourceGroupName);
-   }
-}