The azure-native:azurestackhci:VirtualMachineInstance resource, part of the Pulumi Azure Native provider, defines a virtual machine instance on Azure Stack HCI: its image source, hardware profile, OS configuration, and Arc integration. This guide focuses on four capabilities: local VM import, gallery image deployment with security features, GPU assignment, and Windows agent provisioning.
VM instances run on Azure Stack HCI clusters and integrate with Azure Arc through HybridCompute machine resources. They reference pre-created network interfaces, storage containers, and images. The examples are intentionally small. Combine them with your own cluster infrastructure and networking configuration.
Create an instance from an existing local VM
Teams migrating on-premises VMs to Azure Stack HCI often start by importing existing local virtual machines rather than provisioning new ones.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const virtualMachineInstance = new azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance", {
createFromLocal: true,
extendedLocation: {
name: "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
type: azure_native.azurestackhci.ExtendedLocationTypes.CustomLocation,
},
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",
storageProfile: {
dataDisks: [{
id: "/subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd",
}],
},
});
import pulumi
import pulumi_azure_native as azure_native
virtual_machine_instance = azure_native.azurestackhci.VirtualMachineInstance("virtualMachineInstance",
create_from_local=True,
extended_location={
"name": "/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location",
"type": azure_native.azurestackhci.ExtendedLocationTypes.CUSTOM_LOCATION,
},
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",
storage_profile={
"data_disks": [{
"id": "/subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd",
}],
})
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{
CreateFromLocal: pulumi.Bool(true),
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),
},
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"),
StorageProfile: &azurestackhci.VirtualMachineInstancePropertiesStorageProfileArgs{
DataDisks: azurestackhci.VirtualHardDiskArmReferenceArray{
&azurestackhci.VirtualHardDiskArmReferenceArgs{
Id: pulumi.String("/subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd"),
},
},
},
})
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()
{
CreateFromLocal = true,
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,
},
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",
StorageProfile = new AzureNative.AzureStackHCI.Inputs.VirtualMachineInstancePropertiesStorageProfileArgs
{
DataDisks = new[]
{
new AzureNative.AzureStackHCI.Inputs.VirtualHardDiskArmReferenceArgs
{
Id = "/subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd",
},
},
},
});
});
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.VirtualMachineInstancePropertiesNetworkProfileArgs;
import com.pulumi.azurenative.azurestackhci.inputs.VirtualMachineInstancePropertiesStorageProfileArgs;
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()
.createFromLocal(true)
.extendedLocation(ExtendedLocationArgs.builder()
.name("/subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location")
.type("CustomLocation")
.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")
.storageProfile(VirtualMachineInstancePropertiesStorageProfileArgs.builder()
.dataDisks(VirtualHardDiskArmReferenceArgs.builder()
.id("/subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd")
.build())
.build())
.build());
}
}
resources:
virtualMachineInstance:
type: azure-native:azurestackhci:VirtualMachineInstance
properties:
createFromLocal: true
extendedLocation:
name: /subscriptions/a95612cb-f1fa-4daa-a4fd-272844fa512c/resourceGroups/dogfoodarc/providers/Microsoft.ExtendedLocation/customLocations/dogfood-location
type: CustomLocation
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
storageProfile:
dataDisks:
- id: /subscriptions/fd3c3665-1729-4b7b-9a38-238e83b0f98b/resourceGroups/testrg/providers/Microsoft.AzureStackHCI/virtualHardDisks/test-vhd
When createFromLocal is true, the resource imports an existing VM rather than creating a new one. The resourceUri points to a HybridCompute machine that represents the VM in Azure Arc. The extendedLocation specifies the custom location that maps to your Azure Stack HCI cluster. Network and storage profiles reference pre-created interfaces and disks by their resource IDs.
Deploy from a gallery image with security features
Most new deployments start from a gallery image, which provides a standardized base OS. Azure Stack HCI supports UEFI security features for compliance.
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 resource, which defines the base OS. The osProfile sets admin credentials and computer name. The securityProfile enables TPM (enableTPM) and Secure Boot (secureBootEnabled under uefiSettings), which protect against boot-level attacks. The vmConfigStoragePathId specifies where VM configuration files are stored.
Attach GPU resources for compute workloads
Workloads requiring GPU acceleration need direct GPU assignment configured at creation time.
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 assignments. The assignmentType of GpuDDA (Discrete Device Assignment) passes through an entire physical GPU to the VM. Setting partitionSizeMB to 0 allocates the full GPU rather than partitioning it. This configuration requires physical GPU hardware on your Azure Stack HCI cluster.
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 property triggers automatic installation of the VM configuration agent during first boot. This agent enables Azure Arc extensions and configuration drift detection. This extends the gallery image deployment pattern with Windows-specific agent provisioning.
Beyond these examples
These snippets focus on specific VM instance features: local VM import and gallery image deployment, UEFI security (TPM, 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 cluster with custom location, HybridCompute machine resources, and network interfaces, storage containers, gallery images, and virtual hard disks. They focus on configuring the VM instance rather than provisioning the surrounding infrastructure.
To keep things focused, common VM patterns are omitted, including:
- HTTP proxy configuration (httpProxyConfig)
- Managed identity assignment (identity)
- Multiple data disk attachments
- Linux-specific OS configuration (linuxConfiguration)
- Dynamic hardware sizing (processors, memory)
These omissions are intentional: the goal is to illustrate how each VM instance feature is wired, not provide drop-in VM 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
Resource Configuration & Requirements
extendedLocation (pointing to a CustomLocation) and resourceUri (pointing to a Microsoft.HybridCompute/machines resource). The resourceUri is immutable after creation.resourceUri is immutable and cannot be changed after creation. You’ll need to recreate the resource to use a different resourceUri.createFromLocal is true, you’re referencing an existing local virtual machine. When false (the default), a new VM instance is created.Storage & Images
You have three options:
- Gallery image - Use
imageReferencewith agalleryImagesID - Marketplace image - Use
imageReferencewith amarketplaceGalleryImagesID - Existing VHD - Use
osDiskwith avirtualHardDisksID
vmConfigStoragePathId specifies the storage container where VM configuration files are stored. It’s required in the storageProfile and points to a Microsoft.AzureStackHCI/storageContainers resource.dataDisks to the storageProfile with an array of virtualHardDisks IDs.Hardware & Performance
virtualMachineGPUs to hardwareProfile with assignmentType (such as GpuDDA) and partitionSizeMB set to your desired partition size.vmSize set to Default in hardwareProfile. The available sizes depend on your Azure Stack HCI configuration.Security & OS Configuration
securityProfile with enableTPM set to true and uefiSettings.secureBootEnabled set to true for enhanced security.provisionVMConfigAgent to true in osProfile.windowsConfiguration.API Versions
pulumi package add azure-native azurestackhci [ApiVersion].