The azure-native:avs:Addon resource, part of the Pulumi Azure Native provider, enables optional VMware capabilities on an Azure VMware Solution private cloud. This guide focuses on four addon types: HCX for workload migration, Site Recovery Manager for DR orchestration, vSphere Replication for VM-level protection, and Azure Arc for hybrid management.
Addons attach to an existing Azure VMware Solution private cloud within a resource group. The examples are intentionally small. Combine them with your own private cloud infrastructure and networking configuration.
Enable HCX for workload migration
Teams migrating VMware workloads to Azure VMware Solution typically start with HCX, which provides live migration, network extension, and disaster recovery capabilities.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const addon = new azure_native.avs.Addon("addon", {
addonName: "hcx",
addonType: azure_native.avs.AddonType.HCX,
privateCloudName: "cloud1",
resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native
addon = azure_native.avs.Addon("addon",
addon_name="hcx",
addon_type=azure_native.avs.AddonType.HCX,
private_cloud_name="cloud1",
resource_group_name="group1")
package main
import (
avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
AddonName: pulumi.String("hcx"),
AddonType: pulumi.String(avs.AddonTypeHCX),
PrivateCloudName: pulumi.String("cloud1"),
ResourceGroupName: pulumi.String("group1"),
})
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 addon = new AzureNative.AVS.Addon("addon", new()
{
AddonName = "hcx",
AddonType = AzureNative.AVS.AddonType.HCX,
PrivateCloudName = "cloud1",
ResourceGroupName = "group1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
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 addon = new Addon("addon", AddonArgs.builder()
.addonName("hcx")
.addonType("HCX")
.privateCloudName("cloud1")
.resourceGroupName("group1")
.build());
}
}
resources:
addon:
type: azure-native:avs:Addon
properties:
addonName: hcx
addonType: HCX
privateCloudName: cloud1
resourceGroupName: group1
The addonType property specifies which VMware capability to enable. Setting it to “HCX” provisions VMware HCX on your private cloud, enabling workload mobility between on-premises and Azure environments. The addon attaches to the private cloud specified by privateCloudName within the given resource group.
Enable Site Recovery Manager for disaster recovery
Organizations implementing disaster recovery for VMware workloads use Site Recovery Manager to orchestrate failover and failback operations between sites.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const addon = new azure_native.avs.Addon("addon", {
addonName: "srm",
addonType: azure_native.avs.AddonType.SRM,
privateCloudName: "cloud1",
resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native
addon = azure_native.avs.Addon("addon",
addon_name="srm",
addon_type=azure_native.avs.AddonType.SRM,
private_cloud_name="cloud1",
resource_group_name="group1")
package main
import (
avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
AddonName: pulumi.String("srm"),
AddonType: pulumi.String(avs.AddonTypeSRM),
PrivateCloudName: pulumi.String("cloud1"),
ResourceGroupName: pulumi.String("group1"),
})
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 addon = new AzureNative.AVS.Addon("addon", new()
{
AddonName = "srm",
AddonType = AzureNative.AVS.AddonType.SRM,
PrivateCloudName = "cloud1",
ResourceGroupName = "group1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
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 addon = new Addon("addon", AddonArgs.builder()
.addonName("srm")
.addonType("SRM")
.privateCloudName("cloud1")
.resourceGroupName("group1")
.build());
}
}
resources:
addon:
type: azure-native:avs:Addon
properties:
addonName: srm
addonType: SRM
privateCloudName: cloud1
resourceGroupName: group1
Site Recovery Manager (SRM) provides automated DR orchestration for VMware environments. The addonType “SRM” provisions the SRM appliance on your private cloud, enabling you to define recovery plans and automate failover procedures. SRM typically works alongside vSphere Replication for data protection.
Enable vSphere Replication for VM-level replication
vSphere Replication provides VM-level replication capabilities for disaster recovery and data protection without requiring shared storage.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const addon = new azure_native.avs.Addon("addon", {
addonName: "vr",
addonType: azure_native.avs.AddonType.VR,
privateCloudName: "cloud1",
resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native
addon = azure_native.avs.Addon("addon",
addon_name="vr",
addon_type=azure_native.avs.AddonType.VR,
private_cloud_name="cloud1",
resource_group_name="group1")
package main
import (
avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
AddonName: pulumi.String("vr"),
AddonType: pulumi.String(avs.AddonTypeVR),
PrivateCloudName: pulumi.String("cloud1"),
ResourceGroupName: pulumi.String("group1"),
})
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 addon = new AzureNative.AVS.Addon("addon", new()
{
AddonName = "vr",
AddonType = AzureNative.AVS.AddonType.VR,
PrivateCloudName = "cloud1",
ResourceGroupName = "group1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
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 addon = new Addon("addon", AddonArgs.builder()
.addonName("vr")
.addonType("VR")
.privateCloudName("cloud1")
.resourceGroupName("group1")
.build());
}
}
resources:
addon:
type: azure-native:avs:Addon
properties:
addonName: vr
addonType: VR
privateCloudName: cloud1
resourceGroupName: group1
The “VR” addon type enables vSphere Replication, which replicates individual VMs to a recovery site. Unlike array-based replication, vSphere Replication operates at the hypervisor level, providing flexibility in recovery point objectives and target locations. It’s commonly paired with Site Recovery Manager for complete DR automation.
Enable Azure Arc integration for hybrid management
Azure Arc integration extends Azure management capabilities to AVS private clouds, enabling unified governance and monitoring across hybrid environments.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const addon = new azure_native.avs.Addon("addon", {
addonName: "arc",
addonType: azure_native.avs.AddonType.Arc,
privateCloudName: "cloud1",
resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native
addon = azure_native.avs.Addon("addon",
addon_name="arc",
addon_type=azure_native.avs.AddonType.ARC,
private_cloud_name="cloud1",
resource_group_name="group1")
package main
import (
avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
AddonName: pulumi.String("arc"),
AddonType: pulumi.String(avs.AddonTypeArc),
PrivateCloudName: pulumi.String("cloud1"),
ResourceGroupName: pulumi.String("group1"),
})
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 addon = new AzureNative.AVS.Addon("addon", new()
{
AddonName = "arc",
AddonType = AzureNative.AVS.AddonType.Arc,
PrivateCloudName = "cloud1",
ResourceGroupName = "group1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
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 addon = new Addon("addon", AddonArgs.builder()
.addonName("arc")
.addonType("Arc")
.privateCloudName("cloud1")
.resourceGroupName("group1")
.build());
}
}
resources:
addon:
type: azure-native:avs:Addon
properties:
addonName: arc
addonType: Arc
privateCloudName: cloud1
resourceGroupName: group1
The “Arc” addon type connects your private cloud to Azure Arc, bringing Azure management tools to your VMware environment. This enables consistent policy enforcement, monitoring, and security across both Azure-native and VMware resources. Arc integration provides a unified control plane for hybrid infrastructure.
Beyond these examples
These snippets focus on specific addon capabilities: VMware migration and mobility (HCX), disaster recovery orchestration (SRM, vSphere Replication), and hybrid management (Azure Arc). They’re intentionally minimal rather than complete DR or migration solutions.
The examples reference pre-existing infrastructure such as an Azure VMware Solution private cloud and resource group. They focus on enabling addon capabilities rather than configuring the underlying private cloud or networking.
To keep things focused, common addon patterns are omitted, including:
- Addon-specific configuration properties beyond type
- License key management for commercial addons
- Addon version selection and upgrades
- Integration with on-premises VMware environments
These omissions are intentional: the goal is to illustrate how each addon type is enabled, not provide drop-in migration or DR modules. See the AVS Addon resource reference for all available configuration options.
Let's configure Azure VMware Solution Addons
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Configuration & Addon Types
Arc, HCX, SRM, and VR. Specify the type using the addonType property.addonName, privateCloudName, and resourceGroupName. Changing any of these requires replacing the resource.API Versions & Import
pulumi package add azure-native avs [ApiVersion]. Available versions include 2022-05-01, 2023-03-01, and 2024-09-01.pulumi import azure-native:avs:Addon <name> /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AVS/privateClouds/{privateCloudName}/addons/{addonName}