This is an automated email from the ASF dual-hosted git repository.
nacx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git
The following commit(s) were added to refs/heads/master by this push:
new f2e955d Adds methods listAll and listByLocation to VirtualMachineAPI
(#21)
f2e955d is described below
commit f2e955dadf1da9171361f44a92ada02784da7a8e
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"
+ }
+ ]
+}