Yogesh Patil
Yogesh Patil

Reputation: 888

is there a way to create Generation 2 VM using Azure SDK?

Azure supports UEFI through Generation2 VM.

I am able to create a Generation2 VM using Azure web console, but I cannot a way to specify the generation of the VM through Azure SDK.

I have found a link in Microsoft Docs to create a manged disk using PowerCLI https://learn.microsoft.com/en-us/azure/virtual-machines/windows/generation-2#frequently-asked-questions

I looked into online documentation of Azure ComputeClient#virtual_machines#create_or_update() api. But still cannot find in the python code docs, any way to specify HyperVGenerations to the VM.

Upvotes: 0

Views: 331

Answers (1)

Bozhidar Stoyneff
Bozhidar Stoyneff

Reputation: 3634

Yes. It's kind of counterintuitive but it goes like this: you need to specify the VM generation on the disk; then the VM, created off of this disk would be of that same generation.

If you already have a disk of gen2 then you just pick it up and specify it when creating the VM. However, I had to create the disk from a VHD file. So when you're creating the disk, you gonna need an IWithCreate instance and then chain a call to the WithHyperVGeneration method. Like this (C#):

    public async Task<IDisk> MakeDisk(string vhdPath)
    {
        return await Azure.Disks.Define(name)
            .WithRegion(Region.EuropeWest)
            .WithExistingResourceGroup("my-resources")
            .WithWindowsFromVhd(vhdPath)
            .WithStorageAccount("saname")
            .WithHyperVGeneration(HyperVGeneration.V2) // <--- This is how you specify the generation
            .WithSku(DiskSkuTypes.PremiumLRS)                
            .CreateAsync();
    }

Then create the VM:

            var osDisk = await MakeDisk("template.vhd");

            var vm = await Azure.VirtualMachines.Define("template-vm")
                .WithRegion(Region.EuropWest)
                .WithExistingResourceGroup("the-rg")
                .WithExistingPrimaryNetworkInterface("some-nic")
                .WithSpecializedOSDisk(osDisk, OperatingSystemTypes.Windows) // <-- Pay attention
                .WithSize(VirtualMachineSizeTypes.StandardB2s)
                .CreateAsync();

Upvotes: 2

Related Questions