javaazureazure-vm-scale-set

Java Azure SDK scaleset: how to specify image version


When I am scaling up a scaleset I want to specify the image version to use. Right now it always uses the latest image from the compute gallery. I think that is what this az CLI command does: az vmss update -- resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=0.235.102011129

Now I want to do the same in Java with the Azure Resource Manager SDK. ChatGPT gave this suggestion

// Resource group and scale set names
final String resourceGroupName = "myResourceGroup";
final String scaleSetName = "myScaleSet";

// Retrieve the scale set
VirtualMachineScaleSet scaleSet = azureResourceManager.virtualMachineScaleSets()
      .getByResourceGroup(resourceGroupName, scaleSetName);

// Update the image reference version
VirtualMachineScaleSetUpdate updateParams = scaleSet.update()
      .withVirtualMachineProfileStorageProfile(new VirtualMachineScaleSetUpdateStorageProfile()
              .withImageReference(new ImageReference()
              .withVersion("0.235.102011129")))
      .apply();

But the problem is that withVirtualMachineProfileStorageProfile does not exist for scaleSet.update().

Does anyone know how to do this?


Solution

  • Refer this MS Document which calls Azure Resource manager API with JAVA and updates Image with specific version by accessing StorageProfile of the VMSS:-

    Code Reference from MS Document:-

    VirtualMachineScaleSetUpdateStorageProfile()
                                .withImageReference(new ImageReference()
                                    .withId("hhhhhhhhh").withPublisher("MicrosoftWindowsServer")
                                    .withOffer("WindowsServer").withSku("2016-Datacenter").withVersion("latest")
                                    .withSharedGalleryImageId("aaaaaa"))
                                .withOsDisk(new VirtualMachineScaleSetUpdateOSDisk().withCaching(CachingTypes.READ_WRITE)
                                    .withWriteAcceleratorEnabled(true).withDiskSizeGB(6)
                                    .withImage(new VirtualHardDisk().withUri(
                                        "http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/myDisk.vhd"))
    

    sample.java:-

    import com.azure.resourcemanager.compute.models.*;
    
    public final class Main {
        public static void main(String[] args) {
            VirtualMachineScaleSetUpdateStorageProfile storageProfile = new VirtualMachineScaleSetUpdateStorageProfile()
                .withImageReference(new ImageReference()
                    .withId("aaaaaaaaaaaaaaaaaaa")
                    .withPublisher("MicrosoftWindowsServer")
                    .withOffer("WindowsServer")
                    .withSku("2016-Datacenter")
                    .withVersion("latest")
                    .withSharedGalleryImageId("hshshs"))
                .withOsDisk(new VirtualMachineScaleSetUpdateOSDisk()
                    .withCaching(CachingTypes.READ_WRITE)
                    .withWriteAcceleratorEnabled(true)
                    .withDiskSizeGB(6)
                    .withImage(new VirtualHardDisk()
                        .withUri("http://{existing-storage-account-name}.blob.core.windows.net/{existing-container-name}/myDisk.vhd")));
        }
    }