http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApi.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApi.java new file mode 100644 index 0000000..f6a237f --- /dev/null +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApi.java @@ -0,0 +1,88 @@ +/* + * 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 org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSet; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetSKU; +import org.jclouds.azurecompute.arm.filters.ApiVersionFilter; +import org.jclouds.azurecompute.arm.functions.URIParser; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.filters.OAuthFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SelectJson; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.binders.BindToJsonPayload; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.DELETE; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; +import java.io.Closeable; +import java.net.URI; +import java.util.List; +import java.util.Map; + +/** + * The Virtual Machine Scale Set API includes operations for managing the virtual machines in your subscription. + * + * @see <a href="https://docs.microsoft.com/en-us/rest/api/virtualmachinescalesets/">docs</a> + */ +@Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/VirtualMachineScaleSets") +@RequestFilters({OAuthFilter.class, ApiVersionFilter.class}) +@Consumes(MediaType.APPLICATION_JSON) +public interface VirtualMachineScaleSetApi extends Closeable { + + @Named("virtualmachinescaleset:list") + @GET + @SelectJson("value") + @Fallback(EmptyListOnNotFoundOr404.class) + List<VirtualMachineScaleSet> list(); + + @Named("virtualmachinescaleset:get") + @Path("/{name}") + @GET + @Fallback(NullOnNotFoundOr404.class) + VirtualMachineScaleSet get(@PathParam("name") String name); + + @Named("virtualmachinescaleset:createOrUpdate") + @MapBinder(BindToJsonPayload.class) + @Path("/{name}") + @PUT + VirtualMachineScaleSet createOrUpdate(@PathParam("name") String name, + @PayloadParam("location") String location, + @PayloadParam("sku") VirtualMachineScaleSetSKU sku, + @Nullable @PayloadParam("tags") Map<String, String> tags, + @PayloadParam("properties") VirtualMachineScaleSetProperties properties); + + @Named("virtualmachinescaleset:delete") + @Path("/{name}") + @DELETE + @ResponseParser(URIParser.class) + @Fallback(NullOnNotFoundOr404.class) + URI delete(@PathParam("name") String name); + +}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiLiveTest.java new file mode 100644 index 0000000..d827d70 --- /dev/null +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiLiveTest.java @@ -0,0 +1,297 @@ +/* + * 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 com.google.common.collect.ImmutableMap; +import org.jclouds.azurecompute.arm.domain.DataDisk; +import org.jclouds.azurecompute.arm.domain.Extension; +import org.jclouds.azurecompute.arm.domain.ExtensionProfile; +import org.jclouds.azurecompute.arm.domain.ExtensionProfileSettings; +import org.jclouds.azurecompute.arm.domain.ExtensionProperties; +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.ManagedDiskParameters; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceConfiguration; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceConfigurationProperties; +import org.jclouds.azurecompute.arm.domain.NetworkProfile; +import org.jclouds.azurecompute.arm.domain.OSDisk; +import org.jclouds.azurecompute.arm.domain.StorageProfile; +import org.jclouds.azurecompute.arm.domain.Subnet; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSet; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetDNSSettings; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetIpConfiguration; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetIpConfigurationProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetNetworkProfile; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetNetworkSecurityGroup; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetOSProfile; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetPublicIPAddressConfiguration; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetPublicIPAddressProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetSKU; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetUpgradePolicy; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetVirtualMachineProfile; +import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.Arrays; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +@Test(groups = "live", testName = "VirtualMachineScaleSetApiLiveTest") +public class VirtualMachineScaleSetApiLiveTest extends BaseAzureComputeApiLiveTest { + + private String subscriptionid; + private String vmssName; + private VirtualMachineScaleSetSKU SKU; + private String nicName; + private String virtualNetworkName; + private String subnetId; + private Subnet subnet; + + @BeforeClass + @Override + public void setup() { + super.setup(); + subscriptionid = getSubscriptionId(); + + createTestResourceGroup(); //BASE: Creates a random resource group using the properties location + + 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 + assertNotNull(createDefaultVirtualNetwork(resourceGroupName, virtualNetworkName, "10.2.0.0/16", LOCATION)); + + //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")); + this.subnet = createDefaultSubnet(resourceGroupName, subnetName, virtualNetworkName, "10.2.0.0/23"); + assertNotNull(subnet); + assertNotNull(subnet.id()); + this.subnetId = subnet.id(); + + + vmssName = String.format("%3.24s", System.getProperty("user.name") + RAND + this.getClass().getSimpleName()).toLowerCase().substring(0, 15); + } + + private VirtualMachineScaleSetApi api() { + return api.getVirtualMachineScaleSetApi(resourceGroupName); + } + + @Test + public void testCreate() { + VirtualMachineScaleSet vmss = api().createOrUpdate(vmssName, LOCATIONDESCRIPTION, getSKU(), + Collections.<String, String>emptyMap(), getProperties()); + assertTrue(!vmss.name().isEmpty()); +// waitUntilReady(vmssName); + } + + @Test(dependsOnMethods = "testCreate") + public void testList() throws InterruptedException { + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourceGroupName); + assertEquals(vmssAPI.list().size(), 1); + } + + @Test(dependsOnMethods = "testList") + public void testGet() { + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourceGroupName); + assertEquals(vmssAPI.get(vmssName).name(), vmssName); + } + + @Test(dependsOnMethods = "testGet", alwaysRun = true) + public void testDelete() throws Exception { + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourceGroupName); + URI uri = vmssAPI.delete(vmssName); + assertResourceDeleted(uri); + } + + protected void assertResourceDeleted(URI uri) { + if (uri != null) { + assertTrue(resourceDeleted.apply(uri), + String.format("Resource %s was not terminated in the configured timeout", uri)); + } + } + + + /** + * Create a standard SKU + * + * @return VirtualMachineScaleSetSKU + */ + public VirtualMachineScaleSetSKU getSKU() { + return VirtualMachineScaleSetSKU.create("Standard_A1", "Standard", 10); + } + + private VirtualMachineScaleSetUpgradePolicy getUpgradePolicy() { + return VirtualMachineScaleSetUpgradePolicy.create("Manual"); + } + + private List<DataDisk> getDataDisks() { + List<DataDisk> datadisks = new ArrayList<DataDisk>(); + + datadisks.add(DataDisk.create(null, "10", 1, null, + null, "FromImage", + "None", getManagedDiskParameters(), + null)); + + return datadisks; + } + + private StorageProfile getStorageProfile() { + return StorageProfile.create(getWindowsImageReference(), getWindowsOSDisk(), getDataDisks()); + } + + private StorageProfile getWindowsStorageProfile_Default() { + return StorageProfile.create(getWindowsImageReference(), getWindowsOSDisk(), null); + } + + private StorageProfile getLinuxStorageProfile_Default() { + return StorageProfile.create(getLinuxImageReference(), getLinuxOSDisk(), null); + } + + private ManagedDiskParameters getManagedDiskParameters() { + return ManagedDiskParameters.create(null, "Standard_LRS"); + } + + private OSDisk getWindowsOSDisk() { + return OSDisk.create("Windows", null, null, null, "FromImage", + null, getManagedDiskParameters(), null); + } + + private OSDisk getLinuxOSDisk() { + return OSDisk.create("Linux", null, null, null, "FromImage", + null, getManagedDiskParameters(), null); + } + + private ImageReference getWindowsImageReference() { + return ImageReference.create(null, "Microsoft.Windows", "Windows2016", + "Enterprise", "latest"); + } + + private ImageReference getLinuxImageReference() { + return ImageReference.create(null, "Canonical", "UbuntuServer", + "16.04-LTS", "latest"); + } + + private VirtualMachineScaleSetOSProfile getOSProfile() { + VirtualMachineScaleSetOSProfile.LinuxConfiguration linuxConfiguration = + VirtualMachineScaleSetOSProfile.LinuxConfiguration.create(false, null); + VirtualMachineScaleSetOSProfile.WindowsConfiguration windowsConfiguration = null; + + return VirtualMachineScaleSetOSProfile.create(vmssName, "jclouds", "jClouds1!", + linuxConfiguration, windowsConfiguration, null); + } + + + private VirtualMachineScaleSetNetworkProfile getNetworkProfile() { + List<NetworkProfile.NetworkInterface> networkInterfacesList = new ArrayList<NetworkProfile.NetworkInterface>(); + + NetworkInterfaceCard nic = createNetworkInterfaceCard(resourceGroupName, "jc-nic-" + RAND, LOCATION, "ipConfig-" + RAND); + assertNotNull(nic); + networkInterfacesList.add(NetworkProfile.NetworkInterface.create(nic.id(), NetworkProfile.NetworkInterface.NetworkInterfaceProperties.create(true))); + + List<NetworkInterfaceConfiguration> networkInterfaceConfigurations = new ArrayList<NetworkInterfaceConfiguration>(); + List<VirtualMachineScaleSetIpConfiguration> virtualMachineScaleSetIpConfigurations = new ArrayList<VirtualMachineScaleSetIpConfiguration>(); + + + VirtualMachineScaleSetPublicIPAddressConfiguration publicIPAddressConfiguration = + VirtualMachineScaleSetPublicIPAddressConfiguration.create("pub1", VirtualMachineScaleSetPublicIPAddressProperties.create(15)); + + + VirtualMachineScaleSetIpConfigurationProperties virtualMachineScaleSetIpConfigurationProperties = + VirtualMachineScaleSetIpConfigurationProperties.create(publicIPAddressConfiguration, + this.subnet, "IPv4", null, + null, null); + + VirtualMachineScaleSetIpConfiguration virtualMachineScaleSetIpConfiguration = + VirtualMachineScaleSetIpConfiguration.create("ipconfig1", virtualMachineScaleSetIpConfigurationProperties); + + virtualMachineScaleSetIpConfigurations.add(virtualMachineScaleSetIpConfiguration); + + VirtualMachineScaleSetNetworkSecurityGroup networkSecurityGroup = null; + + ArrayList<String> dnsList = new ArrayList<String>(); + dnsList.add("8.8.8.8"); + VirtualMachineScaleSetDNSSettings dnsSettings = VirtualMachineScaleSetDNSSettings.create(dnsList); + + NetworkInterfaceConfigurationProperties networkInterfaceConfigurationProperties = + NetworkInterfaceConfigurationProperties.create(true, false, networkSecurityGroup, dnsSettings, virtualMachineScaleSetIpConfigurations); + NetworkInterfaceConfiguration networkInterfaceConfiguration = NetworkInterfaceConfiguration.create("nicconfig1", networkInterfaceConfigurationProperties); + networkInterfaceConfigurations.add(networkInterfaceConfiguration); + + return VirtualMachineScaleSetNetworkProfile.create(networkInterfaceConfigurations); + } + + + private ExtensionProfile getExtensionProfile() { + List<Extension> extensions = new ArrayList<Extension>(); + + List<String> uris = new ArrayList<String>(); + uris.add("https://mystorage1.blob.core.windows.net/winvmextekfacnt/SampleCmd_1.cmd"); + ExtensionProfileSettings extensionProfileSettings = ExtensionProfileSettings.create(uris, "SampleCmd_1.cmd"); + + Map<String, String> protectedSettings = new HashMap<String, String>(); + protectedSettings.put("StorageAccountKey", "jclouds-accountkey"); + + ExtensionProperties extensionProperties = ExtensionProperties.create("Microsoft.compute", "CustomScriptExtension", + "1.1", false, extensionProfileSettings, + protectedSettings); + + Extension extension = Extension.create("extensionName", extensionProperties); + extensions.add(extension); + + return ExtensionProfile.create(extensions); + } + + + private VirtualMachineScaleSetVirtualMachineProfile getVirtualMachineProfile() { + return VirtualMachineScaleSetVirtualMachineProfile.create(getLinuxStorageProfile_Default(), getOSProfile(), getNetworkProfile(), getExtensionProfile()); + } + + public VirtualMachineScaleSetProperties getProperties() { + + return VirtualMachineScaleSetProperties.create(null, null, getUpgradePolicy(), null, getVirtualMachineProfile()); + } + + private NetworkInterfaceCard createNetworkInterfaceCard(final String resourceGroupName, String networkInterfaceCardName, String locationName, String ipConfigurationName) { + //Create properties object + final NetworkInterfaceCardProperties networkInterfaceCardProperties = NetworkInterfaceCardProperties + .builder() + .ipConfigurations( + Arrays.asList(IpConfiguration.create(ipConfigurationName, null, null, null, IpConfigurationProperties + .create(null, null, "Dynamic", IdReference.create(subnetId), null, null, null)))).build(); + + final Map<String, String> tags = ImmutableMap.of("jclouds", "livetest"); + return api.getNetworkInterfaceCardApi(resourceGroupName).createOrUpdate(networkInterfaceCardName, locationName, networkInterfaceCardProperties, tags); + } + + public String getSubscriptionid() { + return subscriptionid; + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiMockTest.java new file mode 100644 index 0000000..e0420fa --- /dev/null +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineScaleSetApiMockTest.java @@ -0,0 +1,453 @@ +/* + * 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 com.google.common.collect.ImmutableMap; +import org.jclouds.azurecompute.arm.domain.DataDisk; +import org.jclouds.azurecompute.arm.domain.Extension; +import org.jclouds.azurecompute.arm.domain.ExtensionProfile; +import org.jclouds.azurecompute.arm.domain.ExtensionProfileSettings; +import org.jclouds.azurecompute.arm.domain.ExtensionProperties; +import org.jclouds.azurecompute.arm.domain.IdReference; +import org.jclouds.azurecompute.arm.domain.ImageReference; +import org.jclouds.azurecompute.arm.domain.ManagedDiskParameters; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceConfiguration; +import org.jclouds.azurecompute.arm.domain.NetworkInterfaceConfigurationProperties; +import org.jclouds.azurecompute.arm.domain.NetworkProfile; +import org.jclouds.azurecompute.arm.domain.OSDisk; +import org.jclouds.azurecompute.arm.domain.Secrets; +import org.jclouds.azurecompute.arm.domain.StorageProfile; +import org.jclouds.azurecompute.arm.domain.Subnet; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSet; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetDNSSettings; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetIpConfiguration; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetIpConfigurationProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetNetworkProfile; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetOSProfile; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetPublicIPAddressConfiguration; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetPublicIPAddressProperties; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetSKU; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetUpgradePolicy; +import org.jclouds.azurecompute.arm.domain.VirtualMachineScaleSetVirtualMachineProfile; +import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.google.common.collect.Iterables.isEmpty; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + + +@Test(groups = "unit", testName = "VirtualMachineScaleSetAPIMockTest", singleThreaded = true) +public class VirtualMachineScaleSetApiMockTest extends BaseAzureComputeApiMockTest { + + private final String resourcegroup = "myresourcegroup"; + private final String vmssname = "jclouds-vmssname"; + + public void testGet() throws InterruptedException { + server.enqueue(jsonResponse("/virtualmachinescalesetget.json").setResponseCode(200)); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourcegroup); + assertEquals(vmssAPI.get(vmssname).name(), vmssname); + assertSent(server, + "GET", "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/" + + "providers/Microsoft.Compute" + + "/VirtualMachineScaleSets/jclouds-vmssname?api-version=2017-03-30"); + } + + public void testGetWhen404() throws InterruptedException { + server.enqueue(jsonResponse("/virtualmachinescalesetgetwhen404.json").setResponseCode(404)); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourcegroup); + VirtualMachineScaleSet vmss = vmssAPI.get(vmssname + 1); + assertSent(server, + "GET", + "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/" + + "Microsoft.Compute/VirtualMachineScaleSets/" + + vmssname + "1?api-version=2017-03-30"); + assertNull(vmss); + } + + public void testCreateOrUpdate() throws InterruptedException { + server.enqueue( + jsonResponse( + "/virtualmachinescalesetresponsecreateorupdate.json").setResponseCode(200)); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourcegroup); + VirtualMachineScaleSet vmss = CreateOrUpdateVMSS(vmssAPI); + + assertNotNull(vmss); + assertSent(server, + "PUT", + "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/" + + "Microsoft.Compute" + + "/VirtualMachineScaleSets/" + vmssname + "?api-version=2017-03-30", + "{\n" + + " \"location\": \"eastus\",\n" + + " \"sku\": {\n" + + " \"name\": \"Standard_A1\",\n" + + " \"tier\": \"Standard\",\n" + + " \"capacity\": 10\n" + + " },\n" + + " \"properties\": {\n" + + " \"singlePlacementGroup\": true,\n" + + " \"overProvision\": true,\n" + + " \"upgradePolicy\": {\n" + + " \"mode\": \"Manual\"\n" + + " },\n" + + " \"virtualMachineProfile\": {\n" + + " \"storageProfile\": {\n" + + " \"imageReference\": {\n" + + " \"publisher\": \"Canonical\",\n" + + " \"offer\": \"UbuntuServer\",\n" + + " \"sku\": \"16.04-LTS\",\n" + + " \"version\": \"latest\"\n" + + " },\n" + + " \"osDisk\": {\n" + + " \"osType\": \"Windows\",\n" + + " \"createOption\": \"FromImage\",\n" + + " \"managedDisk\": {\n" + + " \"storageAccountType\": \"Standard_LRS\"\n" + + " }\n" + + " },\n" + + " \"dataDisks\": [{\n" + + " \"diskSizeGB\": \"10\",\n" + + " \"lun\": 1,\n" + + " \"createOption\": \"Unrecognized\",\n" + + " \"caching\": \"None\",\n" + + " \"managedDisk\": {\n" + + " \"storageAccountType\": \"Standard_LRS\"\n" + + " }\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"osProfile\": {\n" + + " \"computerNamePrefix\": \"jclouds-vmssname\",\n" + + " \"adminUsername\": \"admin\",\n" + + " \"adminPassword\": \"password\",\n" + + " \"linuxConfiguration\": {\n" + + " \"disablePasswordAuthentication\": false\n" + + " },\n" + + " \"secrets\": []\n" + + " },\n" + + " \"networkProfile\": {\n" + + " \"networkInterfaceConfigurations\": [{\n" + + " \"name\": \"nicconfig1\",\n" + + " \"properties\": {\n" + + " \"primary\": true,\n" + + " \"enableAcceleratedNetworking\": false,\n" + + " \"dnsSettings\": {\n" + + " \"dnsServers\": [\"8.8.8.8\"]\n" + + " },\n" + + " \"ipConfigurations\": [{\n" + + " \"name\": \"ipconfig1\",\n" + + " \"properties\": {\n" + + " \"publicIPAddressConfiguration\": {\n" + + " \"name\": \"pub1\",\n" + + " \"properties\": {\n" + + " \"idleTimeoutInMinutes\": 15\n" + + " }\n" + + " },\n" + + " \"subnet\": {\n" + + " \"name\": \"virtualNetworkName\",\n" + + " \"id\": \"/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/" + + "jcloud-eastus/providers/Microsoft.Network/virtualNetworks/" + + "jclouds-eastus-virtualNetworkName/subnets/jclouds-eastus-subnet\",\n" + + " \"properties\": {}\n" + + " },\n" + + " \"privateIPAddressVersion\": \"IPv4\",\n" + + " \"loadBalancerBackendAddressPools\": [],\n" + + " \"loadBalancerInboundNatPools\": []\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"extensionProfile\": {\n" + + " \"extensions\": [{\n" + + " \"name\": \"extensionName\",\n" + + " \"properties\": {\n" + + " \"publisher\": \"Microsoft.compute\",\n" + + " \"type\": \"CustomScriptExtension\",\n" + + " \"typeHandlerVersion\": \"1.1\",\n" + + " \"autoUpgradeMinorVersion\": false,\n" + + " \"settings\": {\n" + + " \"fileUris\": [\"https://mystorage1.blob.core.windows.net/winvmextekfacnt/" + + "SampleCmd_1.cmd\"],\n" + + " \"commandToExecute\": \"SampleCmd_1.cmd\"\n" + + " },\n" + + " \"protectedSettings\": {\n" + + " \"StorageAccountKey\": \"jclouds-accountkey\"\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + "}\n" + ); + } + + private VirtualMachineScaleSet CreateOrUpdateVMSS(VirtualMachineScaleSetApi vmssAPI) { + return vmssAPI.createOrUpdate( + vmssname, + "eastus", + VirtualMachineScaleSetSKU.create( + "Standard_A1", + "Standard", + 10), + null, + VirtualMachineScaleSetProperties.create( + true, + true, + VirtualMachineScaleSetUpgradePolicy.create("Manual"), + null, + VirtualMachineScaleSetVirtualMachineProfile.create( + StorageProfile.create( + ImageReference.create( + null, + "Canonical", + "UbuntuServer", + "16.04-LTS", + "latest"), + OSDisk.create( + "Windows", + null, + null, + null, + "FromImage", + null, + ManagedDiskParameters.create( + null, + "Standard_LRS"), + null), + Arrays.asList(DataDisk.create( + null, + "10", + 1, + null, + null, + "FromImage", + "None", + ManagedDiskParameters.create( + null, + "Standard_LRS"), + null))), + VirtualMachineScaleSetOSProfile.create( + "jclouds-vmssname", + "admin", + "password", + VirtualMachineScaleSetOSProfile.LinuxConfiguration.create( + false, + null), + null, + new ArrayList<Secrets>()), + getNetworkProfile(), + getExtensionProfile() + + ) + )); + } + + + private VirtualMachineScaleSetNetworkProfile getNetworkProfile() { + List<NetworkProfile.NetworkInterface> networkInterfacesList = + new ArrayList<NetworkProfile.NetworkInterface>(); + + NetworkInterfaceCard nic = + createNetworkInterfaceCard( + "jc-nic-" + 123, + "eastus"); + networkInterfacesList.add(NetworkProfile.NetworkInterface.create( + nic.id(), + NetworkProfile.NetworkInterface.NetworkInterfaceProperties.create(true))); + + List<NetworkInterfaceConfiguration> networkInterfaceConfigurations = + new ArrayList<NetworkInterfaceConfiguration>(); + List<VirtualMachineScaleSetIpConfiguration> virtualMachineScaleSetIpConfigurations = + new ArrayList<VirtualMachineScaleSetIpConfiguration>(); + + + VirtualMachineScaleSetPublicIPAddressConfiguration publicIPAddressConfiguration = + VirtualMachineScaleSetPublicIPAddressConfiguration.create( + "pub1", + VirtualMachineScaleSetPublicIPAddressProperties.create(15)); + + + VirtualMachineScaleSetIpConfigurationProperties virtualMachineScaleSetIpConfigurationProperties = + VirtualMachineScaleSetIpConfigurationProperties.create( + publicIPAddressConfiguration, + createDefaultSubnet( + "virtualNetworkName" + ), + "IPv4", + null, + null, + null); + + VirtualMachineScaleSetIpConfiguration virtualMachineScaleSetIpConfiguration = + VirtualMachineScaleSetIpConfiguration.create( + "ipconfig1", + virtualMachineScaleSetIpConfigurationProperties); + + virtualMachineScaleSetIpConfigurations.add(virtualMachineScaleSetIpConfiguration); + + ArrayList<String> dnsList = new ArrayList<String>(); + dnsList.add("8.8.8.8"); + VirtualMachineScaleSetDNSSettings dnsSettings = VirtualMachineScaleSetDNSSettings.create(dnsList); + + NetworkInterfaceConfigurationProperties networkInterfaceConfigurationProperties = + NetworkInterfaceConfigurationProperties.create( + true, + false, + null, + dnsSettings, + virtualMachineScaleSetIpConfigurations); + NetworkInterfaceConfiguration networkInterfaceConfiguration = + NetworkInterfaceConfiguration.create( + "nicconfig1", + networkInterfaceConfigurationProperties); + networkInterfaceConfigurations.add(networkInterfaceConfiguration); + + return VirtualMachineScaleSetNetworkProfile.create(networkInterfaceConfigurations); + } + + + private NetworkInterfaceCard createNetworkInterfaceCard( + String networkInterfaceCardName, String locationName) { + //Create properties object + NetworkInterfaceCardProperties networkInterfaceCardProperties = + NetworkInterfaceCardProperties.create( + null, + null, + false, + null, + IdReference.create( + "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/" + + "jcloud-eastus/providers/" + + "Microsoft.Network/virtualNetworks/" + + "jclouds-eastus-virtualNetworkName/subnets/" + + "jclouds-eastus-subnet") + ); + + Map<String, String> tags = ImmutableMap.of("jclouds", "livetest"); + return NetworkInterfaceCard.create( + networkInterfaceCardName, + "", + null, + locationName, + networkInterfaceCardProperties, tags); + } + + protected Subnet createDefaultSubnet(final String subnetName) { + Subnet.SubnetProperties properties = Subnet.SubnetProperties.create( + null, + null, + null); + return Subnet.create( + subnetName, + "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/jcloud-eastus/providers/" + + "Microsoft.Network/virtualNetworks/jclouds-eastus-virtualNetworkName/subnets/" + + "jclouds-eastus-subnet", + null, + properties); + } + + private ExtensionProfile getExtensionProfile() { + List<Extension> extensions = new ArrayList<Extension>(); + + List<String> uris = new ArrayList<String>(); + uris.add("https://mystorage1.blob.core.windows.net/winvmextekfacnt/SampleCmd_1.cmd"); + + Map<String, String> protectedSettings = new HashMap<String, String>(); + protectedSettings.put("StorageAccountKey", "jclouds-accountkey"); + + Extension extension = Extension.create( + "extensionName", + ExtensionProperties.create( + "Microsoft.compute", + "CustomScriptExtension", + "1.1", + false, + ExtensionProfileSettings.create( + uris, + "SampleCmd_1.cmd"), + protectedSettings)); + extensions.add(extension); + + return ExtensionProfile.create(extensions); + } + + public void testList() throws InterruptedException { + server.enqueue(jsonResponse("/virtualmachinescalesetlist.json").setResponseCode(200)); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourcegroup); + assertEquals(vmssAPI.list().size(), 1); + assertSent(server, + "GET", + "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/" + + "Microsoft.Compute" + + "/VirtualMachineScaleSets?api-version=2017-03-30"); + } + + public void testListWhen404() throws InterruptedException { + server.enqueue( + jsonResponse("/virtualmachinescalesetlistwhen404.json").setResponseCode(404)); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi( + resourcegroup + "1"); + List<VirtualMachineScaleSet> vmssList = vmssAPI.list(); + assertSent(server, + "GET", + "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup1/providers/" + + "Microsoft.Compute" + + "/VirtualMachineScaleSets?api-version=2017-03-30"); + assertTrue(isEmpty(vmssList)); + } + + + public void testDeleteWhen404() throws InterruptedException { + server.enqueue(jsonResponse("/virtualmachinescalesetlist.json").setResponseCode(404)); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourcegroup); + assertNull(vmssAPI.delete(vmssname)); + assertSent(server, + "DELETE", + "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/" + + "Microsoft.Compute" + + "/VirtualMachineScaleSets/" + vmssname + "?api-version=2017-03-30"); + + } + + public void testDelete() throws InterruptedException { + server.enqueue(response202WithHeader()); + final VirtualMachineScaleSetApi vmssAPI = api.getVirtualMachineScaleSetApi(resourcegroup); + assertNotNull(vmssAPI.delete(vmssname)); + assertSent(server, + "DELETE", + "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/" + + "Microsoft.Compute" + + "/VirtualMachineScaleSets/jclouds-vmssname?api-version=2017-03-30"); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiMockTest.java index f704e5f..1a83407 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiMockTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiMockTest.java @@ -75,6 +75,7 @@ public class BaseAzureComputeApiMockTest { protected Properties setupProperties() { Properties properties = new Properties(); + properties.put(CREDENTIAL_TYPE, BEARER_TOKEN_CREDENTIALS.toString()); properties.put("oauth.endpoint", "https://login.microsoftonline.com/tenant-id/oauth2/token"); return properties; http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/resources/virtualmachine.json ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachine.json b/providers/azurecompute-arm/src/test/resources/virtualmachine.json index 17d89b5..e3e8d6b 100644 --- a/providers/azurecompute-arm/src/test/resources/virtualmachine.json +++ b/providers/azurecompute-arm/src/test/resources/virtualmachine.json @@ -36,7 +36,6 @@ "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", "storageAccountType": "Standard_LRS" }, - "createOption":"Empty", "caching": "ReadWrite" } ] http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetget.json ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetget.json b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetget.json new file mode 100644 index 0000000..c99eb39 --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetget.json @@ -0,0 +1,64 @@ +{ + "sku": { + "name": "Standard_A1", + "tier": "Standard", + "capacity": 4 + }, + "properties": { + "singlePlacementGroup": true, + "upgradePolicy": { + "mode": "Manual" + }, + "virtualMachineProfile": { + "osProfile": { + "computerNamePrefix": "vmmsprefix", + "adminUsername": "jclouds", + "linuxConfiguration": { + "disablePasswordAuthentication": false + }, + "secrets": [] + }, + "storageProfile": { + "osDisk": { + "createOption": "FromImage", + "caching": "None", + "managedDisk": { + "storageAccountType": "Standard_LRS" + } + }, + "imageReference": { + "publisher": "Canonical", + "offer": "UbuntuServer", + "sku": "16.04-LTS", + "version": "latest" + } + }, + "networkProfile": {"networkInterfaceConfigurations":[{"name":"nicconfig1","properties":{"primary":true,"enableAcceleratedNetworking":false,"dnsSettings":{"dnsServers":["8.8.8.8"]},"ipConfigurations":[{"name":"ipconfig1","properties":{"publicIPAddressConfiguration":{"name":"pub1","properties":{"idleTimeoutInMinutes":15}},"subnet":{"id":"/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/jcloud-eastus/providers/Microsoft.Network/virtualNetworks/jclouds-eastus-virtualNetworkName/subnets/jclouds-eastus-subnet"},"privateIPAddressVersion":"IPv4"}}]}}]}, + "extensionProfile": { + "extensions": [ + { + "properties": { + "publisher": "Microsoft.compute", + "type": "CustomScriptExtension", + "typeHandlerVersion": "1.1", + "autoUpgradeMinorVersion": false, + "settings": {"fileUris":["https://mystorage1.blob.core.windows.net/winvmextekfacnt/SampleCmd_1.cmd"],"commandToExecute":"SampleCmd_1.cmd"} + }, + "name": "extensionName" + } + ] + } + }, + "provisioningState": "Creating", + "overprovision": true, + "uniqueId": "xxxxx-xxxx-xxxx-xxxx-xxxxxx" + }, + "type": "Microsoft.Compute/virtualMachineScaleSets", + "location": "eastus", + "tags": { + "test": "test" + }, + "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/jcloud-eastus/providers/Microsoft.Compute/virtualMachineScaleSets/jclouds-vmssname", + "name": "jclouds-vmssname" +} + http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetgetwhen404.json ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetgetwhen404.json b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetgetwhen404.json new file mode 100644 index 0000000..b6fbeaa --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetgetwhen404.json @@ -0,0 +1,6 @@ +{ + "error": { + "code": "ResourceNotFound", + "message": "The Resource 'Microsoft.Compute/virtualMachineScaleSets/jclouds-vmssname1' under resource group 'jcloud-eastus' was not found." + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlist.json ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlist.json b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlist.json new file mode 100644 index 0000000..b5bd063 --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlist.json @@ -0,0 +1,93 @@ +{ + "value": [{ + "sku": { + "name": "Standard_A1", + "tier": "Standard", + "capacity": 4 + }, + "properties": { + "singlePlacementGroup": true, + "upgradePolicy": { + "mode": "Manual", + "automaticOSUpgrade": false + }, + "virtualMachineProfile": { + "osProfile": { + "computerNamePrefix": "vmmsprefix", + "adminUsername": "jclouds", + "linuxConfiguration": { + "disablePasswordAuthentication": false + }, + "secrets": [] + }, + "storageProfile": { + "osDisk": { + "createOption": "FromImage", + "caching": "None", + "managedDisk": { + "storageAccountType": "Standard_LRS" + } + }, + "imageReference": { + "publisher": "Canonical", + "offer": "UbuntuServer", + "sku": "16.04-LTS", + "version": "latest" + } + }, + "networkProfile": { + "networkInterfaceConfigurations": [{ + "name": "nicconfig1", + "properties": { + "primary": true, + "enableAcceleratedNetworking": false, + "dnsSettings": { + "dnsServers": ["8.8.8.8"] + }, + "ipConfigurations": [{ + "name": "ipconfig1", + "properties": { + "publicIPAddressConfiguration": { + "name": "pub1", + "properties": { + "idleTimeoutInMinutes": 15 + } + }, + "subnet": { + "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/jcloud-eastus/providers/Microsoft.Network/virtualNetworks/jclouds-eastus-virtualNetworkName/subnets/jclouds-eastus-subnet" + }, + "privateIPAddressVersion": "IPv4" + } + }] + } + }] + }, + "extensionProfile": { + "extensions": [{ + "properties": { + "publisher": "Microsoft.compute", + "type": "CustomScriptExtension", + "typeHandlerVersion": "1.1", + "autoUpgradeMinorVersion": false, + "settings": { + "fileUris": ["https://mystorage1.blob.core.windows.net/winvmextekfacnt/SampleCmd_1.cmd"], + "commandToExecute": "SampleCmd_1.cmd" + } + }, + "name": "extensionName" + }] + } + }, + "provisioningState": "Failed", + "overprovision": true, + "uniqueId": "xxxxx-xxxx-xxxx-xxxx-xxxxxx" + }, + "type": "Microsoft.Compute/virtualMachineScaleSets", + "location": "eastus", + "tags": { + "test": "test" + }, + "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/jcloud-eastus/providers/Microsoft.Compute/virtualMachineScaleSets/jclouds-vmssname", + "name": "jclouds-vmssname" + }] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlistwhen404.json ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlistwhen404.json b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlistwhen404.json new file mode 100644 index 0000000..635083c --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetlistwhen404.json @@ -0,0 +1,6 @@ +{ + "error": { + "code": "ResourceGroupNotFound", + "message": "Resource group 'jcloud-eastus1' could not be found." + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds/blob/7368d58a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetresponsecreateorupdate.json ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetresponsecreateorupdate.json b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetresponsecreateorupdate.json new file mode 100644 index 0000000..20ecd71 --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinescalesetresponsecreateorupdate.json @@ -0,0 +1,103 @@ +{ + "location": "eastus", + "sku": { + "name": "Standard_A1", + "tier": "Standard", + "capacity": 10 + }, + "properties": { + "singlePlacementGroup": true, + "overProvision": true, + "upgradePolicy": { + "mode": "Manual" + }, + "virtualMachineProfile": { + "storageProfile": { + "imageReference": { + "publisher": "Canonical", + "offer": "UbuntuServer", + "sku": "16.04-LTS", + "version": "latest" + }, + "osDisk": { + "osType": "Windows", + "createOption": "FromImage", + "managedDisk": { + "storageAccountType": "Standard_LRS" + } + }, + "dataDisks": [{ + "diskSizeGB": "10", + "lun": 1, + "createOption": "Unrecognized", + "caching": "None", + "managedDisk": { + "storageAccountType": "Standard_LRS" + } + } + ] + }, + "osProfile": { + "computerNamePrefix": "jclouds-vmssname", + "adminUsername": "jclouds", + "adminPassword": "jClouds1!", + "linuxConfiguration": { + "disablePasswordAuthentication": "False" + }, + "secrets": [] + }, + "networkProfile": { + "networkInterfaceConfigurations": [{ + "name": "nicconfig1", + "properties": { + "primary": true, + "enableAcceleratedNetworking": false, + "dnsSettings": { + "dnsServers": ["8.8.8.8"] + }, + "ipConfigurations": [{ + "name": "ipconfig1", + "properties": { + "publicIPAddressConfiguration": { + "name": "pub1", + "properties": { + "idleTimeoutInMinutes": 15 + } + }, + "subnet": { + "name": "virtualNetworkName", + "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/jcloud-eastus/providers/Microsoft.Network/virtualNetworks/jclouds-eastus-virtualNetworkName/subnets/jclouds-eastus-subnet", + "properties": {} + }, + "privateIPAddressVersion": "IPv4", + "loadBalancerBackendAddressPools": [], + "loadBalancerInboundNatPools": [] + } + } + ] + } + } + ] + }, + "extensionProfile": { + "extensions": [{ + "name": "extensionName", + "properties": { + "publisher": "Microsoft.compute", + "type": "CustomScriptExtension", + "typeHandlerVersion": "1.1", + "autoUpgradeMinorVersion": false, + "settings": { + "fileUris": ["https://mystorage1.blob.core.windows.net/winvmextekfacnt/SampleCmd_1.cmd"], + "commandToExecute": "SampleCmd_1.cmd" + }, + "protectedSettings": { + "StorageAccountKey": "jclouds-accountkey" + } + } + } + ] + } + } + } +}
