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.
Deploy from a gallery image with security features
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 FREEFrequently Asked Questions
VM Creation & Setup
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.resourceUri property is immutable and cannot be changed after creation. It references the HybridCompute machine resource.resourceUri must reference an existing Microsoft.HybridCompute/machines resource. This links the VM instance to the Arc-enabled server infrastructure.extendedLocation is required and must point to a CustomLocation resource. All examples include this configuration with type set to CustomLocation.Storage & Images
You have three options:
- Gallery images - Use
imageReference.idpointing toMicrosoft.AzureStackHCI/galleryImages - Marketplace images - Use
imageReference.idpointing toMicrosoft.AzureStackHCI/marketplaceGalleryImages - Existing OS disk - Use
osDisk.idpointing toMicrosoft.AzureStackHCI/virtualHardDisks
vmConfigStoragePathId specifies the storage container where VM configuration files are stored. It references a Microsoft.AzureStackHCI/storageContainers resource.Security & Boot Configuration
enableTPM: true) and configure UEFI settings including Secure Boot (secureBootEnabled: true) through the securityProfile property.Hardware & Specialized Configuration
virtualMachineGPUs to hardwareProfile with assignmentType (such as GpuDDA) and partitionSizeMB. Set partitionSizeMB to 0 for full GPU passthrough.provisionVMConfigAgent to true in osProfile.windowsConfiguration. This enables the agent for VM configuration management.API Versions & Compatibility
pulumi package add azure-native azurestackhci [ApiVersion].