diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachines.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachines.java index b12fa96e980d..464266896fdc 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachines.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachines.java @@ -2,6 +2,7 @@ import com.microsoft.azure.CloudException; import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.resources.fluentcore.arm.Region; import com.microsoft.azure.management.resources.fluentcore.arm.collection.SupportsDeletingByGroup; import com.microsoft.azure.management.resources.fluentcore.arm.collection.SupportsGettingByGroup; import com.microsoft.azure.management.resources.fluentcore.arm.collection.SupportsListingByGroup; @@ -31,6 +32,16 @@ public interface VirtualMachines extends */ PagedList availableSizesByRegion(String region) throws CloudException, IOException; + /** + * Lists all available virtual machine sizes in a region. + * + * @param region The {@link Region} upon which virtual-machine-sizes is queried. + * @return the List<VirtualMachineSize> if successful. + * @throws CloudException thrown for an invalid response from the service. + * @throws IOException thrown for IO exception. + */ + PagedList availableSizesByRegion(Region region) throws CloudException, IOException; + /** * Shuts down the Virtual Machine and releases the compute resources. *

diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachinesImpl.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachinesImpl.java index bbbf39f636c9..1f24465ad681 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachinesImpl.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachinesImpl.java @@ -21,6 +21,7 @@ import com.microsoft.azure.management.compute.implementation.api.VirtualMachineCaptureParametersInner; import com.microsoft.azure.management.compute.implementation.api.VirtualMachineCaptureResultInner; import com.microsoft.azure.management.network.implementation.NetworkManager; +import com.microsoft.azure.management.resources.fluentcore.arm.Region; import com.microsoft.azure.management.resources.fluentcore.arm.ResourceUtils; import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; import com.microsoft.azure.management.resources.implementation.ResourceManager; @@ -123,6 +124,11 @@ public Page nextPage(String nextPageLink) throws RestEx }); } + @Override + public PagedList availableSizesByRegion(Region region) throws CloudException, IOException { + return this.availableSizesByRegion(region.toString()); + } + @Override public void deallocate(String groupName, String name) throws CloudException, IOException, InterruptedException { this.client.deallocate(groupName, name); diff --git a/azure/src/test/java/com/microsoft/azure/AzureTests.java b/azure/src/test/java/com/microsoft/azure/AzureTests.java index 95a4be7fa8e6..328652aa6445 100644 --- a/azure/src/test/java/com/microsoft/azure/AzureTests.java +++ b/azure/src/test/java/com/microsoft/azure/AzureTests.java @@ -136,6 +136,11 @@ public void setup() throws Exception { .runTest(azure.virtualMachines(), azure.resourceGroups()); } + @Test public void testVirtualMachineSizes() throws Exception { + new TestVirtualMachineSizes() + .runTest(azure.virtualMachines(), azure.resourceGroups()); + } + @Test public void listSubscriptions() throws Exception { Assert.assertTrue(0 < subscriptions.list().size()); diff --git a/azure/src/test/java/com/microsoft/azure/TestVirtualMachineSizes.java b/azure/src/test/java/com/microsoft/azure/TestVirtualMachineSizes.java new file mode 100644 index 000000000000..d0fc07efadff --- /dev/null +++ b/azure/src/test/java/com/microsoft/azure/TestVirtualMachineSizes.java @@ -0,0 +1,59 @@ +package com.microsoft.azure; + +import com.microsoft.azure.management.compute.KnownWindowsVirtualMachineImage; +import com.microsoft.azure.management.compute.VirtualMachine; +import com.microsoft.azure.management.compute.VirtualMachineSize; +import com.microsoft.azure.management.compute.VirtualMachines; +import com.microsoft.azure.management.resources.fluentcore.arm.Region; +import org.junit.Assert; + +import java.util.List; + +public class TestVirtualMachineSizes extends TestTemplate { + @Override + public VirtualMachine createResource(VirtualMachines virtualMachines) throws Exception { + List availableSizes = virtualMachines.availableSizesByRegion(Region.US_EAST); + Assert.assertTrue(availableSizes.size() > 0); + + final String vmName = "vm" + this.testId; + VirtualMachine vm = virtualMachines.define(vmName) + .withRegion(Region.US_EAST) + .withNewGroup() + .withNewPrimaryNetwork("10.0.0.0/28") + .withPrimaryPrivateIpAddressDynamic() + .withoutPrimaryPublicIpAddress() + .withPopularWindowsImage(KnownWindowsVirtualMachineImage.WINDOWS_SERVER_2012_R2_DATACENTER) + .withAdminUserName("testuser") + .withPassword("12NewPA$$w0rd!") + .withSize(availableSizes.get(0).name()) // Use the first size + .create(); + + Assert.assertTrue(vm.size().equalsIgnoreCase(availableSizes.get(0).name())); + return vm; + } + + @Override + public VirtualMachine updateResource(VirtualMachine virtualMachine) throws Exception { + List resizableSizes = virtualMachine.availableSizes(); + Assert.assertTrue(resizableSizes.size() > 1); + VirtualMachineSize newSize = null; + for (VirtualMachineSize resizableSize : resizableSizes) { + if (!resizableSize.name().equalsIgnoreCase(virtualMachine.size())) { + newSize = resizableSize; + break; + } + } + Assert.assertNotNull(newSize); + virtualMachine = virtualMachine.update() + .withSize(newSize.name()) + .apply(); + + Assert.assertTrue(virtualMachine.size().equalsIgnoreCase(newSize.name())); + return virtualMachine; + } + + @Override + public void print(VirtualMachine virtualMachine) { + + } +}