This is an automated email from the ASF dual-hosted git repository. nacx pushed a commit to branch 2.1.x in repository https://gitbox.apache.org/repos/asf/jclouds.git
commit 75c5bc3fbb0682c84fa26af457209561b0ef6868 Author: Daniel Estévez <[email protected]> AuthorDate: Fri May 17 03:41:38 2019 -0400 Adds methods listAll and listByLocation to VirtualMachineAPI (#21) * Adds methods listAll and listByLocation to VirtualMachineAPI Adds Mock tests fixes * Minor comments * Overrides test to avoid case sensitive comparation * Adds comment to justify overriding base test method * Enables list by location to improve performance in listNodes abstraction * Returns all available VMs if no regions are specified --- .../jclouds/azurecompute/arm/AzureComputeApi.java | 2 +- .../arm/compute/AzureComputeServiceAdapter.java | 14 +- .../arm/features/VirtualMachineApi.java | 55 +-- .../arm/compute/AzureComputeServiceLiveTest.java | 34 ++ .../arm/features/VirtualMachineApiLiveTest.java | 35 ++ .../arm/features/VirtualMachineApiMockTest.java | 65 +++- ...achines.json => virtualmachinesinlocation.json} | 100 +++++ ...es.json => virtualmachinesinresourcegroup.json} | 0 .../resources/virtualmachinesinsubscription.json | 411 +++++++++++++++++++++ 9 files changed, 684 insertions(+), 32 deletions(-) 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 324d8dc..f6debef 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 @@ -132,7 +132,7 @@ public interface AzureComputeApi extends Closeable { * @see <a href="https://msdn.microsoft.com/en-us/library/azure/mt163630.aspx">docs</a> */ @Delegate - VirtualMachineApi getVirtualMachineApi(@PathParam("resourceGroup") String resourceGroup); + VirtualMachineApi getVirtualMachineApi(@Nullable @PathParam("resourceGroup") String resourceGroup); /** * The Virtual Machine Scale Set API includes operations for managing the virtual machines in your subscription. diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java index ff74ffa..7b766d7 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java @@ -351,14 +351,12 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual @Override public Iterable<VirtualMachine> listNodes() { ImmutableList.Builder<VirtualMachine> nodes = builder(); - for (ResourceGroup resourceGroup : api.getResourceGroupApi().list()) { - List<VirtualMachine> vms = api.getVirtualMachineApi(resourceGroup.name()).list(); - nodes.addAll(filter(vms, new Predicate<VirtualMachine>() { - @Override - public boolean apply(VirtualMachine input) { - return regionIds.get().isEmpty() || regionIds.get().contains(input.location()); - } - })); + if (regionIds.get().isEmpty()) { + nodes.addAll(api.getVirtualMachineApi(null).listAll()); + } else { + for (final String location : regionIds.get()) { + nodes.addAll(api.getVirtualMachineApi(null).listByLocation(location)); + } } return nodes.build(); } diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java index bc8c0e5..76cb872 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java @@ -55,14 +55,13 @@ import org.jclouds.rest.binders.BindToJsonPayload; * * @see <a href="https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines">docs</a> */ -@Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines") @RequestFilters({ OAuthFilter.class, ApiVersionFilter.class }) @Consumes(MediaType.APPLICATION_JSON) public interface VirtualMachineApi { @Named("GetVirtualMachine") @GET - @Path("/{name}") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}") @Fallback(Fallbacks.NullOnNotFoundOr404.class) VirtualMachine get(@PathParam("name") String name); @@ -71,64 +70,77 @@ public interface VirtualMachineApi { */ @Named("GetVirtualMachineInstance") @GET - @Path("/{name}/instanceView") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/instanceView") @Fallback(Fallbacks.NullOnNotFoundOr404.class) VirtualMachineInstance getInstanceDetails(@PathParam("name") String name); - + @Named("CreateOrUpdateVirtualMachine") @PUT @MapBinder(BindToJsonPayload.class) - @Path("/{vmname}") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{vmname}") @QueryParams(keys = "validating", values = "false") - VirtualMachine createOrUpdate(@PathParam("vmname") String vmname, - @PayloadParam("location") String location, - @PayloadParam("properties") VirtualMachineProperties properties, - @PayloadParam("tags") Map<String, String> tags, - @Nullable @PayloadParam("plan") Plan plan); + VirtualMachine createOrUpdate(@PathParam("vmname") String vmname, @PayloadParam("location") String location, + @PayloadParam("properties") VirtualMachineProperties properties, + @PayloadParam("tags") Map<String, String> tags, @Nullable @PayloadParam("plan") Plan plan); @Named("ListVirtualMachines") @GET + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines") @SelectJson("value") @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) List<VirtualMachine> list(); + @Named("ListVirtualMachinesAll") + @GET + @Path("/providers/Microsoft.Compute/virtualMachines") + @SelectJson("value") + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<VirtualMachine> listAll(); + + @Named("ListVirtualMachinesByLocation") + @GET + @Path("/providers/Microsoft.Compute/locations/{location}/virtualMachines") + @SelectJson("value") + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<VirtualMachine> listByLocation(@PathParam("location") String location); + @Named("ListAvailableSizes") @GET @SelectJson("value") - @Path("/{name}/vmSizes") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/vmSizes") @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) List<VMSize> listAvailableSizes(@PathParam("name") String name); @Named("DeleteVirtualMachine") @DELETE - @Path("/{name}") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}") @ResponseParser(URIParser.class) @Fallback(Fallbacks.NullOnNotFoundOr404.class) URI delete(@PathParam("name") String name); @Named("RestartVirtualMachine") @POST - @Path("/{name}/restart") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/restart") void restart(@PathParam("name") String name); @Named("StartVirtualMachine") @POST - @Path("/{name}/start") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/start") void start(@PathParam("name") String name); @Named("StopVirtualMachine") @POST - @Path("/{name}/powerOff") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/powerOff") void stop(@PathParam("name") String name); @Named("DeallocateVirtualMachine") @POST - @Path("/{name}/deallocate") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/deallocate") void deallocate(@PathParam("name") String name); @Named("generalize") @POST - @Path("/{name}/generalize") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/generalize") void generalize(@PathParam("name") String name); /** @@ -140,13 +152,12 @@ public interface VirtualMachineApi { @Named("capture") @POST @Payload("%7B\"vhdPrefix\":\"{vhdPrefix}\",\"destinationContainerName\":\"{destinationContainerName}\",\"overwriteVhds\":\"true\"%7D") - @Path("/{name}/capture") + @Path("/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{name}/capture") @ResponseParser(URIParser.class) @Fallback(Fallbacks.NullOnNotFoundOr404.class) @Produces(MediaType.APPLICATION_JSON) - URI capture(@PathParam("name") String name, - @PayloadParam("vhdPrefix") String vhdPrefix, - @PayloadParam("destinationContainerName") String destinationContainerName); - + URI capture(@PathParam("name") String name, @PayloadParam("vhdPrefix") String vhdPrefix, + @PayloadParam("destinationContainerName") String destinationContainerName); + } diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java index 46f4ed4..b4b3db5 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java @@ -16,16 +16,23 @@ */ package org.jclouds.azurecompute.arm.compute; +import static com.google.common.collect.ImmutableSet.copyOf; +import static com.google.common.collect.Iterables.transform; import static org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions.Builder.resourceGroup; import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import java.net.URI; import java.util.Properties; +import java.util.Set; import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata; import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils; +import org.jclouds.compute.domain.ComputeMetadata; +import org.jclouds.compute.domain.ComputeType; +import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.internal.BaseComputeServiceLiveTest; @@ -40,6 +47,7 @@ import org.jclouds.sshj.config.SshjSshClientModule; import org.testng.annotations.AfterClass; import org.testng.annotations.Test; +import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.inject.Key; import com.google.inject.Module; @@ -67,6 +75,32 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest { }, Names.named(TIMEOUT_RESOURCE_DELETED))); } + // Base method performs Iterables.elementsEqual which is case sensitive. + // Azure API can return values in different cases so we'll perform a custom validation + @Override + @Test(dependsOnMethods = "testSuspendResume") + public void testListNodesByIds() { + final Set<String> nodeIds = copyOf(transform(nodes, new Function<NodeMetadata, String>() { + + @Override + public String apply(NodeMetadata from) { + return from.getId(); + } + + })); + + final Set<? extends ComputeMetadata> listedNodes = client.listNodesByIds(nodeIds); + + assertEquals(listedNodes.size(), nodes.size()); + + for (ComputeMetadata listedNode : listedNodes) { + assert listedNode.getProviderId() != null : listedNode; + assert listedNode.getLocation() != null : listedNode; + assertEquals(listedNode.getType(), ComputeType.NODE); + assert nodeIds.contains(listedNode.getId()); + } + } + @Override @AfterClass(groups = "live", alwaysRun = true) protected void tearDownContext() { diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java index c2f2781..7898f19 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java @@ -194,6 +194,41 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { } @Test(dependsOnMethods = "testCreate") + public void testListAll() { + List<VirtualMachine> list = api.getVirtualMachineApi(null).listAll(); + final VirtualMachine vm = api().get(vmName); + + boolean vmPresent = Iterables.any(list, new Predicate<VirtualMachine>() { + public boolean apply(VirtualMachine input) { + return input.name().equals(vm.name()); + } + }); + + assertTrue(vmPresent); + } + + @Test(dependsOnMethods = "testCreate") + public void testListByLocation() { + List<VirtualMachine> list = api.getVirtualMachineApi(null).listByLocation(LOCATION); + final VirtualMachine vm = api().get(vmName); + + boolean vmPresent = Iterables.any(list, new Predicate<VirtualMachine>() { + public boolean apply(VirtualMachine input) { + return input.name().equals(vm.name()); + } + }); + assertTrue(vmPresent); + + boolean vmsInOtherLocations = Iterables.any(list, new Predicate<VirtualMachine>() { + public boolean apply(VirtualMachine input) { + return !input.location().equals(LOCATION); + } + }); + assertFalse(vmsInOtherLocations); + + } + + @Test(dependsOnMethods = "testCreate") public void testListAvailableSizes() { List<VMSize> vmSizes = api().listAvailableSizes(vmName); diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java index 642d38d..e96d540 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java @@ -104,7 +104,7 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { } public void testList() throws Exception { - server.enqueue(jsonResponse("/virtualmachines.json")); + server.enqueue(jsonResponse("/virtualmachinesinresourcegroup.json")); final VirtualMachineApi vmAPI = api.getVirtualMachineApi("groupname"); assertEquals(vmAPI.list(), getVMList()); assertSent(server, "GET", "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute" @@ -119,6 +119,22 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { + "/virtualMachines?api-version=2018-06-01"); } + public void testListAll() throws Exception { + server.enqueue(jsonResponse("/virtualmachinesinsubscription.json")); + final VirtualMachineApi vmAPI = api.getVirtualMachineApi(null); + assertEquals(vmAPI.listAll(), getVMListAll()); + assertSent(server, "GET", + "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/virtualMachines?api-version=2018-06-01"); + } + + public void testListByLocation() throws Exception { + server.enqueue(jsonResponse("/virtualmachinesinlocation.json")); + final VirtualMachineApi vmAPI = api.getVirtualMachineApi(null); + assertEquals(vmAPI.listByLocation("testlocation"), getVMListByLocation()); // TODO bylocation + assertSent(server, "GET", "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/locations/testlocation" + + "/virtualMachines?api-version=2018-06-01"); + } + public void testListAvailableSizes() throws Exception { server.enqueue(jsonResponse("/virtualmachineavailablesizes.json")); final VirtualMachineApi vmAPI = api.getVirtualMachineApi("groupname"); @@ -429,4 +445,51 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { return list; } + private List<VirtualMachine> getVMListAll() { + List<VirtualMachine> list = new ArrayList<VirtualMachine>(); + VirtualMachineProperties propertiesWithManagedDisks = getVMWithManagedDisksProperties(); + VirtualMachine machineWithManagedDisks = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", + "Microsoft.Compute/virtualMachines", "westus", null, propertiesWithManagedDisks, null); + list.add(machineWithManagedDisks); + VirtualMachineProperties propertiesWithBlobDisks = getVMWithBlobDisksProperties(); + VirtualMachine machineWithBlobDisks = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", + "Microsoft.Compute/virtualMachines", "westus", null, propertiesWithBlobDisks, null); + list.add(machineWithBlobDisks); + VirtualMachine machineInDifferentResourceGroup = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/otherresourcegroup/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", "Microsoft.Compute/virtualMachines", "westus", null, propertiesWithBlobDisks, null); + list.add(machineInDifferentResourceGroup); + VirtualMachine machineInDifferentLocation = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", + "Microsoft.Compute/virtualMachines", "eastus", null, propertiesWithBlobDisks, null); + list.add(machineInDifferentLocation); + return list; + } + + private List<VirtualMachine> getVMListByLocation() { + List<VirtualMachine> list = new ArrayList<VirtualMachine>(); + VirtualMachineProperties propertiesWithManagedDisks = getVMWithManagedDisksProperties(); + VirtualMachine machineWithManagedDisks = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", + "Microsoft.Compute/virtualMachines", "westus", null, propertiesWithManagedDisks, null); + list.add(machineWithManagedDisks); + VirtualMachineProperties propertiesWithBlobDisks = getVMWithBlobDisksProperties(); + VirtualMachine machineWithBlobDisks = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", + "Microsoft.Compute/virtualMachines", "westus", null, propertiesWithBlobDisks, null); + list.add(machineWithBlobDisks); + VirtualMachine machineInDifferentResourceGroup = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + + "resourceGroups/otherresourcegroup/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "windowsmachine", "Microsoft.Compute/virtualMachines", "westus", null, propertiesWithBlobDisks, null); + list.add(machineInDifferentResourceGroup); + return list; + } + } diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachines.json b/providers/azurecompute-arm/src/test/resources/virtualmachinesinlocation.json similarity index 66% copy from providers/azurecompute-arm/src/test/resources/virtualmachines.json copy to providers/azurecompute-arm/src/test/resources/virtualmachinesinlocation.json index e77e58b..200d0fa 100644 --- a/providers/azurecompute-arm/src/test/resources/virtualmachines.json +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinesinlocation.json @@ -198,6 +198,106 @@ "name": "windowsmachine", "type": "Microsoft.Compute/virtualMachines", "location": "westus" + }, + { + "properties": { + "vmId": "27ee085b-d707-xxxx-yyyy-2370e2eb1cc1", + "licenseType": "Windows_Server", + "availabilitySet":{ + "id":"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAVSet" + }, + "hardwareProfile": { + "vmSize": "Standard_D1" + }, + "storageProfile": { + "imageReference": { + "publisher": "publisher", + "offer": "OFFER", + "sku": "sku", + "version": "ver", + "id": "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/locations/westus/publishers/MicrosoftWindowsServerEssentials/artifactype/vmimage/offers/OFFER/skus/OFFER/versions/latest" + }, + "osDisk": { + "osType": "Windows", + "name": "windowsmachine", + "createOption": "FromImage", + "managedDisk": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", + "storageAccountType": "Standard_LRS" + }, + "vhd": { + "uri": "https://groupname2760.blob.core.windows.net/vhds/windowsmachine201624102936.vhd" + }, + "caching": "ReadWrite" + }, + "dataDisks":[ + { + "name":"mydatadisk1", + "diskSizeGB":"1", + "lun": 0, + "vhd": { + "uri" : "http://mystorage1.blob.core.windows.net/vhds/mydatadisk1.vhd" + }, + "createOption":"Empty" + } + ] + }, + "osProfile": { + "computerName": "windowsmachine", + "adminUsername": "azureuser", + "adminPassword":"password", + "customData":"", + "windowsConfiguration": { + "provisionVMAgent": false, + "enableAutomaticUpdates": true, + "winRM": { + "listeners":[{ + "protocol": "https", + "certificateUrl": "url-to-certificate" + }] + }, + "additionalUnattendContent":[ + { + "passName":"oobesystem", + "componentName":"Microsoft-Windows-Shell-Setup", + "settingName":"FirstLogonCommands", + "content":"<XML unattend content>" + } + ] + }, + "secrets":[ + { + "sourceVault": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup1/providers/Microsoft.KeyVault/vaults/myvault1" + }, + "vaultCertificates": [ + { + "certificateUrl": "https://myvault1.vault.azure.net/secrets/SECRETNAME/SECRETVERSION", + "certificateStore": "CERTIFICATESTORENAME" + } + ] + } + ] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Network/networkInterfaces/windowsmachine167" + } + ] + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "https://groupname2760.blob.core.windows.net/" + } + }, + "provisioningState": "Creating" + }, + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/otherresourcegroup/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "name": "windowsmachine", + "type": "Microsoft.Compute/virtualMachines", + "location": "westus" } ] } diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachines.json b/providers/azurecompute-arm/src/test/resources/virtualmachinesinresourcegroup.json similarity index 100% rename from providers/azurecompute-arm/src/test/resources/virtualmachines.json rename to providers/azurecompute-arm/src/test/resources/virtualmachinesinresourcegroup.json diff --git a/providers/azurecompute-arm/src/test/resources/virtualmachinesinsubscription.json b/providers/azurecompute-arm/src/test/resources/virtualmachinesinsubscription.json new file mode 100644 index 0000000..7503e29 --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/virtualmachinesinsubscription.json @@ -0,0 +1,411 @@ +{ + "value": [ + { + "properties": { + "vmId": "27ee085b-d707-xxxx-yyyy-2370e2eb1cc1", + "licenseType": "Windows_Server", + "availabilitySet": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAVSet" + }, + "hardwareProfile": { + "vmSize": "Standard_D1" + }, + "storageProfile": { + "imageReference": { + "publisher": "publisher", + "offer": "OFFER", + "sku": "sku", + "version": "ver", + "id": "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/locations/westus/publishers/MicrosoftWindowsServerEssentials/artifactype/vmimage/offers/OFFER/skus/OFFER/versions/latest" + }, + "osDisk": { + "osType": "Windows", + "name": "windowsmachine", + "createOption": "FromImage", + "managedDisk": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", + "storageAccountType": "Standard_LRS" + }, + "caching": "ReadWrite" + }, + "dataDisks": [ + { + "name": "mydatadisk1", + "diskSizeGB": "1", + "lun": 0, + "createOption": "Empty", + "caching": "ReadWrite", + "managedDisk": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", + "storageAccountType": "Standard_LRS" + } + } + ] + }, + "osProfile": { + "computerName": "windowsmachine", + "adminUsername": "azureuser", + "adminPassword": "password", + "customData": "", + "windowsConfiguration": { + "provisionVMAgent": false, + "enableAutomaticUpdates": true, + "winRM": { + "listeners": [ + { + "protocol": "https", + "certificateUrl": "url-to-certificate" + } + ] + }, + "additionalUnattendContent": [ + { + "passName": "oobesystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "FirstLogonCommands", + "content": "<XML unattend content>" + } + ] + }, + "secrets": [ + { + "sourceVault": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup1/providers/Microsoft.KeyVault/vaults/myvault1" + }, + "vaultCertificates": [ + { + "certificateUrl": "https://myvault1.vault.azure.net/secrets/SECRETNAME/SECRETVERSION", + "certificateStore": "CERTIFICATESTORENAME" + } + ] + } + ] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Network/networkInterfaces/windowsmachine167" + } + ] + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "https://groupname2760.blob.core.windows.net/" + } + }, + "provisioningState": "Creating" + }, + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "name": "windowsmachine", + "type": "Microsoft.Compute/virtualMachines", + "location": "westus" + }, + { + "properties": { + "vmId": "27ee085b-d707-xxxx-yyyy-2370e2eb1cc1", + "licenseType": "Windows_Server", + "availabilitySet": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAVSet" + }, + "hardwareProfile": { + "vmSize": "Standard_D1" + }, + "storageProfile": { + "imageReference": { + "publisher": "publisher", + "offer": "OFFER", + "sku": "sku", + "version": "ver", + "id": "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/locations/westus/publishers/MicrosoftWindowsServerEssentials/artifactype/vmimage/offers/OFFER/skus/OFFER/versions/latest" + }, + "osDisk": { + "osType": "Windows", + "name": "windowsmachine", + "createOption": "FromImage", + "managedDisk": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", + "storageAccountType": "Standard_LRS" + }, + "vhd": { + "uri": "https://groupname2760.blob.core.windows.net/vhds/windowsmachine201624102936.vhd" + }, + "caching": "ReadWrite" + }, + "dataDisks": [ + { + "name": "mydatadisk1", + "diskSizeGB": "1", + "lun": 0, + "vhd": { + "uri": "http://mystorage1.blob.core.windows.net/vhds/mydatadisk1.vhd" + }, + "createOption": "Empty" + } + ] + }, + "osProfile": { + "computerName": "windowsmachine", + "adminUsername": "azureuser", + "adminPassword": "password", + "customData": "", + "windowsConfiguration": { + "provisionVMAgent": false, + "enableAutomaticUpdates": true, + "winRM": { + "listeners": [ + { + "protocol": "https", + "certificateUrl": "url-to-certificate" + } + ] + }, + "additionalUnattendContent": [ + { + "passName": "oobesystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "FirstLogonCommands", + "content": "<XML unattend content>" + } + ] + }, + "secrets": [ + { + "sourceVault": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup1/providers/Microsoft.KeyVault/vaults/myvault1" + }, + "vaultCertificates": [ + { + "certificateUrl": "https://myvault1.vault.azure.net/secrets/SECRETNAME/SECRETVERSION", + "certificateStore": "CERTIFICATESTORENAME" + } + ] + } + ] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Network/networkInterfaces/windowsmachine167" + } + ] + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "https://groupname2760.blob.core.windows.net/" + } + }, + "provisioningState": "Creating" + }, + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "name": "windowsmachine", + "type": "Microsoft.Compute/virtualMachines", + "location": "westus" + }, + { + "properties": { + "vmId": "27ee085b-d707-xxxx-yyyy-2370e2eb1cc1", + "licenseType": "Windows_Server", + "availabilitySet": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAVSet" + }, + "hardwareProfile": { + "vmSize": "Standard_D1" + }, + "storageProfile": { + "imageReference": { + "publisher": "publisher", + "offer": "OFFER", + "sku": "sku", + "version": "ver", + "id": "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/locations/westus/publishers/MicrosoftWindowsServerEssentials/artifactype/vmimage/offers/OFFER/skus/OFFER/versions/latest" + }, + "osDisk": { + "osType": "Windows", + "name": "windowsmachine", + "createOption": "FromImage", + "managedDisk": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", + "storageAccountType": "Standard_LRS" + }, + "vhd": { + "uri": "https://groupname2760.blob.core.windows.net/vhds/windowsmachine201624102936.vhd" + }, + "caching": "ReadWrite" + }, + "dataDisks": [ + { + "name": "mydatadisk1", + "diskSizeGB": "1", + "lun": 0, + "vhd": { + "uri": "http://mystorage1.blob.core.windows.net/vhds/mydatadisk1.vhd" + }, + "createOption": "Empty" + } + ] + }, + "osProfile": { + "computerName": "windowsmachine", + "adminUsername": "azureuser", + "adminPassword": "password", + "customData": "", + "windowsConfiguration": { + "provisionVMAgent": false, + "enableAutomaticUpdates": true, + "winRM": { + "listeners": [ + { + "protocol": "https", + "certificateUrl": "url-to-certificate" + } + ] + }, + "additionalUnattendContent": [ + { + "passName": "oobesystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "FirstLogonCommands", + "content": "<XML unattend content>" + } + ] + }, + "secrets": [ + { + "sourceVault": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup1/providers/Microsoft.KeyVault/vaults/myvault1" + }, + "vaultCertificates": [ + { + "certificateUrl": "https://myvault1.vault.azure.net/secrets/SECRETNAME/SECRETVERSION", + "certificateStore": "CERTIFICATESTORENAME" + } + ] + } + ] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Network/networkInterfaces/windowsmachine167" + } + ] + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "https://groupname2760.blob.core.windows.net/" + } + }, + "provisioningState": "Creating" + }, + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/otherresourcegroup/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "name": "windowsmachine", + "type": "Microsoft.Compute/virtualMachines", + "location": "westus" + }, + { + "properties": { + "vmId": "27ee085b-d707-xxxx-yyyy-2370e2eb1cc1", + "licenseType": "Windows_Server", + "availabilitySet": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAVSet" + }, + "hardwareProfile": { + "vmSize": "Standard_D1" + }, + "storageProfile": { + "imageReference": { + "publisher": "publisher", + "offer": "OFFER", + "sku": "sku", + "version": "ver", + "id": "/subscriptions/SUBSCRIPTIONID/providers/Microsoft.Compute/locations/westus/publishers/MicrosoftWindowsServerEssentials/artifactype/vmimage/offers/OFFER/skus/OFFER/versions/latest" + }, + "osDisk": { + "osType": "Windows", + "name": "windowsmachine", + "createOption": "FromImage", + "managedDisk": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/osDisk", + "storageAccountType": "Standard_LRS" + }, + "vhd": { + "uri": "https://groupname2760.blob.core.windows.net/vhds/windowsmachine201624102936.vhd" + }, + "caching": "ReadWrite" + }, + "dataDisks": [ + { + "name": "mydatadisk1", + "diskSizeGB": "1", + "lun": 0, + "vhd": { + "uri": "http://mystorage1.blob.core.windows.net/vhds/mydatadisk1.vhd" + }, + "createOption": "Empty" + } + ] + }, + "osProfile": { + "computerName": "windowsmachine", + "adminUsername": "azureuser", + "adminPassword": "password", + "customData": "", + "windowsConfiguration": { + "provisionVMAgent": false, + "enableAutomaticUpdates": true, + "winRM": { + "listeners": [ + { + "protocol": "https", + "certificateUrl": "url-to-certificate" + } + ] + }, + "additionalUnattendContent": [ + { + "passName": "oobesystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "FirstLogonCommands", + "content": "<XML unattend content>" + } + ] + }, + "secrets": [ + { + "sourceVault": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup1/providers/Microsoft.KeyVault/vaults/myvault1" + }, + "vaultCertificates": [ + { + "certificateUrl": "https://myvault1.vault.azure.net/secrets/SECRETNAME/SECRETVERSION", + "certificateStore": "CERTIFICATESTORENAME" + } + ] + } + ] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Network/networkInterfaces/windowsmachine167" + } + ] + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "https://groupname2760.blob.core.windows.net/" + } + }, + "provisioningState": "Creating" + }, + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", + "name": "windowsmachine", + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus" + } + ] +}
