diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachine.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachine.java index 20cc42207b05..19eb7f6b73c3 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachine.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachine.java @@ -262,6 +262,20 @@ interface DefinitionOSDiskSettings { T withOSDiskName(String name); } + interface DefinitionWithVMSize { + /** + * @param sizeName The name of the size for the virtual machine as text + * @return The stage representing creatable VM definition + */ + T withSize(String sizeName); + + /** + * @param size A size from the list of available sizes for the virtual machine + * @return The stage representing creatable VM definition + */ + T withSize(VirtualMachineSizeTypes size); + } + interface DefinitionStorageAccount { /** * Specifies the name of the storage account to create, the OS disk for VM created from a market-place @@ -294,6 +308,7 @@ interface DefinitionStorageAccount { interface DefinitionCreatable extends DefinitionPassword, DefinitionOSDiskSettings, + DefinitionWithVMSize, DefinitionStorageAccount, Creatable { } diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachineSize.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachineSize.java new file mode 100644 index 000000000000..6a6a1392113f --- /dev/null +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/VirtualMachineSize.java @@ -0,0 +1,33 @@ +package com.microsoft.azure.management.compute; + +public interface VirtualMachineSize { + /** + * Gets the VM size name. + */ + String name(); + + /** + * Gets the Number of cores supported by a VM size. + */ + Integer numberOfCores(); + + /** + * Gets the OS disk size allowed by a VM size. + */ + Integer osDiskSizeInMB(); + + /** + * Gets Resource disk size allowed by a VM size. + */ + Integer resourceDiskSizeInMB(); + + /** + * Gets the Memory size supported by a VM size. + */ + Integer memoryInMB(); + + /** + * Gets or the Maximum number of data disks allowed by a VM size. + */ + Integer maxDataDiskCount(); +} 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 cff9221e5ee9..a6862840c70d 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 @@ -1,5 +1,7 @@ package com.microsoft.azure.management.compute; +import com.microsoft.azure.CloudException; +import com.microsoft.azure.PagedList; 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; @@ -7,6 +9,8 @@ import com.microsoft.azure.management.resources.fluentcore.collection.SupportsDeleting; import com.microsoft.azure.management.resources.fluentcore.collection.SupportsListing; +import java.io.IOException; + public interface VirtualMachines extends SupportsListing, SupportsListingByGroup, @@ -14,8 +18,25 @@ public interface VirtualMachines extends SupportsCreating, SupportsDeleting, SupportsDeletingByGroup { + /** + * Lists all available virtual machine sizes in a region. + * @param region The region upon which virtual-machine-sizes is queried. + * @return the List<VirtualMachineSize> if successful. + * @throws CloudException + * @throws IOException + */ + PagedList listSizes(String region) throws CloudException, IOException; interface InGroup extends SupportsListing, SupportsCreating, - SupportsDeleting {} + SupportsDeleting { + /** + * Lists all available virtual machine sizes in a region. + * @param region The region upon which virtual-machine-sizes is queried. + * @return the List<VirtualMachineSize> if successful. + * @throws CloudException + * @throws IOException + */ + PagedList listSizes(String region) throws CloudException, IOException; + } } diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java index bd9dcdc11b1e..042102428c0d 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java @@ -61,7 +61,7 @@ public AvailabilitySets availabilitySets() { public VirtualMachines virtualMachines() { if (virtualMachines == null) { - virtualMachines = new VirtualMachinesImpl(computeManagementClient.virtualMachines()); + virtualMachines = new VirtualMachinesImpl(computeManagementClient.virtualMachines(), computeManagementClient.virtualMachineSizes()); } return virtualMachines; } diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineImpl.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineImpl.java index 1df5561d1736..d0da189c2995 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineImpl.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineImpl.java @@ -43,6 +43,7 @@ class VirtualMachineImpl this.innerModel.setStorageProfile(new StorageProfile()); this.innerModel.storageProfile().setOsDisk(new OSDisk()); this.innerModel.setOsProfile(new OSProfile()); + this.innerModel.setHardwareProfile(new HardwareProfile()); } @Override @@ -176,7 +177,6 @@ public DefinitionWithAdminUserName withWindowsOS() { return this; } - @Override public DefinitionLinuxCreatable withRootUserName(String rootUserName) { this.innerModel.osProfile().setAdminUsername(rootUserName); @@ -243,6 +243,18 @@ public DefinitionCreatable withPassword(String password) { return this; } + @Override + public DefinitionCreatable withSize(String sizeName) { + this.innerModel.hardwareProfile().setVmSize(sizeName); + return this; + } + + @Override + public DefinitionCreatable withSize(VirtualMachineSizeTypes size) { + this.innerModel.hardwareProfile().setVmSize(size.toString()); + return this; + } + @Override public DefinitionCreatable withOSDiskCaching(CachingTypes cachingType) { this.innerModel.storageProfile().osDisk().setCaching(cachingType); @@ -335,5 +347,10 @@ private void setDefaults() { if (osDisk.name() == null) { withOSDiskName(null /*TODO generate random OSDisk name */); } + + HardwareProfile hardwareProfile = this.innerModel.hardwareProfile(); + if (hardwareProfile.vmSize() == null) { + hardwareProfile.setVmSize(VirtualMachineSizeTypes.BASIC_A0); + } } } diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineSizeImpl.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineSizeImpl.java new file mode 100644 index 000000000000..03206a8e535b --- /dev/null +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/VirtualMachineSizeImpl.java @@ -0,0 +1,42 @@ +package com.microsoft.azure.management.compute.implementation; + +import com.microsoft.azure.management.compute.VirtualMachineSize; +import com.microsoft.azure.management.compute.implementation.api.VirtualMachineSizeInner; + +public class VirtualMachineSizeImpl implements VirtualMachineSize { + private VirtualMachineSizeInner innerModel; + + public VirtualMachineSizeImpl(VirtualMachineSizeInner innerModel) { + this.innerModel = innerModel; + } + + @Override + public String name() { + return innerModel.name(); + } + + @Override + public Integer numberOfCores() { + return innerModel.numberOfCores(); + } + + @Override + public Integer osDiskSizeInMB() { + return innerModel.osDiskSizeInMB(); + } + + @Override + public Integer resourceDiskSizeInMB() { + return innerModel.resourceDiskSizeInMB(); + } + + @Override + public Integer memoryInMB() { + return innerModel.memoryInMB(); + } + + @Override + public Integer maxDataDiskCount() { + return innerModel.maxDataDiskCount(); + } +} 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 10427450c198..2680a54b6c21 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 @@ -1,19 +1,28 @@ package com.microsoft.azure.management.compute.implementation; import com.microsoft.azure.CloudException; +import com.microsoft.azure.Page; import com.microsoft.azure.PagedList; 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.compute.implementation.api.VirtualMachineSizeInner; +import com.microsoft.azure.management.compute.implementation.api.VirtualMachineSizesInner; import com.microsoft.azure.management.compute.implementation.api.VirtualMachinesInner; +import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; +import com.microsoft.azure.management.resources.implementation.api.PageImpl; +import com.microsoft.rest.RestException; import java.io.IOException; class VirtualMachinesImpl implements VirtualMachines { private final VirtualMachinesInner client; + private final VirtualMachineSizesInner virtualMachineSizesClient; - VirtualMachinesImpl(VirtualMachinesInner client) { + VirtualMachinesImpl(VirtualMachinesInner client, VirtualMachineSizesInner virtualMachineSizesClient) { this.client = client; + this.virtualMachineSizesClient = virtualMachineSizesClient; } @Override @@ -45,4 +54,25 @@ public void delete(String id) throws Exception { public PagedList list() throws CloudException, IOException { return null; } + + @Override + public PagedList listSizes(String region) throws CloudException, IOException { + PagedListConverter converter = + new PagedListConverter() { + @Override + public VirtualMachineSize typeConvert(VirtualMachineSizeInner virtualMachineSizeInner) { + return new VirtualMachineSizeImpl(virtualMachineSizeInner); + } + }; + + PageImpl page = new PageImpl<>(); + page.setItems(virtualMachineSizesClient.list(region).getBody()); + page.setNextPageLink(null); + return converter.convert(new PagedList(page) { + @Override + public Page nextPage(String nextPageLink) throws RestException, IOException { + return null; + } + }); + } }