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 2018/01/08 14:52:58 UTC

[37/50] [abbrv] jclouds git commit: JCLOUDS-1342 : Azure-ARM Virtual Machine Scale Set Support

JCLOUDS-1342 : Azure-ARM Virtual Machine Scale Set Support


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

Branch: refs/heads/master
Commit: 7368d58ad9534aaea2800860c07d311ff15d98d2
Parents: 8b33c44
Author: jucolon <ju...@microsoft.com>
Authored: Thu Aug 10 16:17:39 2017 -0400
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Nov 21 10:20:07 2017 +0100

----------------------------------------------------------------------
 .../azurecompute/arm/AzureComputeApi.java       |  39 +-
 .../arm/AzureComputeProviderMetadata.java       |  20 +-
 .../azurecompute/arm/domain/Extension.java      |  40 ++
 .../arm/domain/ExtensionProfile.java            |  39 ++
 .../arm/domain/ExtensionProfileSettings.java    |  42 ++
 .../arm/domain/ExtensionProperties.java         |  70 +++
 .../arm/domain/NetworkInterfaceCard.java        |   3 +-
 .../domain/NetworkInterfaceCardProperties.java  |   3 +-
 .../domain/NetworkInterfaceConfiguration.java   |  44 ++
 ...NetworkInterfaceConfigurationProperties.java |  68 +++
 .../domain/NetworkSecurityGroupProperties.java  |   3 +-
 .../azurecompute/arm/domain/VirtualMachine.java |  16 +-
 .../arm/domain/VirtualMachineScaleSet.java      | 110 +++++
 .../VirtualMachineScaleSetDNSSettings.java      |  41 ++
 .../VirtualMachineScaleSetIpConfiguration.java  |  61 +++
 ...achineScaleSetIpConfigurationProperties.java | 118 +++++
 .../VirtualMachineScaleSetNetworkProfile.java   |  58 +++
 ...tualMachineScaleSetNetworkSecurityGroup.java |  39 ++
 .../domain/VirtualMachineScaleSetOSProfile.java | 277 ++++++++++++
 .../arm/domain/VirtualMachineScaleSetPlan.java  |  51 +++
 .../VirtualMachineScaleSetProperties.java       | 106 +++++
 ...ineScaleSetPublicIPAddressConfiguration.java |  59 +++
 ...achineScaleSetPublicIPAddressProperties.java |  54 +++
 .../arm/domain/VirtualMachineScaleSetSKU.java   |  45 ++
 .../VirtualMachineScaleSetUpgradeMode.java      |  35 ++
 .../VirtualMachineScaleSetUpgradePolicy.java    |  35 ++
 ...ualMachineScaleSetVirtualMachineProfile.java |  83 ++++
 .../arm/features/VirtualMachineScaleSetApi.java |  88 ++++
 .../VirtualMachineScaleSetApiLiveTest.java      | 297 ++++++++++++
 .../VirtualMachineScaleSetApiMockTest.java      | 453 +++++++++++++++++++
 .../internal/BaseAzureComputeApiMockTest.java   |   1 +
 .../src/test/resources/virtualmachine.json      |   1 -
 .../resources/virtualmachinescalesetget.json    |  64 +++
 .../virtualmachinescalesetgetwhen404.json       |   6 +
 .../resources/virtualmachinescalesetlist.json   |  93 ++++
 .../virtualmachinescalesetlistwhen404.json      |   6 +
 ...almachinescalesetresponsecreateorupdate.json | 103 +++++
 37 files changed, 2635 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
index 123f6e3..8623580 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
@@ -20,27 +20,28 @@ import java.io.Closeable;
 
 import javax.ws.rs.PathParam;
 
-import org.jclouds.azurecompute.arm.features.AvailabilitySetApi;
-import org.jclouds.azurecompute.arm.features.DeploymentApi;
-import org.jclouds.azurecompute.arm.features.DiskApi;
-import org.jclouds.azurecompute.arm.features.ImageApi;
 import org.jclouds.azurecompute.arm.features.JobApi;
-import org.jclouds.azurecompute.arm.features.LoadBalancerApi;
 import org.jclouds.azurecompute.arm.features.LocationApi;
-import org.jclouds.azurecompute.arm.features.MetricDefinitionsApi;
-import org.jclouds.azurecompute.arm.features.MetricsApi;
-import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi;
-import org.jclouds.azurecompute.arm.features.NetworkSecurityGroupApi;
-import org.jclouds.azurecompute.arm.features.NetworkSecurityRuleApi;
-import org.jclouds.azurecompute.arm.features.OSImageApi;
-import org.jclouds.azurecompute.arm.features.PublicIPAddressApi;
 import org.jclouds.azurecompute.arm.features.ResourceGroupApi;
-import org.jclouds.azurecompute.arm.features.ResourceProviderApi;
 import org.jclouds.azurecompute.arm.features.StorageAccountApi;
 import org.jclouds.azurecompute.arm.features.SubnetApi;
-import org.jclouds.azurecompute.arm.features.VMSizeApi;
-import org.jclouds.azurecompute.arm.features.VirtualMachineApi;
 import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
+import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi;
+import org.jclouds.azurecompute.arm.features.PublicIPAddressApi;
+import org.jclouds.azurecompute.arm.features.VirtualMachineApi;
+import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi;
+import org.jclouds.azurecompute.arm.features.VMSizeApi;
+import org.jclouds.azurecompute.arm.features.OSImageApi;
+import org.jclouds.azurecompute.arm.features.DeploymentApi;
+import org.jclouds.azurecompute.arm.features.NetworkSecurityGroupApi;
+import org.jclouds.azurecompute.arm.features.NetworkSecurityRuleApi;
+import org.jclouds.azurecompute.arm.features.LoadBalancerApi;
+import org.jclouds.azurecompute.arm.features.AvailabilitySetApi;
+import org.jclouds.azurecompute.arm.features.ResourceProviderApi;
+import org.jclouds.azurecompute.arm.features.DiskApi;
+import org.jclouds.azurecompute.arm.features.ImageApi;
+import org.jclouds.azurecompute.arm.features.MetricsApi;
+import org.jclouds.azurecompute.arm.features.MetricDefinitionsApi;
 import org.jclouds.rest.annotations.Delegate;
 
 /**
@@ -125,6 +126,14 @@ public interface AzureComputeApi extends Closeable {
    VirtualMachineApi getVirtualMachineApi(@PathParam("resourceGroup") String resourceGroup);
 
    /**
+    * The Virtual Machine Scale Set API includes operations for managing the virtual machines in your subscription.
+    *
+    * @see <a href="https://msdn.microsoft.com/en-us/library/azure/mt163630.aspx">docs</a>
+    */
+   @Delegate
+   VirtualMachineScaleSetApi getVirtualMachineScaleSetApi(@PathParam("resourceGroup") String resourceGroup);
+
+   /**
     * This Azure Resource Manager API lists all available virtual machine sizes for a subscription in a given region
     *
     * @see <a href="https://msdn.microsoft.com/en-us/library/azure/mt269440.aspx">docs</a>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index eb52746..8849a1f 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -38,26 +38,27 @@ import java.net.URI;
 import java.util.Properties;
 
 import org.jclouds.azurecompute.arm.domain.Region;
-import org.jclouds.azurecompute.arm.features.AvailabilitySetApi;
 import org.jclouds.azurecompute.arm.features.DeploymentApi;
-import org.jclouds.azurecompute.arm.features.ImageApi;
-import org.jclouds.azurecompute.arm.features.LoadBalancerApi;
 import org.jclouds.azurecompute.arm.features.LocationApi;
-import org.jclouds.azurecompute.arm.features.DiskApi;
-import org.jclouds.azurecompute.arm.features.MetricDefinitionsApi;
-import org.jclouds.azurecompute.arm.features.MetricsApi;
 import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi;
 import org.jclouds.azurecompute.arm.features.NetworkSecurityGroupApi;
 import org.jclouds.azurecompute.arm.features.NetworkSecurityRuleApi;
 import org.jclouds.azurecompute.arm.features.OSImageApi;
-import org.jclouds.azurecompute.arm.features.PublicIPAddressApi;
 import org.jclouds.azurecompute.arm.features.ResourceGroupApi;
+import org.jclouds.azurecompute.arm.features.PublicIPAddressApi;
 import org.jclouds.azurecompute.arm.features.ResourceProviderApi;
 import org.jclouds.azurecompute.arm.features.StorageAccountApi;
 import org.jclouds.azurecompute.arm.features.SubnetApi;
+import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
 import org.jclouds.azurecompute.arm.features.VMSizeApi;
 import org.jclouds.azurecompute.arm.features.VirtualMachineApi;
-import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
+import org.jclouds.azurecompute.arm.features.LoadBalancerApi;
+import org.jclouds.azurecompute.arm.features.AvailabilitySetApi;
+import org.jclouds.azurecompute.arm.features.DiskApi;
+import org.jclouds.azurecompute.arm.features.ImageApi;
+import org.jclouds.azurecompute.arm.features.MetricDefinitionsApi;
+import org.jclouds.azurecompute.arm.features.MetricsApi;
+import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.providers.internal.BaseProviderMetadata;
 
@@ -122,7 +123,8 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata {
       properties.put(API_VERSION_PREFIX + ImageApi.class.getSimpleName(), "2016-04-30-preview");
       properties.put(API_VERSION_PREFIX + MetricDefinitionsApi.class.getSimpleName(), "2017-05-01-preview");
       properties.put(API_VERSION_PREFIX + MetricsApi.class.getSimpleName(), "2016-09-01");
-      
+      properties.put(API_VERSION_PREFIX + VirtualMachineScaleSetApi.class.getSimpleName(), "2017-03-30");
+
       return properties;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Extension.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Extension.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Extension.java
new file mode 100644
index 0000000..5eafb04
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Extension.java
@@ -0,0 +1,40 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Extension {
+
+   /**
+    * The name reference of the extension profile
+    */
+   public abstract String name();
+
+   /**
+    * The properties reference of the extension profile
+    */
+   public abstract ExtensionProperties properties();
+
+
+   @SerializedNames({"name", "properties"})
+   public static Extension create(final String name, final ExtensionProperties properties) {
+      return new AutoValue_Extension(name, properties);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfile.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfile.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfile.java
new file mode 100644
index 0000000..92ab4fb
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfile.java
@@ -0,0 +1,39 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class ExtensionProfile {
+
+   /**
+    * The list of extensions of the extension profile
+    */
+   public abstract List<Extension> extensions();
+
+
+   @SerializedNames({"extensions"})
+   public static ExtensionProfile create(final List<Extension> extensions) {
+      return new AutoValue_ExtensionProfile(extensions == null ?
+         ImmutableList.<Extension>of() : ImmutableList.copyOf(extensions));
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfileSettings.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfileSettings.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfileSettings.java
new file mode 100644
index 0000000..265bf76
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProfileSettings.java
@@ -0,0 +1,42 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class ExtensionProfileSettings {
+
+   /**
+    * The fileUris reference of the extension profile settings
+    */
+   public abstract List<String> fileUris();
+
+   /**
+    * The commandToExecute of the extension profile settings
+    */
+   public abstract String commandToExecute();
+
+   @SerializedNames({"fileUris", "commandToExecute"})
+   public static ExtensionProfileSettings create(final List<String> fileUris, final String commandToExecute) {
+      return new AutoValue_ExtensionProfileSettings(fileUris == null ? ImmutableList.<String>of() : ImmutableList.copyOf(fileUris), commandToExecute);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProperties.java
new file mode 100644
index 0000000..d4e8b7f
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ExtensionProperties.java
@@ -0,0 +1,70 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableMap;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Map;
+
+@AutoValue
+public abstract class ExtensionProperties {
+
+   /**
+    * The publisher reference of the extension properties
+    */
+   public abstract String publisher();
+
+   /**
+    * The type reference of the extension properties
+    */
+   public abstract String type();
+
+   /**
+    * The typeHandlerVersion reference of the extension properties
+    */
+   public abstract String typeHandlerVersion();
+
+   /**
+    * The autoUpgradeMinorVersion reference of the extension properties
+    */
+   public abstract Boolean autoUpgradeMinorVersion();
+
+   /**
+    * The ExtensionProfileSettings of the extension properties
+    */
+   public abstract ExtensionProfileSettings settings();
+
+   /**
+    * The list of the protectedSettings of the extension properties
+    */
+   public abstract Map<String, String> protectedSettings();
+
+   @SerializedNames({ "publisher", "type", "typeHandlerVersion",
+      "autoUpgradeMinorVersion", "settings", "protectedSettings"})
+   public static ExtensionProperties create(final String publisher, String type,
+                                            final String typeHandlerVersion,
+                                            final Boolean autoUpgradeMinorVersion,
+                                            final ExtensionProfileSettings settings,
+                                            final Map<String, String> protectedSettings) {
+      return new AutoValue_ExtensionProperties(publisher, type, typeHandlerVersion, autoUpgradeMinorVersion,
+         settings, protectedSettings == null ?
+         ImmutableMap.<String, String>of() : ImmutableMap.copyOf(protectedSettings));
+   }
+}
+

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCard.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCard.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCard.java
index 567addc..66bc1a3 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCard.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCard.java
@@ -51,6 +51,7 @@ public abstract class NetworkInterfaceCard {
                                              final String location,
                                              final NetworkInterfaceCardProperties properties,
                                              final Map<String, String> tags) {
-      return new AutoValue_NetworkInterfaceCard(name, id, etag, location, properties, tags == null ? null : ImmutableMap.copyOf(tags));
+      return new AutoValue_NetworkInterfaceCard(name, id, etag, location, properties,
+         tags != null ? ImmutableMap.copyOf(tags) : null);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java
index 84c8ca2..680d0a2 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java
@@ -32,7 +32,8 @@ public abstract class NetworkInterfaceCardProperties implements Provisionable {
    @Nullable public abstract List<IpConfiguration> ipConfigurations();
    @Nullable public abstract IdReference networkSecurityGroup();
 
-   @SerializedNames({"provisioningState", "resourceGuid", "enableIPForwarding", "ipConfigurations", "networkSecurityGroup"})
+   @SerializedNames({"provisioningState", "resourceGuid", "enableIPForwarding", "ipConfigurations",
+      "networkSecurityGroup"})
    public static NetworkInterfaceCardProperties create(final String provisioningState, final String resourceGuid,
          final Boolean enableIPForwarding, final List<IpConfiguration> ipConfigurations,
          final IdReference networkSecurityGroup) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfiguration.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfiguration.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfiguration.java
new file mode 100644
index 0000000..b2e81b2
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfiguration.java
@@ -0,0 +1,44 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class NetworkInterfaceConfiguration {
+   /**
+    * The name of the NetworkInterfaceConfiguration
+    */
+   @Nullable
+   public abstract String name();
+
+   /**
+    * The networkConfigurationProperties of the NetworkInterfaceConfiguration
+    */
+   @Nullable
+   public abstract NetworkInterfaceConfigurationProperties networkInterfaceConfigurationProperties();
+
+   @SerializedNames({"name", "properties"})
+   public static NetworkInterfaceConfiguration create(
+      final String name, NetworkInterfaceConfigurationProperties networkInterfaceConfigurationProperties) {
+
+      return new AutoValue_NetworkInterfaceConfiguration(name, networkInterfaceConfigurationProperties);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfigurationProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfigurationProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfigurationProperties.java
new file mode 100644
index 0000000..85518b8
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceConfigurationProperties.java
@@ -0,0 +1,68 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+
+@AutoValue
+public abstract class NetworkInterfaceConfigurationProperties {
+    /**
+     * The primary of the NetworkInterfaceConfigurationProperties
+     */
+    @Nullable
+    public abstract Boolean primary();
+
+    /**
+     * The enableAcceleratedNetworking of the NetworkInterfaceConfigurationProperties
+     */
+    @Nullable
+    public abstract Boolean enableAcceleratedNetworking();
+
+    /**
+     * The networkSecurityGroup of the NetworkInterfaceConfigurationProperties
+     */
+    @Nullable
+    public abstract VirtualMachineScaleSetNetworkSecurityGroup networkSecurityGroup();
+
+   /**
+    * The dnsSettings of the NetworkInterfaceConfigurationProperties
+    */
+   @Nullable
+   public abstract VirtualMachineScaleSetDNSSettings dnsSettings();
+
+   /**
+    * The ipConfigurations of the NetworkInterfaceConfigurationProperties
+    */
+   public abstract List<VirtualMachineScaleSetIpConfiguration> ipConfigurations();
+
+
+    @SerializedNames({"primary", "enableAcceleratedNetworking", "networkSecurityGroup", "dnsSettings", "ipConfigurations"})
+    public static NetworkInterfaceConfigurationProperties create(final Boolean primary,
+                                                               final Boolean enableAcceleratedNetworking,
+                                                               final VirtualMachineScaleSetNetworkSecurityGroup networkSecurityGroup,
+                                                               final VirtualMachineScaleSetDNSSettings dnsSettings,
+                                                               final List<VirtualMachineScaleSetIpConfiguration> ipConfigurations) {
+
+        return new AutoValue_NetworkInterfaceConfigurationProperties(primary, enableAcceleratedNetworking,
+                networkSecurityGroup, dnsSettings, ipConfigurations);
+    }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java
index bbc2746..60fb2e6 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java
@@ -45,7 +45,8 @@ public abstract class NetworkSecurityGroupProperties implements Provisionable {
    @Nullable
    public abstract String provisioningState();
 
-   @SerializedNames({"securityRules", "defaultSecurityRules", "networkInterfaces", "subnets", "resourceGuid", "provisioningState"})
+   @SerializedNames({"securityRules", "defaultSecurityRules", "networkInterfaces", "subnets", "resourceGuid",
+      "provisioningState"})
    public static NetworkSecurityGroupProperties create(final List<NetworkSecurityRule> securityRules,
                                           final List<NetworkSecurityRule> defaultSecurityRules,
                                           final List<NetworkInterfaceCard> networkInterfaces,

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java
index 86810e5..c0224f3 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java
@@ -60,7 +60,7 @@ public abstract class VirtualMachine {
     * Specifies the properties of the vm
     */
    public abstract VirtualMachineProperties properties();
-   
+
    /**
     * Specifies the plan, for marketplace images
     */
@@ -69,20 +69,20 @@ public abstract class VirtualMachine {
 
    @SerializedNames({"id", "name", "type", "location", "tags", "properties", "plan"})
    public static VirtualMachine create(final String id, final String name, final String type, final String location,
-         @Nullable final Map<String, String> tags, VirtualMachineProperties properties, @Nullable Plan plan) {
+                                       @Nullable final Map<String, String> tags, VirtualMachineProperties properties, @Nullable Plan plan) {
       return builder().id(id).name(name).type(type).location(location).tags(tags).properties(properties).plan(plan)
-            .build();
+         .build();
    }
-   
+
    public abstract Builder toBuilder();
-   
+
    public static Builder builder() {
       return new AutoValue_VirtualMachine.Builder();
    }
-   
+
    @AutoValue.Builder
    public abstract static class Builder {
-      
+
       public abstract Builder id(String id);
       public abstract Builder name(String name);
       public abstract Builder type(String type);
@@ -90,7 +90,7 @@ public abstract class VirtualMachine {
       public abstract Builder tags(Map<String, String> tags);
       public abstract Builder properties(VirtualMachineProperties properties);
       public abstract Builder plan(Plan plan);
-      
+
       abstract Map<String, String> tags();
 
       abstract VirtualMachine autoBuild();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSet.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSet.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSet.java
new file mode 100644
index 0000000..2fc3f59
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSet.java
@@ -0,0 +1,110 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableMap;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Map;
+
+/**
+ * VirtualMachineScaleSet for subscription
+ */
+@AutoValue
+public abstract class VirtualMachineScaleSet {
+
+   /**
+    * The id of the virtual machine scale set
+    */
+   @Nullable
+   public abstract String id();
+
+   /**
+    * The name of the virtual machine scale set
+    */
+   @Nullable
+   public abstract String name();
+
+   /**
+    * The location of the virtual machine scale set
+    */
+   @Nullable
+   public abstract String location();
+
+   /**
+    * Specifies the sku of the virtual machine scale set
+    */
+   public abstract VirtualMachineScaleSetSKU sku();
+
+   /**
+    * Specifies the tags of the virtual machine scale set
+    */
+   @Nullable
+   public abstract Map<String, String> tags();
+
+
+   /**
+    * Specifies the optional plan of the virtual machine scale set (only for market image)
+    */
+   @Nullable
+   public abstract VirtualMachineScaleSetPlan plan();
+
+   /**
+    * Specifies the properties of the availability set
+    */
+   @Nullable
+   public abstract VirtualMachineScaleSetProperties properties();
+
+   @SerializedNames({  "id", "name", "location", "sku", "tags", "plan", "properties"})
+   public static VirtualMachineScaleSet create(final String id, final String name, final String location,
+                                               VirtualMachineScaleSetSKU sku, final Map<String, String> tags,
+                                               VirtualMachineScaleSetPlan plan,
+                                               VirtualMachineScaleSetProperties properties) {
+      return builder().id(id).name(name).location(location).sku(sku).tags(tags)
+         .plan(plan).properties(properties)
+         .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   private static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSet.Builder();
+   }
+
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+      public abstract Builder name(String name);
+      public abstract Builder location(String location);
+      public abstract Builder sku(VirtualMachineScaleSetSKU sku);
+      public abstract Builder tags(Map<String, String> tags);
+      public abstract Builder plan(VirtualMachineScaleSetPlan plan);
+      public abstract Builder properties(VirtualMachineScaleSetProperties properties);
+
+      abstract Map<String, String> tags();
+      abstract VirtualMachineScaleSet autoBuild();
+
+      public VirtualMachineScaleSet build() {
+         tags(tags() != null ? ImmutableMap.copyOf(tags()) : null);
+         return autoBuild();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetDNSSettings.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetDNSSettings.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetDNSSettings.java
new file mode 100644
index 0000000..d91c68b
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetDNSSettings.java
@@ -0,0 +1,41 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+/**
+ * VirtualMachineScaleSetDNSSettings
+ */
+@AutoValue
+public abstract class VirtualMachineScaleSetDNSSettings {
+   /**
+    * The list of DNS servers of the Virtual Machine Scale Set DNS Settings
+    */
+   public abstract List<String> dnsServers();
+
+   @SerializedNames({"dnsServers"})
+   public static VirtualMachineScaleSetDNSSettings create(final List<String> dnsServers) {
+
+      return new AutoValue_VirtualMachineScaleSetDNSSettings(
+         dnsServers == null ? ImmutableList.<String>of() : ImmutableList.copyOf(dnsServers));
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfiguration.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfiguration.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfiguration.java
new file mode 100644
index 0000000..257072e
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfiguration.java
@@ -0,0 +1,61 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class VirtualMachineScaleSetIpConfiguration {
+
+   /**
+    * The name of the Virtual Machine Scale Set Ip Configuration
+    */
+   @Nullable
+   public abstract String name();
+
+   /**
+    * The properties of the Virtual Machine Scale Set Ip Configuration
+    */
+   @Nullable
+   public abstract VirtualMachineScaleSetIpConfigurationProperties properties();
+
+   @SerializedNames({"name", "properties"})
+   public static VirtualMachineScaleSetIpConfiguration create(
+      final String name,
+      final VirtualMachineScaleSetIpConfigurationProperties properties) {
+      return builder()
+         .name(name)
+         .properties(properties)
+         .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetIpConfiguration.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder name(String name);
+      public abstract Builder properties(VirtualMachineScaleSetIpConfigurationProperties properties);
+      public abstract VirtualMachineScaleSetIpConfiguration build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfigurationProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfigurationProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfigurationProperties.java
new file mode 100644
index 0000000..ee23152
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetIpConfigurationProperties.java
@@ -0,0 +1,118 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class VirtualMachineScaleSetIpConfigurationProperties {
+
+   /**
+    * The public IP address configuration of the Virtual Machine Scale Set Ip Configuration Properties
+    */
+   @Nullable
+   public abstract VirtualMachineScaleSetPublicIPAddressConfiguration publicIPAddressConfiguration();
+
+   /**
+    * The subnet of the Virtual Machine Scale Set Ip Configuration Properties
+    */
+   public abstract Subnet subnet();
+
+   /**
+    * The private IP address version of the Virtual Machine Scale Set Ip Configuration Properties
+    */
+   @Nullable
+   public abstract String privateIPAddressVersion();
+
+   /**
+    * The load balancer backend address pools of the Virtual Machine Scale Set Ip Configuration Properties
+    */
+   public abstract List<IdReference> loadBalancerBackendAddressPools();
+
+   /**
+    * The load balancer inbound nat pools of the Virtual Machine Scale Set Ip Configuration Properties
+    */
+   public abstract List<IdReference> loadBalancerInboundNatPools();
+
+   /**
+    * The application gateway backend address Pools of the Virtual Machine Scale Set Ip Configuration Properties
+    */
+   @Nullable
+   public abstract String applicationGatewayBackendAddressPools();
+
+   @SerializedNames({"publicIPAddressConfiguration", "subnet", "privateIPAddressVersion",
+      "loadBalancerBackendAddressPools", "loadBalancerInboundNatPools", "applicationGatewayBackendAddressPools"})
+   public static VirtualMachineScaleSetIpConfigurationProperties create(
+      final VirtualMachineScaleSetPublicIPAddressConfiguration publicIPAddressConfiguration,
+      final Subnet subnet,
+      final String privateIPAddressVersion,
+      final List<IdReference> loadBalancerBackendAddressPools,
+      final List<IdReference> loadBalancerInboundNatPools,
+      final String applicationGatewayBackendAddressPools)
+
+   {
+
+      return builder()
+         .publicIPAddressConfiguration(publicIPAddressConfiguration)
+         .subnet(subnet)
+         .privateIPAddressVersion(privateIPAddressVersion)
+         .lbBackendAddressPools(loadBalancerBackendAddressPools)
+         .lbInboundNatPools(loadBalancerInboundNatPools)
+         .applicationGatewayBackendAddressPools(applicationGatewayBackendAddressPools)
+         .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetIpConfigurationProperties.Builder()
+              .lbBackendAddressPools(null)
+              .lbInboundNatPools(null);
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder publicIPAddressConfiguration(VirtualMachineScaleSetPublicIPAddressConfiguration publicIPAddressConfiguration);
+
+      public abstract Builder subnet(Subnet subnet);
+
+      public abstract Builder loadBalancerBackendAddressPools(List<IdReference> loadBalancerBackendAddressPools);
+
+      public abstract Builder loadBalancerInboundNatPools(List<IdReference> loadBalancerInboundNatPools);
+
+      public abstract Builder privateIPAddressVersion(String privateIPAddressVersion);
+
+      public Builder lbBackendAddressPools(List<IdReference> loadBalancerBackendAddressPools) {
+         return loadBalancerBackendAddressPools(loadBalancerBackendAddressPools != null ? ImmutableList
+                 .copyOf(loadBalancerBackendAddressPools) : ImmutableList.<IdReference>of());
+      }
+      public Builder lbInboundNatPools(List<IdReference> loadBalancerInboundNatPools) {
+         return loadBalancerInboundNatPools(loadBalancerInboundNatPools != null ? ImmutableList
+         .copyOf(loadBalancerInboundNatPools) : ImmutableList.<IdReference>of());
+      }
+
+      public abstract Builder applicationGatewayBackendAddressPools(String applicationGatewayBackendAddressPools);
+      public abstract VirtualMachineScaleSetIpConfigurationProperties build();
+
+   }
+}
+

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkProfile.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkProfile.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkProfile.java
new file mode 100644
index 0000000..9d4c462
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkProfile.java
@@ -0,0 +1,58 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class VirtualMachineScaleSetNetworkProfile {
+
+   /**
+    * The network interface configurations of the Virtual Machine Scale Set Network Profile
+    */
+   public abstract List<NetworkInterfaceConfiguration> networkInterfaceConfigurations();
+
+
+   @SerializedNames({"networkInterfaceConfigurations"})
+   public static VirtualMachineScaleSetNetworkProfile create(
+      final List<NetworkInterfaceConfiguration> networkInterfaceConfigurations) {
+         return builder()
+            .networkInterfaceConfigurations(networkInterfaceConfigurations == null ?
+               ImmutableList.<NetworkInterfaceConfiguration>of() : ImmutableList.copyOf(networkInterfaceConfigurations) )
+            .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetNetworkProfile.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder networkInterfaceConfigurations(
+         List<NetworkInterfaceConfiguration> networkInterfaceConfigurations);
+
+      public abstract VirtualMachineScaleSetNetworkProfile build();
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkSecurityGroup.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkSecurityGroup.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkSecurityGroup.java
new file mode 100644
index 0000000..8874d50
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetNetworkSecurityGroup.java
@@ -0,0 +1,39 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+/**
+ * Virtual Machine Scale Set Network Security Group
+ */
+@AutoValue
+public abstract class VirtualMachineScaleSetNetworkSecurityGroup {
+   /**
+    * The id of the Virtual Machine Scale Set Network Security Group
+    */
+   @Nullable
+   public abstract String id();
+
+   @SerializedNames({"id"})
+   public static VirtualMachineScaleSetNetworkSecurityGroup create(final String id) {
+
+      return new AutoValue_VirtualMachineScaleSetNetworkSecurityGroup(id);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetOSProfile.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetOSProfile.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetOSProfile.java
new file mode 100644
index 0000000..5593457
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetOSProfile.java
@@ -0,0 +1,277 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.azurecompute.arm.util.GetEnumValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class VirtualMachineScaleSetOSProfile {
+
+   @AutoValue
+   public abstract static class LinuxConfiguration {
+
+
+      @AutoValue
+      public abstract static class SSH {
+
+         @AutoValue
+         public abstract static class SSHPublicKey {
+
+            /**
+             * The path for the SSH public key
+             */
+            @Nullable
+            public abstract String path();
+
+            /**
+             * The key data for the SSH public key
+             */
+            @Nullable
+            public abstract String keyData();
+
+            @SerializedNames({"path", "keyData"})
+            public static SSHPublicKey create(final String path, final String keyData) {
+
+               return new AutoValue_VirtualMachineScaleSetOSProfile_LinuxConfiguration_SSH_SSHPublicKey(
+                  path, keyData);
+            }
+         }
+
+         /**
+          * The list of public keys and paths
+          */
+         @Nullable
+         public abstract List<SSHPublicKey> publicKeys();
+
+         @SerializedNames({"publicKeys"})
+         public static SSH create(final List<SSHPublicKey> publicKeys) {
+
+            return new AutoValue_VirtualMachineScaleSetOSProfile_LinuxConfiguration_SSH(
+               publicKeys);
+         }
+      }
+
+      /**
+       * The authentication method password or ssh
+       */
+      public abstract Boolean disablePasswordAuthentication();
+
+      /**
+       * ssh keys
+       */
+      @Nullable
+      public abstract SSH ssh();
+
+      @SerializedNames({"disablePasswordAuthentication", "ssh"})
+      public static LinuxConfiguration create(final Boolean disablePasswordAuthentication,
+                                              final SSH ssh) {
+
+         return new AutoValue_VirtualMachineScaleSetOSProfile_LinuxConfiguration(disablePasswordAuthentication,
+            ssh);
+      }
+   }
+
+   @AutoValue
+   public abstract static class WindowsConfiguration {
+
+      @AutoValue
+      public abstract static class WinRM {
+         public enum Protocol {
+
+            HTTP("http"),
+            HTTPS("https"),
+            UNRECOGNIZED("Unrecognized");
+
+            private String value;
+
+            Protocol(String value) {
+               this.value = value;
+            }
+
+            public static Protocol fromValue(String value) {
+               return (Protocol) GetEnumValue.fromValueOrDefault(value, Protocol.UNRECOGNIZED);
+            }
+
+            @Override
+            public String toString() {
+               return this.value;
+            }
+         }
+
+         @AutoValue
+         public abstract static class ProtocolListener {
+
+            /**
+             * The protocol for the protcol listener
+             */
+            public abstract Protocol protocol();
+
+            /**
+             * The certificate url or the protcol listener
+             */
+            @Nullable
+            public abstract String certificateUrl();
+
+            @SerializedNames({"protocol", "certificateUrl"})
+            public static ProtocolListener create(final Protocol protocol, final String certificateUrl) {
+
+               return new AutoValue_VirtualMachineScaleSetOSProfile_WindowsConfiguration_WinRM_ProtocolListener(
+                  protocol, certificateUrl);
+            }
+         }
+
+         /**
+          * Map of different settings
+          */
+         public abstract List<ProtocolListener> listeners();
+
+         @SerializedNames({"listeners"})
+         public static WinRM create(final List<ProtocolListener> listeners) {
+            return new AutoValue_VirtualMachineScaleSetOSProfile_WindowsConfiguration_WinRM(listeners == null ? ImmutableList.<ProtocolListener>of() : ImmutableList.copyOf(listeners));
+         }
+      }
+
+      @AutoValue
+      public abstract static class AdditionalUnattendContent {
+
+         public abstract String pass();
+
+         public abstract String component();
+
+         public abstract String settingName();
+
+         public abstract String content();
+
+         @SerializedNames({"pass", "component", "settingName", "content"})
+         public static AdditionalUnattendContent create(final String pass, final String component,
+                                                        final String settingName,
+                                                        final String content) {
+
+            return new AutoValue_VirtualMachineScaleSetOSProfile_WindowsConfiguration_AdditionalUnattendContent(
+               pass, component, settingName, content);
+         }
+      }
+
+      /**
+       * The provision VM Agent true of false.
+       */
+      public abstract boolean provisionVMAgent();
+
+      /**
+       * winRM
+       */
+      @Nullable
+      public abstract WinRM winRM();
+
+      /**
+       * unattend content
+       */
+      public abstract List<AdditionalUnattendContent> additionalUnattendContent();
+
+      /**
+       * is automatic updates enabled
+       */
+      public abstract boolean enableAutomaticUpdates();
+
+      @SerializedNames({"provisionVMAgent", "winRM", "additionalUnattendContent", "enableAutomaticUpdates"})
+      public static WindowsConfiguration create(final boolean provisionVMAgent, final WinRM winRM,
+                                                final List<AdditionalUnattendContent> additionalUnattendContent,
+                                                final boolean enableAutomaticUpdates) {
+
+         return new AutoValue_VirtualMachineScaleSetOSProfile_WindowsConfiguration(provisionVMAgent, winRM,
+            additionalUnattendContent == null ? ImmutableList.<AdditionalUnattendContent>of() : ImmutableList.copyOf(additionalUnattendContent), enableAutomaticUpdates);
+      }
+   }
+
+   /**
+    * The computer name of the VM
+    */
+   @Nullable
+   public abstract String computerNamePrefix();
+
+   /**
+    * The admin username of the VM
+    */
+   @Nullable
+   public abstract String adminUsername();
+
+   /**
+    * The admin password of the VM
+    */
+   @Nullable
+   public abstract String adminPassword();
+
+   /**
+    * The linux configuration of the VM
+    */
+   @Nullable
+   public abstract LinuxConfiguration linuxConfiguration();
+
+   /**
+    * The windows configuration of the VM
+    */
+   @Nullable
+   public abstract WindowsConfiguration windowsConfiguration();
+
+   /**
+    * The Secrets configuration of the VM
+    */
+   public abstract List<Secrets> secrets();
+
+   @SerializedNames({"computerNamePrefix", "adminUsername", "adminPassword", "linuxConfiguration",
+      "windowsConfiguration", "secrets"})
+   public static VirtualMachineScaleSetOSProfile create(final String computerNamePrefix, final String adminUsername,
+                                                        final String adminPassword, final LinuxConfiguration linuxConfiguration,
+                                                        final WindowsConfiguration windowsConfiguration, final List<Secrets> secrets) {
+      return builder()
+         .computerNamePrefix(computerNamePrefix)
+         .adminUsername(adminUsername)
+         .adminPassword(adminPassword)
+         .linuxConfiguration(linuxConfiguration)
+         .windowsConfiguration(windowsConfiguration)
+         ._secrets(secrets)
+         .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetOSProfile.Builder()._secrets(null);
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder computerNamePrefix(String computerNamePrefix);
+      public abstract Builder adminUsername(String adminUsername);
+      public abstract Builder adminPassword(String adminPassword);
+      public abstract Builder linuxConfiguration(LinuxConfiguration linuxConfiguration);
+      public abstract Builder windowsConfiguration(WindowsConfiguration windowsConfiguration);
+      public abstract Builder secrets(List<Secrets> secrets);
+
+      public Builder _secrets(List<Secrets> secrets) {
+         return secrets(secrets != null ? ImmutableList.copyOf(secrets) : ImmutableList.<Secrets>of());
+      }
+
+      public abstract VirtualMachineScaleSetOSProfile build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPlan.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPlan.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPlan.java
new file mode 100644
index 0000000..1864ca7
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPlan.java
@@ -0,0 +1,51 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+/**
+ * SKU
+ */
+@AutoValue
+public abstract class VirtualMachineScaleSetPlan {
+   /**
+    * The name of the Virtual Machine Scale Set Plan
+    */
+   @Nullable
+   public abstract String name();
+
+   /**
+    * The publisher of the Virtual Machine Scale Set Plan
+    */
+   @Nullable
+   public abstract String publisher();
+
+   /**
+    * The product of the Virtual Machine Scale Set Plan
+    */
+   @Nullable
+   public abstract String product();
+
+   @SerializedNames({"name", "publisher", "product"})
+   public static VirtualMachineScaleSetPlan create(final String name, final String publisher, final String product) {
+
+      return new AutoValue_VirtualMachineScaleSetPlan(name, publisher, product);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetProperties.java
new file mode 100644
index 0000000..d737086
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetProperties.java
@@ -0,0 +1,106 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.azurecompute.arm.util.GetEnumValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+
+@AutoValue
+public abstract class VirtualMachineScaleSetProperties {
+
+   public enum ProvisioningState {
+      ACCEPTED,
+      CREATING,
+      READY,
+      CANCELED,
+      FAILED,
+      DELETED,
+      SUCCEEDED,
+      RUNNING,
+      UPDATING,
+      UNRECOGNIZED;
+
+      public static ProvisioningState fromValue(final String text) {
+         return (ProvisioningState) GetEnumValue.fromValueOrDefault(text, ProvisioningState.UNRECOGNIZED);
+      }
+   }
+
+   /**
+    * The singlePlacementGroup of the VirtualMachineScaleSetProperties
+    */
+   @Nullable
+   public abstract Boolean singlePlacementGroup();
+
+   /**
+    * Specifies the over provision of the virtual machine scale set
+    */
+   @Nullable
+   public abstract Boolean overProvision();
+
+   /**
+    * Specifies the upgrade policy of the virtual machine scale set
+    */
+   public abstract VirtualMachineScaleSetUpgradePolicy upgradePolicy();
+
+   /**
+    * Specifies the state of the provision of the virtual machine scale set
+    */
+   @Nullable
+   public abstract ProvisioningState provisioningState();
+
+   /**
+    * Specifies the virtual machine profile of the virtual machine scale set
+    */
+   public abstract VirtualMachineScaleSetVirtualMachineProfile virtualMachineProfile();
+
+   @SerializedNames({"singlePlacementGroup", "overProvision", "upgradePolicy", "provisioningState", "virtualMachineProfile"})
+   public static VirtualMachineScaleSetProperties create(
+           final Boolean singlePlacementGroup,
+           final Boolean overProvision,
+           final VirtualMachineScaleSetUpgradePolicy upgradePolicy,
+           final ProvisioningState provisioningState,
+           final VirtualMachineScaleSetVirtualMachineProfile virtualMachineProfile) {
+      return builder().singlePlacementGroup(singlePlacementGroup).overProvision(overProvision).
+              upgradePolicy(upgradePolicy).provisioningState(provisioningState).virtualMachineProfile(virtualMachineProfile).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   private static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetProperties.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder singlePlacementGroup(Boolean singlePlacementGroup);
+
+      public abstract Builder overProvision(Boolean overProvision);
+
+      public abstract Builder upgradePolicy(VirtualMachineScaleSetUpgradePolicy upgradePolicy);
+
+      public abstract Builder provisioningState(ProvisioningState provisioningState);
+
+      public abstract Builder virtualMachineProfile(VirtualMachineScaleSetVirtualMachineProfile virtualMachineProfile);
+
+      public abstract VirtualMachineScaleSetProperties build();
+   }
+}
+
+

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressConfiguration.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressConfiguration.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressConfiguration.java
new file mode 100644
index 0000000..3347713
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressConfiguration.java
@@ -0,0 +1,59 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class VirtualMachineScaleSetPublicIPAddressConfiguration {
+
+   /**
+    * The name of the Virtual Machine Scale Set Public IP Address Configuration
+    */
+   public abstract String name();
+
+   /**
+    * The properties of the Virtual Machine Scale Set Public IP Address Configuration
+    */
+   public abstract VirtualMachineScaleSetPublicIPAddressProperties properties();
+
+   @SerializedNames({ "name",  "properties" })
+   public static VirtualMachineScaleSetPublicIPAddressConfiguration create(
+      String name,
+      VirtualMachineScaleSetPublicIPAddressProperties properties) {
+         return builder().name(name).properties(properties).build();
+   }
+
+   VirtualMachineScaleSetPublicIPAddressConfiguration() {
+
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetPublicIPAddressConfiguration.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder name(String name);
+      public abstract Builder properties(VirtualMachineScaleSetPublicIPAddressProperties properties);
+      public abstract VirtualMachineScaleSetPublicIPAddressConfiguration build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressProperties.java
new file mode 100644
index 0000000..d01e305
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetPublicIPAddressProperties.java
@@ -0,0 +1,54 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class VirtualMachineScaleSetPublicIPAddressProperties  {
+
+   /**
+    * The idle timeout (in minutes) of the Virtual Machine Scale Set Public IP Address Configuration
+    */
+   @Nullable
+   public abstract Integer idleTimeoutInMinutes();
+
+
+   @SerializedNames({ "idleTimeoutInMinutes" })
+   public static VirtualMachineScaleSetPublicIPAddressProperties create(final Integer idleTimeoutInMinutes) {
+      return builder()
+         .idleTimeoutInMinutes(idleTimeoutInMinutes)
+         .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetPublicIPAddressProperties.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder idleTimeoutInMinutes(Integer idleTimeoutInMinutes);
+
+      public abstract VirtualMachineScaleSetPublicIPAddressProperties build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetSKU.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetSKU.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetSKU.java
new file mode 100644
index 0000000..251562d
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetSKU.java
@@ -0,0 +1,45 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+
+@AutoValue
+public abstract class VirtualMachineScaleSetSKU {
+   /**
+    * The name of the Virtual Machine Scale Set SKU
+    */
+   public abstract String name();
+
+   /**
+    * The tier of the Virtual Machine Scale Set SKU
+    */
+   public abstract String tier();
+
+   /**
+    * The capacity of the Virtual Machine Scale Set SKU
+    */
+   public abstract int capacity();
+
+   @SerializedNames({"name", "tier", "capacity"})
+   public static VirtualMachineScaleSetSKU create(final String name, final String tier, final int capacity) {
+
+      return new AutoValue_VirtualMachineScaleSetSKU(name, tier, capacity);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradeMode.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradeMode.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradeMode.java
new file mode 100644
index 0000000..cca007f
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradeMode.java
@@ -0,0 +1,35 @@
+/*
+ * 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.domain;
+
+import org.jclouds.azurecompute.arm.util.GetEnumValue;
+
+
+public class VirtualMachineScaleSetUpgradeMode {
+   /**
+    * VirtualMachineScaleSetUpgradeMode
+    * **/
+   public enum Status {
+      Manual,
+      Automatic,
+      Unrecognized;
+
+      public static Status fromValue(final String text) {
+         return (Status) GetEnumValue.fromValueOrDefault(text, Status.Unrecognized);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradePolicy.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradePolicy.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradePolicy.java
new file mode 100644
index 0000000..6945e81
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetUpgradePolicy.java
@@ -0,0 +1,35 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+
+@AutoValue
+public abstract class VirtualMachineScaleSetUpgradePolicy {
+   /**
+    * The mode of the Virtual Machine Scale Set Upgrade Policy
+    */
+   public abstract String mode();
+
+   @SerializedNames({"mode"})
+   public static VirtualMachineScaleSetUpgradePolicy create(final String mode) {
+
+      return new AutoValue_VirtualMachineScaleSetUpgradePolicy(mode);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetVirtualMachineProfile.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetVirtualMachineProfile.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetVirtualMachineProfile.java
new file mode 100644
index 0000000..a238467
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineScaleSetVirtualMachineProfile.java
@@ -0,0 +1,83 @@
+/*
+ * 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.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+/**
+ * A virtual machine properties for the virtual machine.
+ */
+@AutoValue
+public abstract class VirtualMachineScaleSetVirtualMachineProfile {
+
+   /**
+    * The storage profile of the Virtual Machine Scale Set Virtual Machine Profile.
+    */
+   public abstract StorageProfile storageProfile();
+
+   /**
+    * The OS profile of the Virtual Machine Scale Set Virtual Machine Profile.
+    */
+   public abstract VirtualMachineScaleSetOSProfile osProfile();
+
+   /**
+    * The network profile of the Virtual Machine Scale Set Virtual Machine Profile
+    */
+   public abstract VirtualMachineScaleSetNetworkProfile networkProfile();
+
+   /**
+    * The extension profile of the Virtual Machine Scale Set Virtual Machine Profile .
+    */
+   public abstract ExtensionProfile extensionProfile();
+
+
+
+   @SerializedNames({"storageProfile", "osProfile", "networkProfile", "extensionProfile"})
+   public static VirtualMachineScaleSetVirtualMachineProfile create(
+      final StorageProfile storageProfile,
+      final VirtualMachineScaleSetOSProfile osProfile,
+      final VirtualMachineScaleSetNetworkProfile networkProfile,
+      final ExtensionProfile extensionProfile) {
+         return builder()
+            .storageProfile(storageProfile)
+            .osProfile(osProfile)
+            .networkProfile(networkProfile)
+            .extensionProfile(extensionProfile)
+            .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VirtualMachineScaleSetVirtualMachineProfile.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder storageProfile(StorageProfile storageProfile);
+
+      public abstract Builder osProfile(VirtualMachineScaleSetOSProfile osProfile);
+
+      public abstract Builder networkProfile(VirtualMachineScaleSetNetworkProfile networkProfile);
+
+      public abstract Builder extensionProfile(ExtensionProfile extensionProfile);
+
+      public abstract VirtualMachineScaleSetVirtualMachineProfile build();
+   }
+}