Deploy Azure Stack HCI Virtual Machine Instances

The azure-native:azurestackhci:VirtualMachineInstance resource, part of the Pulumi Azure Native provider, defines a virtual machine instance on Azure Stack HCI: its compute profile, storage, networking, and security settings. This guide focuses on four capabilities: gallery image and OS disk provisioning, security features (TPM and Secure Boot), GPU assignment, and Windows configuration agent support.

VM instances run on Azure Stack HCI clusters and reference pre-existing infrastructure: gallery images, network interfaces, storage containers, and HybridCompute machines (Arc-enabled servers). The examples are intentionally small. Combine them with your own Azure Stack HCI cluster resources and networking configuration.

Most deployments start with a gallery image that provides a pre-configured OS, combined with security settings to meet compliance requirements.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const virtualMachineInstance = new azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance", {
    extendedLocation: {
        name: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        type: azure_native.azurestackhci.ExtendedLocationTypes.CustomLocation,
    },
    hardwareProfile: {
        vmSize: azure_native.azurestackhci.VmSizeEnum.Default,
    },
    networkProfile: {
        networkInterfaces: [{
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    osProfile: {
        adminPassword: "password",
        adminUsername: "localadmin",
        computerName: "luamaster",
    },
    resourceUri: "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    securityProfile: {
        enableTPM: true,
        uefiSettings: {
            secureBootEnabled: true,
        },
    },
    storageProfile: {
        imageReference: {
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
        },
        vmConfigStoragePathId: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    },
});
import pulumi
import pulumi_azure_native as azure_native

virtual_machine_instance = azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance",
    extended_location={
        "name": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        "type": azure_native.azurestackhci.ExtendedLocationTypes.CUSTOM_LOCATION,
    },
    hardware_profile={
        "vm_size": azure_native.azurestackhci.VmSizeEnum.DEFAULT,
    },
    network_profile={
        "network_interfaces": [{
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    os_profile={
        "admin_password": "password",
        "admin_username": "localadmin",
        "computer_name": "luamaster",
    },
    resource_uri="subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    security_profile={
        "enable_tpm": True,
        "uefi_settings": {
            "secure_boot_enabled": True,
        },
    },
    storage_profile={
        "image_reference": {
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
        },
        "vm_config_storage_path_id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    })
package main

import (
	azurestackhci "github.com/pulumi/pulumi-azure-native-sdk/azurestackhci/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := azurestackhci.NewVirtualMachineInstance(ctx, "virtualMachineInstance", &azurestackhci.VirtualMachineInstanceArgs{
			ExtendedLocation: &azurestackhci.ExtendedLocationArgs{
				Name: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location"),
				Type: pulumi.String(azurestackhci.ExtendedLocationTypesCustomLocation),
			},
			HardwareProfile: &azurestackhci.VirtualMachineInstancePropertiesHardwareProfileArgs{
				VmSize: pulumi.String(azurestackhci.VmSizeEnumDefault),
			},
			NetworkProfile: &azurestackhci.VirtualMachineInstancePropertiesNetworkProfileArgs{
				NetworkInterfaces: azurestackhci.NetworkInterfaceArmReferenceArray{
					&azurestackhci.NetworkInterfaceArmReferenceArgs{
						Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic"),
					},
				},
			},
			OsProfile: &azurestackhci.VirtualMachineInstancePropertiesOsProfileArgs{
				AdminPassword: pulumi.String("password"),
				AdminUsername: pulumi.String("localadmin"),
				ComputerName:  pulumi.String("luamaster"),
			},
			ResourceUri: pulumi.String("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM"),
			SecurityProfile: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileArgs{
				EnableTPM: pulumi.Bool(true),
				UefiSettings: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs{
					SecureBootEnabled: pulumi.Bool(true),
				},
			},
			StorageProfile: &azurestackhci.VirtualMachineInstancePropertiesStorageProfileArgs{
				ImageReference: &azurestackhci.ImageArmReferenceArgs{
					Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image"),
				},
				VmConfigStoragePathId: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var virtualMachineInstance = new AzureNative.AzureStackHCI.VirtualMachineInstance("virtualMachineInstance", new()
    {
        ExtendedLocation = new AzureNative.AzureStackHCI.Inputs.ExtendedLocationArgs
        {
            Name = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
            Type = AzureNative.AzureStackHCI.ExtendedLocationTypes.CustomLocation,
        },
        HardwareProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesHardwareProfileArgs
        {
            VmSize = AzureNative.AzureStackHCI.VmSizeEnum.Default,
        },
        NetworkProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesNetworkProfileArgs
        {
            NetworkInterfaces = new[]
            {
                new AzureNative.AzureStackHCI.Inputs.NetworkInterfaceArmReferenceArgs
                {
                    Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
                },
            },
        },
        OsProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesOsProfileArgs
        {
            AdminPassword = "password",
            AdminUsername = "localadmin",
            ComputerName = "luamaster",
        },
        ResourceUri = "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
        SecurityProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileArgs
        {
            EnableTPM = true,
            UefiSettings = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs
            {
                SecureBootEnabled = true,
            },
        },
        StorageProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesStorageProfileArgs
        {
            ImageReference = new AzureNative.AzureStackHCI.Inputs.ImageArmReferenceArgs
            {
                Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
            },
            VmConfigStoragePathId = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstance;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstanceArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesHardwareProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesNetworkProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesOsProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesStorageProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ImageArmReferenceArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var virtualMachineInstance = new VirtualMachineInstance("virtualMachineInstance", VirtualMachineInstanceArgs.builder()
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location")
                .type("CustomLocation")
                .build())
            .hardwareProfile(VirtualMachineInstancePropertiesHardwareProfileArgs.builder()
                .vmSize("Default")
                .build())
            .networkProfile(VirtualMachineInstancePropertiesNetworkProfileArgs.builder()
                .networkInterfaces(NetworkInterfaceArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic")
                    .build())
                .build())
            .osProfile(VirtualMachineInstancePropertiesOsProfileArgs.builder()
                .adminPassword("password")
                .adminUsername("localadmin")
                .computerName("luamaster")
                .build())
            .resourceUri("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM")
            .securityProfile(VirtualMachineInstancePropertiesSecurityProfileArgs.builder()
                .enableTPM(true)
                .uefiSettings(VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs.builder()
                    .secureBootEnabled(true)
                    .build())
                .build())
            .storageProfile(VirtualMachineInstancePropertiesStorageProfileArgs.builder()
                .imageReference(ImageArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image")
                    .build())
                .vmConfigStoragePathId("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container")
                .build())
            .build());

    }
}
resources:
  virtualMachineInstance:
    type: azure-native:azurestackhci:VirtualMachineInstance
    properties:
      extendedLocation:
        name: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location
        type: CustomLocation
      hardwareProfile:
        vmSize: Default
      networkProfile:
        networkInterfaces:
          - id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic
      osProfile:
        adminPassword: password
        adminUsername: localadmin
        computerName: luamaster
      resourceUri: subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM
      securityProfile:
        enableTPM: true
        uefiSettings:
          secureBootEnabled: true
      storageProfile:
        imageReference:
          id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image
        vmConfigStoragePathId: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container

The storageProfile.imageReference points to a gallery image, while vmConfigStoragePathId specifies where VM configuration files are stored. The securityProfile enables TPM (enableTPM) and Secure Boot (uefiSettings.secureBootEnabled), which are required for many compliance frameworks. The osProfile sets admin credentials and computer name. The resourceUri links this VM instance to a HybridCompute machine (Arc-enabled server).

Attach GPU resources for compute workloads

Workloads requiring GPU acceleration need direct GPU assignment configured in the hardware profile.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const virtualMachineInstance = new azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance", {
    extendedLocation: {
        name: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        type: azure_native.azurestackhci.ExtendedLocationTypes.CustomLocation,
    },
    hardwareProfile: {
        virtualMachineGPUs: [{
            assignmentType: azure_native.azurestackhci.GpuAssignmentTypeEnum.GpuDDA,
            partitionSizeMB: 0,
        }],
        vmSize: azure_native.azurestackhci.VmSizeEnum.Default,
    },
    networkProfile: {
        networkInterfaces: [{
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    osProfile: {
        adminPassword: "password",
        adminUsername: "localadmin",
        computerName: "luamaster",
    },
    resourceUri: "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    securityProfile: {
        enableTPM: true,
        uefiSettings: {
            secureBootEnabled: true,
        },
    },
    storageProfile: {
        imageReference: {
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
        },
        vmConfigStoragePathId: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    },
});
import pulumi
import pulumi_azure_native as azure_native

virtual_machine_instance = azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance",
    extended_location={
        "name": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        "type": azure_native.azurestackhci.ExtendedLocationTypes.CUSTOM_LOCATION,
    },
    hardware_profile={
        "virtual_machine_gpus": [{
            "assignment_type": azure_native.azurestackhci.GpuAssignmentTypeEnum.GPU_DDA,
            "partition_size_mb": 0,
        }],
        "vm_size": azure_native.azurestackhci.VmSizeEnum.DEFAULT,
    },
    network_profile={
        "network_interfaces": [{
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    os_profile={
        "admin_password": "password",
        "admin_username": "localadmin",
        "computer_name": "luamaster",
    },
    resource_uri="subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    security_profile={
        "enable_tpm": True,
        "uefi_settings": {
            "secure_boot_enabled": True,
        },
    },
    storage_profile={
        "image_reference": {
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
        },
        "vm_config_storage_path_id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    })
package main

import (
	azurestackhci "github.com/pulumi/pulumi-azure-native-sdk/azurestackhci/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := azurestackhci.NewVirtualMachineInstance(ctx, "virtualMachineInstance", &azurestackhci.VirtualMachineInstanceArgs{
			ExtendedLocation: &azurestackhci.ExtendedLocationArgs{
				Name: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location"),
				Type: pulumi.String(azurestackhci.ExtendedLocationTypesCustomLocation),
			},
			HardwareProfile: &azurestackhci.VirtualMachineInstancePropertiesHardwareProfileArgs{
				VirtualMachineGPUs: azurestackhci.VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPUArray{
					&azurestackhci.VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPUArgs{
						AssignmentType:  pulumi.String(azurestackhci.GpuAssignmentTypeEnumGpuDDA),
						PartitionSizeMB: pulumi.Float64(0),
					},
				},
				VmSize: pulumi.String(azurestackhci.VmSizeEnumDefault),
			},
			NetworkProfile: &azurestackhci.VirtualMachineInstancePropertiesNetworkProfileArgs{
				NetworkInterfaces: azurestackhci.NetworkInterfaceArmReferenceArray{
					&azurestackhci.NetworkInterfaceArmReferenceArgs{
						Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic"),
					},
				},
			},
			OsProfile: &azurestackhci.VirtualMachineInstancePropertiesOsProfileArgs{
				AdminPassword: pulumi.String("password"),
				AdminUsername: pulumi.String("localadmin"),
				ComputerName:  pulumi.String("luamaster"),
			},
			ResourceUri: pulumi.String("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM"),
			SecurityProfile: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileArgs{
				EnableTPM: pulumi.Bool(true),
				UefiSettings: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs{
					SecureBootEnabled: pulumi.Bool(true),
				},
			},
			StorageProfile: &azurestackhci.VirtualMachineInstancePropertiesStorageProfileArgs{
				ImageReference: &azurestackhci.ImageArmReferenceArgs{
					Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image"),
				},
				VmConfigStoragePathId: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var virtualMachineInstance = new AzureNative.AzureStackHCI.VirtualMachineInstance("virtualMachineInstance", new()
    {
        ExtendedLocation = new AzureNative.AzureStackHCI.Inputs.ExtendedLocationArgs
        {
            Name = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
            Type = AzureNative.AzureStackHCI.ExtendedLocationTypes.CustomLocation,
        },
        HardwareProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesHardwareProfileArgs
        {
            VirtualMachineGPUs = new[]
            {
                new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPUArgs
                {
                    AssignmentType = AzureNative.AzureStackHCI.GpuAssignmentTypeEnum.GpuDDA,
                    PartitionSizeMB = 0,
                },
            },
            VmSize = AzureNative.AzureStackHCI.VmSizeEnum.Default,
        },
        NetworkProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesNetworkProfileArgs
        {
            NetworkInterfaces = new[]
            {
                new AzureNative.AzureStackHCI.Inputs.NetworkInterfaceArmReferenceArgs
                {
                    Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
                },
            },
        },
        OsProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesOsProfileArgs
        {
            AdminPassword = "password",
            AdminUsername = "localadmin",
            ComputerName = "luamaster",
        },
        ResourceUri = "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
        SecurityProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileArgs
        {
            EnableTPM = true,
            UefiSettings = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs
            {
                SecureBootEnabled = true,
            },
        },
        StorageProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesStorageProfileArgs
        {
            ImageReference = new AzureNative.AzureStackHCI.Inputs.ImageArmReferenceArgs
            {
                Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
            },
            VmConfigStoragePathId = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstance;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstanceArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesHardwareProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesNetworkProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesOsProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesStorageProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ImageArmReferenceArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var virtualMachineInstance = new VirtualMachineInstance("virtualMachineInstance", VirtualMachineInstanceArgs.builder()
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location")
                .type("CustomLocation")
                .build())
            .hardwareProfile(VirtualMachineInstancePropertiesHardwareProfileArgs.builder()
                .virtualMachineGPUs(VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPUArgs.builder()
                    .assignmentType("GpuDDA")
                    .partitionSizeMB(0.0)
                    .build())
                .vmSize("Default")
                .build())
            .networkProfile(VirtualMachineInstancePropertiesNetworkProfileArgs.builder()
                .networkInterfaces(NetworkInterfaceArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic")
                    .build())
                .build())
            .osProfile(VirtualMachineInstancePropertiesOsProfileArgs.builder()
                .adminPassword("password")
                .adminUsername("localadmin")
                .computerName("luamaster")
                .build())
            .resourceUri("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM")
            .securityProfile(VirtualMachineInstancePropertiesSecurityProfileArgs.builder()
                .enableTPM(true)
                .uefiSettings(VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs.builder()
                    .secureBootEnabled(true)
                    .build())
                .build())
            .storageProfile(VirtualMachineInstancePropertiesStorageProfileArgs.builder()
                .imageReference(ImageArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image")
                    .build())
                .vmConfigStoragePathId("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container")
                .build())
            .build());

    }
}
resources:
  virtualMachineInstance:
    type: azure-native:azurestackhci:VirtualMachineInstance
    properties:
      extendedLocation:
        name: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location
        type: CustomLocation
      hardwareProfile:
        virtualMachineGPUs:
          - assignmentType: GpuDDA
            partitionSizeMB: 0
        vmSize: Default
      networkProfile:
        networkInterfaces:
          - id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic
      osProfile:
        adminPassword: password
        adminUsername: localadmin
        computerName: luamaster
      resourceUri: subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM
      securityProfile:
        enableTPM: true
        uefiSettings:
          secureBootEnabled: true
      storageProfile:
        imageReference:
          id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image
        vmConfigStoragePathId: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container

The hardwareProfile.virtualMachineGPUs array defines GPU resources. The assignmentType of “GpuDDA” enables GPU Direct Device Assignment, giving the VM exclusive access to physical GPU hardware. Setting partitionSizeMB to 0 assigns the entire GPU rather than partitioning it. This configuration extends the gallery image example by adding GPU capabilities for compute-intensive applications.

Attach an existing OS disk instead of an image

Some deployments attach pre-configured OS disks rather than provisioning from an image, useful for migrations or custom disk configurations.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const virtualMachineInstance = new azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance", {
    extendedLocation: {
        name: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        type: azure_native.azurestackhci.ExtendedLocationTypes.CustomLocation,
    },
    hardwareProfile: {
        vmSize: azure_native.azurestackhci.VmSizeEnum.Default,
    },
    networkProfile: {
        networkInterfaces: [{
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    resourceUri: "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    securityProfile: {
        enableTPM: true,
        uefiSettings: {
            secureBootEnabled: true,
        },
    },
    storageProfile: {
        osDisk: {
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd",
        },
        vmConfigStoragePathId: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    },
});
import pulumi
import pulumi_azure_native as azure_native

virtual_machine_instance = azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance",
    extended_location={
        "name": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        "type": azure_native.azurestackhci.ExtendedLocationTypes.CUSTOM_LOCATION,
    },
    hardware_profile={
        "vm_size": azure_native.azurestackhci.VmSizeEnum.DEFAULT,
    },
    network_profile={
        "network_interfaces": [{
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    resource_uri="subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    security_profile={
        "enable_tpm": True,
        "uefi_settings": {
            "secure_boot_enabled": True,
        },
    },
    storage_profile={
        "os_disk": {
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd",
        },
        "vm_config_storage_path_id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    })
package main

import (
	azurestackhci "github.com/pulumi/pulumi-azure-native-sdk/azurestackhci/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := azurestackhci.NewVirtualMachineInstance(ctx, "virtualMachineInstance", &azurestackhci.VirtualMachineInstanceArgs{
			ExtendedLocation: &azurestackhci.ExtendedLocationArgs{
				Name: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location"),
				Type: pulumi.String(azurestackhci.ExtendedLocationTypesCustomLocation),
			},
			HardwareProfile: &azurestackhci.VirtualMachineInstancePropertiesHardwareProfileArgs{
				VmSize: pulumi.String(azurestackhci.VmSizeEnumDefault),
			},
			NetworkProfile: &azurestackhci.VirtualMachineInstancePropertiesNetworkProfileArgs{
				NetworkInterfaces: azurestackhci.NetworkInterfaceArmReferenceArray{
					&azurestackhci.NetworkInterfaceArmReferenceArgs{
						Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic"),
					},
				},
			},
			ResourceUri: pulumi.String("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM"),
			SecurityProfile: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileArgs{
				EnableTPM: pulumi.Bool(true),
				UefiSettings: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs{
					SecureBootEnabled: pulumi.Bool(true),
				},
			},
			StorageProfile: &azurestackhci.VirtualMachineInstancePropertiesStorageProfileArgs{
				OsDisk: &azurestackhci.VirtualMachineInstancePropertiesStorageProfileOsDiskArgs{
					Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd"),
				},
				VmConfigStoragePathId: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var virtualMachineInstance = new AzureNative.AzureStackHCI.VirtualMachineInstance("virtualMachineInstance", new()
    {
        ExtendedLocation = new AzureNative.AzureStackHCI.Inputs.ExtendedLocationArgs
        {
            Name = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
            Type = AzureNative.AzureStackHCI.ExtendedLocationTypes.CustomLocation,
        },
        HardwareProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesHardwareProfileArgs
        {
            VmSize = AzureNative.AzureStackHCI.VmSizeEnum.Default,
        },
        NetworkProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesNetworkProfileArgs
        {
            NetworkInterfaces = new[]
            {
                new AzureNative.AzureStackHCI.Inputs.NetworkInterfaceArmReferenceArgs
                {
                    Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
                },
            },
        },
        ResourceUri = "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
        SecurityProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileArgs
        {
            EnableTPM = true,
            UefiSettings = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs
            {
                SecureBootEnabled = true,
            },
        },
        StorageProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesStorageProfileArgs
        {
            OsDisk = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesStorageProfileOsDiskArgs
            {
                Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd",
            },
            VmConfigStoragePathId = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstance;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstanceArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesHardwareProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesNetworkProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesStorageProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesStorageProfileOsDiskArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var virtualMachineInstance = new VirtualMachineInstance("virtualMachineInstance", VirtualMachineInstanceArgs.builder()
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location")
                .type("CustomLocation")
                .build())
            .hardwareProfile(VirtualMachineInstancePropertiesHardwareProfileArgs.builder()
                .vmSize("Default")
                .build())
            .networkProfile(VirtualMachineInstancePropertiesNetworkProfileArgs.builder()
                .networkInterfaces(NetworkInterfaceArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic")
                    .build())
                .build())
            .resourceUri("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM")
            .securityProfile(VirtualMachineInstancePropertiesSecurityProfileArgs.builder()
                .enableTPM(true)
                .uefiSettings(VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs.builder()
                    .secureBootEnabled(true)
                    .build())
                .build())
            .storageProfile(VirtualMachineInstancePropertiesStorageProfileArgs.builder()
                .osDisk(VirtualMachineInstancePropertiesStorageProfileOsDiskArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd")
                    .build())
                .vmConfigStoragePathId("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container")
                .build())
            .build());

    }
}
resources:
  virtualMachineInstance:
    type: azure-native:azurestackhci:VirtualMachineInstance
    properties:
      extendedLocation:
        name: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location
        type: CustomLocation
      hardwareProfile:
        vmSize: Default
      networkProfile:
        networkInterfaces:
          - id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic
      resourceUri: subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM
      securityProfile:
        enableTPM: true
        uefiSettings:
          secureBootEnabled: true
      storageProfile:
        osDisk:
          id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd
        vmConfigStoragePathId: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container

The storageProfile.osDisk.id references an existing virtual hard disk containing a bootable OS. This approach skips the imageReference property entirely. Note that osProfile is omitted because the OS is already configured on the disk. The VM boots directly from the referenced VHD.

Enable VM configuration agent for Windows guests

Windows VMs can install the VM configuration agent to enable guest-level management capabilities.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const virtualMachineInstance = new azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance", {
    extendedLocation: {
        name: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        type: azure_native.azurestackhci.ExtendedLocationTypes.CustomLocation,
    },
    hardwareProfile: {
        vmSize: azure_native.azurestackhci.VmSizeEnum.Default,
    },
    networkProfile: {
        networkInterfaces: [{
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    osProfile: {
        adminPassword: "password",
        adminUsername: "localadmin",
        computerName: "luamaster",
        windowsConfiguration: {
            provisionVMConfigAgent: true,
        },
    },
    resourceUri: "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    securityProfile: {
        enableTPM: true,
        uefiSettings: {
            secureBootEnabled: true,
        },
    },
    storageProfile: {
        imageReference: {
            id: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
        },
        vmConfigStoragePathId: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    },
});
import pulumi
import pulumi_azure_native as azure_native

virtual_machine_instance = azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance",
    extended_location={
        "name": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
        "type": azure_native.azurestackhci.ExtendedLocationTypes.CUSTOM_LOCATION,
    },
    hardware_profile={
        "vm_size": azure_native.azurestackhci.VmSizeEnum.DEFAULT,
    },
    network_profile={
        "network_interfaces": [{
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
        }],
    },
    os_profile={
        "admin_password": "password",
        "admin_username": "localadmin",
        "computer_name": "luamaster",
        "windows_configuration": {
            "provision_vm_config_agent": True,
        },
    },
    resource_uri="subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
    security_profile={
        "enable_tpm": True,
        "uefi_settings": {
            "secure_boot_enabled": True,
        },
    },
    storage_profile={
        "image_reference": {
            "id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
        },
        "vm_config_storage_path_id": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
    })
package main

import (
	azurestackhci "github.com/pulumi/pulumi-azure-native-sdk/azurestackhci/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := azurestackhci.NewVirtualMachineInstance(ctx, "virtualMachineInstance", &azurestackhci.VirtualMachineInstanceArgs{
			ExtendedLocation: &azurestackhci.ExtendedLocationArgs{
				Name: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location"),
				Type: pulumi.String(azurestackhci.ExtendedLocationTypesCustomLocation),
			},
			HardwareProfile: &azurestackhci.VirtualMachineInstancePropertiesHardwareProfileArgs{
				VmSize: pulumi.String(azurestackhci.VmSizeEnumDefault),
			},
			NetworkProfile: &azurestackhci.VirtualMachineInstancePropertiesNetworkProfileArgs{
				NetworkInterfaces: azurestackhci.NetworkInterfaceArmReferenceArray{
					&azurestackhci.NetworkInterfaceArmReferenceArgs{
						Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic"),
					},
				},
			},
			OsProfile: &azurestackhci.VirtualMachineInstancePropertiesOsProfileArgs{
				AdminPassword: pulumi.String("password"),
				AdminUsername: pulumi.String("localadmin"),
				ComputerName:  pulumi.String("luamaster"),
				WindowsConfiguration: &azurestackhci.VirtualMachineInstancePropertiesOsProfileWindowsConfigurationArgs{
					ProvisionVMConfigAgent: pulumi.Bool(true),
				},
			},
			ResourceUri: pulumi.String("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM"),
			SecurityProfile: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileArgs{
				EnableTPM: pulumi.Bool(true),
				UefiSettings: &azurestackhci.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs{
					SecureBootEnabled: pulumi.Bool(true),
				},
			},
			StorageProfile: &azurestackhci.VirtualMachineInstancePropertiesStorageProfileArgs{
				ImageReference: &azurestackhci.ImageArmReferenceArgs{
					Id: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image"),
				},
				VmConfigStoragePathId: pulumi.String("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var virtualMachineInstance = new AzureNative.AzureStackHCI.VirtualMachineInstance("virtualMachineInstance", new()
    {
        ExtendedLocation = new AzureNative.AzureStackHCI.Inputs.ExtendedLocationArgs
        {
            Name = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
            Type = AzureNative.AzureStackHCI.ExtendedLocationTypes.CustomLocation,
        },
        HardwareProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesHardwareProfileArgs
        {
            VmSize = AzureNative.AzureStackHCI.VmSizeEnum.Default,
        },
        NetworkProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesNetworkProfileArgs
        {
            NetworkInterfaces = new[]
            {
                new AzureNative.AzureStackHCI.Inputs.NetworkInterfaceArmReferenceArgs
                {
                    Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic",
                },
            },
        },
        OsProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesOsProfileArgs
        {
            AdminPassword = "password",
            AdminUsername = "localadmin",
            ComputerName = "luamaster",
            WindowsConfiguration = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesOsProfileWindowsConfigurationArgs
            {
                ProvisionVMConfigAgent = true,
            },
        },
        ResourceUri = "subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM",
        SecurityProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileArgs
        {
            EnableTPM = true,
            UefiSettings = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs
            {
                SecureBootEnabled = true,
            },
        },
        StorageProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesStorageProfileArgs
        {
            ImageReference = new AzureNative.AzureStackHCI.Inputs.ImageArmReferenceArgs
            {
                Id = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image",
            },
            VmConfigStoragePathId = "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container",
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstance;
import com.pulumi.azurenative.azurestackhci.VirtualMachineInstanceArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ExtendedLocationArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesHardwareProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesNetworkProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesOsProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesOsProfileWindowsConfigurationArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesStorageProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.ImageArmReferenceArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var virtualMachineInstance = new VirtualMachineInstance("virtualMachineInstance", VirtualMachineInstanceArgs.builder()
            .extendedLocation(ExtendedLocationArgs.builder()
                .name("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location")
                .type("CustomLocation")
                .build())
            .hardwareProfile(VirtualMachineInstancePropertiesHardwareProfileArgs.builder()
                .vmSize("Default")
                .build())
            .networkProfile(VirtualMachineInstancePropertiesNetworkProfileArgs.builder()
                .networkInterfaces(NetworkInterfaceArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic")
                    .build())
                .build())
            .osProfile(VirtualMachineInstancePropertiesOsProfileArgs.builder()
                .adminPassword("password")
                .adminUsername("localadmin")
                .computerName("luamaster")
                .windowsConfiguration(VirtualMachineInstancePropertiesOsProfileWindowsConfigurationArgs.builder()
                    .provisionVMConfigAgent(true)
                    .build())
                .build())
            .resourceUri("subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM")
            .securityProfile(VirtualMachineInstancePropertiesSecurityProfileArgs.builder()
                .enableTPM(true)
                .uefiSettings(VirtualMachineInstancePropertiesSecurityProfileUefiSettingsArgs.builder()
                    .secureBootEnabled(true)
                    .build())
                .build())
            .storageProfile(VirtualMachineInstancePropertiesStorageProfileArgs.builder()
                .imageReference(ImageArmReferenceArgs.builder()
                    .id("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image")
                    .build())
                .vmConfigStoragePathId("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container")
                .build())
            .build());

    }
}
resources:
  virtualMachineInstance:
    type: azure-native:azurestackhci:VirtualMachineInstance
    properties:
      extendedLocation:
        name: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location
        type: CustomLocation
      hardwareProfile:
        vmSize: Default
      networkProfile:
        networkInterfaces:
          - id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/networkInterfaces/test-nic
      osProfile:
        adminPassword: password
        adminUsername: localadmin
        computerName: luamaster
        windowsConfiguration:
          provisionVMConfigAgent: true
      resourceUri: subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.HybridCompute/machines/DemoVM
      securityProfile:
        enableTPM: true
        uefiSettings:
          secureBootEnabled: true
      storageProfile:
        imageReference:
          id: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/galleryImages/test-gallery-image
        vmConfigStoragePathId: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.AzureStackHCI/storageContainers/test-container

The osProfile.windowsConfiguration.provisionVMConfigAgent flag triggers agent installation during VM provisioning. This enables extension installation and configuration drift detection for Windows guests. This configuration extends the gallery image example by adding Windows-specific agent support.

Beyond these examples

These snippets focus on specific VM instance features: image and disk-based provisioning, security configuration (TPM and Secure Boot), and GPU assignment and Windows agent provisioning. They’re intentionally minimal rather than full VM deployments.

The examples reference pre-existing infrastructure such as Azure Stack HCI clusters with custom locations, gallery images or virtual hard disks, network interfaces and storage containers, and HybridCompute machines (Arc-enabled servers). They focus on configuring the VM instance rather than provisioning the surrounding infrastructure.

To keep things focused, common VM patterns are omitted, including:

  • Local VM creation (createFromLocal flag)
  • HTTP proxy configuration (httpProxyConfig)
  • Managed identity assignment
  • Data disk attachment beyond OS disk
  • Linux-specific OS profile settings
  • Dynamic resource provisioning (all examples use hardcoded IDs)

These omissions are intentional: the goal is to illustrate how each VM instance feature is wired, not provide drop-in deployment modules. See the VirtualMachineInstance resource reference for all available configuration options.

Let's deploy Azure Stack HCI Virtual Machine Instances

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

VM Creation & Setup
What's the difference between creating a new VM and using an existing local VM?
Set createFromLocal to true to use an existing local virtual machine. When false (default), a new VM is created. For existing VMs, provide storageProfile with dataDisks references to the local virtual hard disks.
What properties can't be changed after creating a VM instance?
The resourceUri property is immutable and cannot be changed after creation. It references the HybridCompute machine resource.
What's the relationship between resourceUri and HybridCompute machines?
The resourceUri must reference an existing Microsoft.HybridCompute/machines resource. This links the VM instance to the Arc-enabled server infrastructure.
Is extendedLocation required for VM instances?
Yes, extendedLocation is required and must point to a CustomLocation resource. All examples include this configuration with type set to CustomLocation.
Storage & Images
What image sources can I use to deploy a VM?

You have three options:

  1. Gallery images - Use imageReference.id pointing to Microsoft.AzureStackHCI/galleryImages
  2. Marketplace images - Use imageReference.id pointing to Microsoft.AzureStackHCI/marketplaceGalleryImages
  3. Existing OS disk - Use osDisk.id pointing to Microsoft.AzureStackHCI/virtualHardDisks
What's the purpose of vmConfigStoragePathId?
The vmConfigStoragePathId specifies the storage container where VM configuration files are stored. It references a Microsoft.AzureStackHCI/storageContainers resource.
Security & Boot Configuration
What security features are available for VM instances?
You can enable TPM (enableTPM: true) and configure UEFI settings including Secure Boot (secureBootEnabled: true) through the securityProfile property.
Hardware & Specialized Configuration
How do I configure GPU passthrough for my VM?
Add virtualMachineGPUs to hardwareProfile with assignmentType (such as GpuDDA) and partitionSizeMB. Set partitionSizeMB to 0 for full GPU passthrough.
How do I enable the VM config agent for Windows VMs?
Set provisionVMConfigAgent to true in osProfile.windowsConfiguration. This enables the agent for VM configuration management.
API Versions & Compatibility
How can I use a different API version for this resource?
The default uses API version 2025-02-01-preview. To access other versions (2023-07-01-preview through 2025-06-01-preview), generate a local SDK package using pulumi package add azure-native azurestackhci [ApiVersion].

Using a different cloud?

Explore compute guides for other cloud providers: