All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.azure.siterecovery.kotlin.ReplicationRecoveryPlan.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.azure.siterecovery.kotlin

import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanAzureToAzureSettings
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanBootRecoveryGroup
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanFailoverRecoveryGroup
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanRecoveryGroup
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanShutdownRecoveryGroup
import com.pulumi.core.Output
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Boolean
import kotlin.Deprecated
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanAzureToAzureSettings.Companion.toKotlin as replicationRecoveryPlanAzureToAzureSettingsToKotlin
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanBootRecoveryGroup.Companion.toKotlin as replicationRecoveryPlanBootRecoveryGroupToKotlin
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanFailoverRecoveryGroup.Companion.toKotlin as replicationRecoveryPlanFailoverRecoveryGroupToKotlin
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanRecoveryGroup.Companion.toKotlin as replicationRecoveryPlanRecoveryGroupToKotlin
import com.pulumi.azure.siterecovery.kotlin.outputs.ReplicationRecoveryPlanShutdownRecoveryGroup.Companion.toKotlin as replicationRecoveryPlanShutdownRecoveryGroupToKotlin

/**
 * Builder for [ReplicationRecoveryPlan].
 */
@PulumiTagMarker
public class ReplicationRecoveryPlanResourceBuilder internal constructor() {
    public var name: String? = null

    public var args: ReplicationRecoveryPlanArgs = ReplicationRecoveryPlanArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

    /**
     * @param name The _unique_ name of the resulting resource.
     */
    public fun name(`value`: String) {
        this.name = value
    }

    /**
     * @param block The arguments to use to populate this resource's properties.
     */
    public suspend fun args(block: suspend ReplicationRecoveryPlanArgsBuilder.() -> Unit) {
        val builder = ReplicationRecoveryPlanArgsBuilder()
        block(builder)
        this.args = builder.build()
    }

    /**
     * @param block A bag of options that control this resource's behavior.
     */
    public suspend fun opts(block: suspend CustomResourceOptionsBuilder.() -> Unit) {
        this.opts = com.pulumi.kotlin.options.CustomResourceOptions.opts(block)
    }

    internal fun build(): ReplicationRecoveryPlan {
        val builtJavaResource =
            com.pulumi.azure.siterecovery.ReplicationRecoveryPlan(
                this.name,
                this.args.toJava(),
                this.opts.toJava(),
            )
        return ReplicationRecoveryPlan(builtJavaResource)
    }
}

/**
 * Manages a Site Recovery Replication Recovery Plan within a Recovery Services vault. A recovery plan gathers machines into recovery groups for the purpose of failover.
 * ## Example Usage
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * const primary = new azure.core.ResourceGroup("primary", {
 *     name: "tfex-replicated-vm-primary",
 *     location: "West US",
 * });
 * const secondary = new azure.core.ResourceGroup("secondary", {
 *     name: "tfex-replicated-vm-secondary",
 *     location: "East US",
 * });
 * const primaryVirtualNetwork = new azure.network.VirtualNetwork("primary", {
 *     name: "network1",
 *     resourceGroupName: primary.name,
 *     addressSpaces: ["192.168.1.0/24"],
 *     location: primary.location,
 * });
 * const primarySubnet = new azure.network.Subnet("primary", {
 *     name: "network1-subnet",
 *     resourceGroupName: primary.name,
 *     virtualNetworkName: primaryVirtualNetwork.name,
 *     addressPrefixes: ["192.168.1.0/24"],
 * });
 * const primaryPublicIp = new azure.network.PublicIp("primary", {
 *     name: "vm-public-ip-primary",
 *     allocationMethod: "Static",
 *     location: primary.location,
 *     resourceGroupName: primary.name,
 *     sku: "Basic",
 * });
 * const vmNetworkInterface = new azure.network.NetworkInterface("vm", {
 *     name: "vm-nic",
 *     location: primary.location,
 *     resourceGroupName: primary.name,
 *     ipConfigurations: [{
 *         name: "vm",
 *         subnetId: primarySubnet.id,
 *         privateIpAddressAllocation: "Dynamic",
 *         publicIpAddressId: primaryPublicIp.id,
 *     }],
 * });
 * const vm = new azure.compute.VirtualMachine("vm", {
 *     name: "vm",
 *     location: primary.location,
 *     resourceGroupName: primary.name,
 *     vmSize: "Standard_B1s",
 *     networkInterfaceIds: [vmNetworkInterface.id],
 *     storageImageReference: {
 *         publisher: "Canonical",
 *         offer: "0001-com-ubuntu-server-jammy",
 *         sku: "22_04-lts",
 *         version: "latest",
 *     },
 *     storageOsDisk: {
 *         name: "vm-os-disk",
 *         osType: "Linux",
 *         caching: "ReadWrite",
 *         createOption: "FromImage",
 *         managedDiskType: "Premium_LRS",
 *     },
 *     osProfile: {
 *         adminUsername: "test-admin-123",
 *         adminPassword: "test-pwd-123",
 *         computerName: "vm",
 *     },
 *     osProfileLinuxConfig: {
 *         disablePasswordAuthentication: false,
 *     },
 * });
 * const vault = new azure.recoveryservices.Vault("vault", {
 *     name: "example-recovery-vault",
 *     location: secondary.location,
 *     resourceGroupName: secondary.name,
 *     sku: "Standard",
 * });
 * const primaryFabric = new azure.siterecovery.Fabric("primary", {
 *     name: "primary-fabric",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     location: primary.location,
 * });
 * const secondaryFabric = new azure.siterecovery.Fabric("secondary", {
 *     name: "secondary-fabric",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     location: secondary.location,
 * });
 * const primaryProtectionContainer = new azure.siterecovery.ProtectionContainer("primary", {
 *     name: "primary-protection-container",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     recoveryFabricName: primaryFabric.name,
 * });
 * const secondaryProtectionContainer = new azure.siterecovery.ProtectionContainer("secondary", {
 *     name: "secondary-protection-container",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     recoveryFabricName: secondaryFabric.name,
 * });
 * const policy = new azure.siterecovery.ReplicationPolicy("policy", {
 *     name: "policy",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     recoveryPointRetentionInMinutes: 24 * 60,
 *     applicationConsistentSnapshotFrequencyInMinutes: 4 * 60,
 * });
 * const container_mapping = new azure.siterecovery.ProtectionContainerMapping("container-mapping", {
 *     name: "container-mapping",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     recoveryFabricName: primaryFabric.name,
 *     recoverySourceProtectionContainerName: primaryProtectionContainer.name,
 *     recoveryTargetProtectionContainerId: secondaryProtectionContainer.id,
 *     recoveryReplicationPolicyId: policy.id,
 * });
 * const secondaryVirtualNetwork = new azure.network.VirtualNetwork("secondary", {
 *     name: "network2",
 *     resourceGroupName: secondary.name,
 *     addressSpaces: ["192.168.2.0/24"],
 *     location: secondary.location,
 * });
 * const network_mapping = new azure.siterecovery.NetworkMapping("network-mapping", {
 *     name: "network-mapping",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     sourceRecoveryFabricName: primaryFabric.name,
 *     targetRecoveryFabricName: secondaryFabric.name,
 *     sourceNetworkId: primaryVirtualNetwork.id,
 *     targetNetworkId: secondaryVirtualNetwork.id,
 * });
 * const primaryAccount = new azure.storage.Account("primary", {
 *     name: "primaryrecoverycache",
 *     location: primary.location,
 *     resourceGroupName: primary.name,
 *     accountTier: "Standard",
 *     accountReplicationType: "LRS",
 * });
 * const secondarySubnet = new azure.network.Subnet("secondary", {
 *     name: "network2-subnet",
 *     resourceGroupName: secondary.name,
 *     virtualNetworkName: secondaryVirtualNetwork.name,
 *     addressPrefixes: ["192.168.2.0/24"],
 * });
 * const secondaryPublicIp = new azure.network.PublicIp("secondary", {
 *     name: "vm-public-ip-secondary",
 *     allocationMethod: "Static",
 *     location: secondary.location,
 *     resourceGroupName: secondary.name,
 *     sku: "Basic",
 * });
 * const vm_replication = new azure.siterecovery.ReplicatedVM("vm-replication", {
 *     name: "vm-replication",
 *     resourceGroupName: secondary.name,
 *     recoveryVaultName: vault.name,
 *     sourceRecoveryFabricName: primaryFabric.name,
 *     sourceVmId: vm.id,
 *     recoveryReplicationPolicyId: policy.id,
 *     sourceRecoveryProtectionContainerName: primaryProtectionContainer.name,
 *     targetResourceGroupId: secondary.id,
 *     targetRecoveryFabricId: secondaryFabric.id,
 *     targetRecoveryProtectionContainerId: secondaryProtectionContainer.id,
 *     managedDisks: [{
 *         diskId: vm.storageOsDisk.apply(storageOsDisk => storageOsDisk.managedDiskId),
 *         stagingStorageAccountId: primaryAccount.id,
 *         targetResourceGroupId: secondary.id,
 *         targetDiskType: "Premium_LRS",
 *         targetReplicaDiskType: "Premium_LRS",
 *     }],
 *     networkInterfaces: [{
 *         sourceNetworkInterfaceId: vmNetworkInterface.id,
 *         targetSubnetName: secondarySubnet.name,
 *         recoveryPublicIpAddressId: secondaryPublicIp.id,
 *     }],
 * }, {
 *     dependsOn: [
 *         container_mapping,
 *         network_mapping,
 *     ],
 * });
 * const example = new azure.siterecovery.ReplicationRecoveryPlan("example", {
 *     name: "example-recover-plan",
 *     recoveryVaultId: vault.id,
 *     sourceRecoveryFabricId: primaryFabric.id,
 *     targetRecoveryFabricId: secondaryFabric.id,
 *     shutdownRecoveryGroup: {},
 *     failoverRecoveryGroup: {},
 *     bootRecoveryGroups: [{
 *         replicatedProtectedItems: [vm_replication.id],
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * primary = azure.core.ResourceGroup("primary",
 *     name="tfex-replicated-vm-primary",
 *     location="West US")
 * secondary = azure.core.ResourceGroup("secondary",
 *     name="tfex-replicated-vm-secondary",
 *     location="East US")
 * primary_virtual_network = azure.network.VirtualNetwork("primary",
 *     name="network1",
 *     resource_group_name=primary.name,
 *     address_spaces=["192.168.1.0/24"],
 *     location=primary.location)
 * primary_subnet = azure.network.Subnet("primary",
 *     name="network1-subnet",
 *     resource_group_name=primary.name,
 *     virtual_network_name=primary_virtual_network.name,
 *     address_prefixes=["192.168.1.0/24"])
 * primary_public_ip = azure.network.PublicIp("primary",
 *     name="vm-public-ip-primary",
 *     allocation_method="Static",
 *     location=primary.location,
 *     resource_group_name=primary.name,
 *     sku="Basic")
 * vm_network_interface = azure.network.NetworkInterface("vm",
 *     name="vm-nic",
 *     location=primary.location,
 *     resource_group_name=primary.name,
 *     ip_configurations=[{
 *         "name": "vm",
 *         "subnet_id": primary_subnet.id,
 *         "private_ip_address_allocation": "Dynamic",
 *         "public_ip_address_id": primary_public_ip.id,
 *     }])
 * vm = azure.compute.VirtualMachine("vm",
 *     name="vm",
 *     location=primary.location,
 *     resource_group_name=primary.name,
 *     vm_size="Standard_B1s",
 *     network_interface_ids=[vm_network_interface.id],
 *     storage_image_reference={
 *         "publisher": "Canonical",
 *         "offer": "0001-com-ubuntu-server-jammy",
 *         "sku": "22_04-lts",
 *         "version": "latest",
 *     },
 *     storage_os_disk={
 *         "name": "vm-os-disk",
 *         "os_type": "Linux",
 *         "caching": "ReadWrite",
 *         "create_option": "FromImage",
 *         "managed_disk_type": "Premium_LRS",
 *     },
 *     os_profile={
 *         "admin_username": "test-admin-123",
 *         "admin_password": "test-pwd-123",
 *         "computer_name": "vm",
 *     },
 *     os_profile_linux_config={
 *         "disable_password_authentication": False,
 *     })
 * vault = azure.recoveryservices.Vault("vault",
 *     name="example-recovery-vault",
 *     location=secondary.location,
 *     resource_group_name=secondary.name,
 *     sku="Standard")
 * primary_fabric = azure.siterecovery.Fabric("primary",
 *     name="primary-fabric",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     location=primary.location)
 * secondary_fabric = azure.siterecovery.Fabric("secondary",
 *     name="secondary-fabric",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     location=secondary.location)
 * primary_protection_container = azure.siterecovery.ProtectionContainer("primary",
 *     name="primary-protection-container",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     recovery_fabric_name=primary_fabric.name)
 * secondary_protection_container = azure.siterecovery.ProtectionContainer("secondary",
 *     name="secondary-protection-container",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     recovery_fabric_name=secondary_fabric.name)
 * policy = azure.siterecovery.ReplicationPolicy("policy",
 *     name="policy",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     recovery_point_retention_in_minutes=24 * 60,
 *     application_consistent_snapshot_frequency_in_minutes=4 * 60)
 * container_mapping = azure.siterecovery.ProtectionContainerMapping("container-mapping",
 *     name="container-mapping",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     recovery_fabric_name=primary_fabric.name,
 *     recovery_source_protection_container_name=primary_protection_container.name,
 *     recovery_target_protection_container_id=secondary_protection_container.id,
 *     recovery_replication_policy_id=policy.id)
 * secondary_virtual_network = azure.network.VirtualNetwork("secondary",
 *     name="network2",
 *     resource_group_name=secondary.name,
 *     address_spaces=["192.168.2.0/24"],
 *     location=secondary.location)
 * network_mapping = azure.siterecovery.NetworkMapping("network-mapping",
 *     name="network-mapping",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     source_recovery_fabric_name=primary_fabric.name,
 *     target_recovery_fabric_name=secondary_fabric.name,
 *     source_network_id=primary_virtual_network.id,
 *     target_network_id=secondary_virtual_network.id)
 * primary_account = azure.storage.Account("primary",
 *     name="primaryrecoverycache",
 *     location=primary.location,
 *     resource_group_name=primary.name,
 *     account_tier="Standard",
 *     account_replication_type="LRS")
 * secondary_subnet = azure.network.Subnet("secondary",
 *     name="network2-subnet",
 *     resource_group_name=secondary.name,
 *     virtual_network_name=secondary_virtual_network.name,
 *     address_prefixes=["192.168.2.0/24"])
 * secondary_public_ip = azure.network.PublicIp("secondary",
 *     name="vm-public-ip-secondary",
 *     allocation_method="Static",
 *     location=secondary.location,
 *     resource_group_name=secondary.name,
 *     sku="Basic")
 * vm_replication = azure.siterecovery.ReplicatedVM("vm-replication",
 *     name="vm-replication",
 *     resource_group_name=secondary.name,
 *     recovery_vault_name=vault.name,
 *     source_recovery_fabric_name=primary_fabric.name,
 *     source_vm_id=vm.id,
 *     recovery_replication_policy_id=policy.id,
 *     source_recovery_protection_container_name=primary_protection_container.name,
 *     target_resource_group_id=secondary.id,
 *     target_recovery_fabric_id=secondary_fabric.id,
 *     target_recovery_protection_container_id=secondary_protection_container.id,
 *     managed_disks=[{
 *         "disk_id": vm.storage_os_disk.managed_disk_id,
 *         "staging_storage_account_id": primary_account.id,
 *         "target_resource_group_id": secondary.id,
 *         "target_disk_type": "Premium_LRS",
 *         "target_replica_disk_type": "Premium_LRS",
 *     }],
 *     network_interfaces=[{
 *         "source_network_interface_id": vm_network_interface.id,
 *         "target_subnet_name": secondary_subnet.name,
 *         "recovery_public_ip_address_id": secondary_public_ip.id,
 *     }],
 *     opts = pulumi.ResourceOptions(depends_on=[
 *             container_mapping,
 *             network_mapping,
 *         ]))
 * example = azure.siterecovery.ReplicationRecoveryPlan("example",
 *     name="example-recover-plan",
 *     recovery_vault_id=vault.id,
 *     source_recovery_fabric_id=primary_fabric.id,
 *     target_recovery_fabric_id=secondary_fabric.id,
 *     shutdown_recovery_group={},
 *     failover_recovery_group={},
 *     boot_recovery_groups=[{
 *         "replicated_protected_items": [vm_replication.id],
 *     }])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * return await Deployment.RunAsync(() =>
 * {
 *     var primary = new Azure.Core.ResourceGroup("primary", new()
 *     {
 *         Name = "tfex-replicated-vm-primary",
 *         Location = "West US",
 *     });
 *     var secondary = new Azure.Core.ResourceGroup("secondary", new()
 *     {
 *         Name = "tfex-replicated-vm-secondary",
 *         Location = "East US",
 *     });
 *     var primaryVirtualNetwork = new Azure.Network.VirtualNetwork("primary", new()
 *     {
 *         Name = "network1",
 *         ResourceGroupName = primary.Name,
 *         AddressSpaces = new[]
 *         {
 *             "192.168.1.0/24",
 *         },
 *         Location = primary.Location,
 *     });
 *     var primarySubnet = new Azure.Network.Subnet("primary", new()
 *     {
 *         Name = "network1-subnet",
 *         ResourceGroupName = primary.Name,
 *         VirtualNetworkName = primaryVirtualNetwork.Name,
 *         AddressPrefixes = new[]
 *         {
 *             "192.168.1.0/24",
 *         },
 *     });
 *     var primaryPublicIp = new Azure.Network.PublicIp("primary", new()
 *     {
 *         Name = "vm-public-ip-primary",
 *         AllocationMethod = "Static",
 *         Location = primary.Location,
 *         ResourceGroupName = primary.Name,
 *         Sku = "Basic",
 *     });
 *     var vmNetworkInterface = new Azure.Network.NetworkInterface("vm", new()
 *     {
 *         Name = "vm-nic",
 *         Location = primary.Location,
 *         ResourceGroupName = primary.Name,
 *         IpConfigurations = new[]
 *         {
 *             new Azure.Network.Inputs.NetworkInterfaceIpConfigurationArgs
 *             {
 *                 Name = "vm",
 *                 SubnetId = primarySubnet.Id,
 *                 PrivateIpAddressAllocation = "Dynamic",
 *                 PublicIpAddressId = primaryPublicIp.Id,
 *             },
 *         },
 *     });
 *     var vm = new Azure.Compute.VirtualMachine("vm", new()
 *     {
 *         Name = "vm",
 *         Location = primary.Location,
 *         ResourceGroupName = primary.Name,
 *         VmSize = "Standard_B1s",
 *         NetworkInterfaceIds = new[]
 *         {
 *             vmNetworkInterface.Id,
 *         },
 *         StorageImageReference = new Azure.Compute.Inputs.VirtualMachineStorageImageReferenceArgs
 *         {
 *             Publisher = "Canonical",
 *             Offer = "0001-com-ubuntu-server-jammy",
 *             Sku = "22_04-lts",
 *             Version = "latest",
 *         },
 *         StorageOsDisk = new Azure.Compute.Inputs.VirtualMachineStorageOsDiskArgs
 *         {
 *             Name = "vm-os-disk",
 *             OsType = "Linux",
 *             Caching = "ReadWrite",
 *             CreateOption = "FromImage",
 *             ManagedDiskType = "Premium_LRS",
 *         },
 *         OsProfile = new Azure.Compute.Inputs.VirtualMachineOsProfileArgs
 *         {
 *             AdminUsername = "test-admin-123",
 *             AdminPassword = "test-pwd-123",
 *             ComputerName = "vm",
 *         },
 *         OsProfileLinuxConfig = new Azure.Compute.Inputs.VirtualMachineOsProfileLinuxConfigArgs
 *         {
 *             DisablePasswordAuthentication = false,
 *         },
 *     });
 *     var vault = new Azure.RecoveryServices.Vault("vault", new()
 *     {
 *         Name = "example-recovery-vault",
 *         Location = secondary.Location,
 *         ResourceGroupName = secondary.Name,
 *         Sku = "Standard",
 *     });
 *     var primaryFabric = new Azure.SiteRecovery.Fabric("primary", new()
 *     {
 *         Name = "primary-fabric",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         Location = primary.Location,
 *     });
 *     var secondaryFabric = new Azure.SiteRecovery.Fabric("secondary", new()
 *     {
 *         Name = "secondary-fabric",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         Location = secondary.Location,
 *     });
 *     var primaryProtectionContainer = new Azure.SiteRecovery.ProtectionContainer("primary", new()
 *     {
 *         Name = "primary-protection-container",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         RecoveryFabricName = primaryFabric.Name,
 *     });
 *     var secondaryProtectionContainer = new Azure.SiteRecovery.ProtectionContainer("secondary", new()
 *     {
 *         Name = "secondary-protection-container",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         RecoveryFabricName = secondaryFabric.Name,
 *     });
 *     var policy = new Azure.SiteRecovery.ReplicationPolicy("policy", new()
 *     {
 *         Name = "policy",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         RecoveryPointRetentionInMinutes = 24 * 60,
 *         ApplicationConsistentSnapshotFrequencyInMinutes = 4 * 60,
 *     });
 *     var container_mapping = new Azure.SiteRecovery.ProtectionContainerMapping("container-mapping", new()
 *     {
 *         Name = "container-mapping",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         RecoveryFabricName = primaryFabric.Name,
 *         RecoverySourceProtectionContainerName = primaryProtectionContainer.Name,
 *         RecoveryTargetProtectionContainerId = secondaryProtectionContainer.Id,
 *         RecoveryReplicationPolicyId = policy.Id,
 *     });
 *     var secondaryVirtualNetwork = new Azure.Network.VirtualNetwork("secondary", new()
 *     {
 *         Name = "network2",
 *         ResourceGroupName = secondary.Name,
 *         AddressSpaces = new[]
 *         {
 *             "192.168.2.0/24",
 *         },
 *         Location = secondary.Location,
 *     });
 *     var network_mapping = new Azure.SiteRecovery.NetworkMapping("network-mapping", new()
 *     {
 *         Name = "network-mapping",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         SourceRecoveryFabricName = primaryFabric.Name,
 *         TargetRecoveryFabricName = secondaryFabric.Name,
 *         SourceNetworkId = primaryVirtualNetwork.Id,
 *         TargetNetworkId = secondaryVirtualNetwork.Id,
 *     });
 *     var primaryAccount = new Azure.Storage.Account("primary", new()
 *     {
 *         Name = "primaryrecoverycache",
 *         Location = primary.Location,
 *         ResourceGroupName = primary.Name,
 *         AccountTier = "Standard",
 *         AccountReplicationType = "LRS",
 *     });
 *     var secondarySubnet = new Azure.Network.Subnet("secondary", new()
 *     {
 *         Name = "network2-subnet",
 *         ResourceGroupName = secondary.Name,
 *         VirtualNetworkName = secondaryVirtualNetwork.Name,
 *         AddressPrefixes = new[]
 *         {
 *             "192.168.2.0/24",
 *         },
 *     });
 *     var secondaryPublicIp = new Azure.Network.PublicIp("secondary", new()
 *     {
 *         Name = "vm-public-ip-secondary",
 *         AllocationMethod = "Static",
 *         Location = secondary.Location,
 *         ResourceGroupName = secondary.Name,
 *         Sku = "Basic",
 *     });
 *     var vm_replication = new Azure.SiteRecovery.ReplicatedVM("vm-replication", new()
 *     {
 *         Name = "vm-replication",
 *         ResourceGroupName = secondary.Name,
 *         RecoveryVaultName = vault.Name,
 *         SourceRecoveryFabricName = primaryFabric.Name,
 *         SourceVmId = vm.Id,
 *         RecoveryReplicationPolicyId = policy.Id,
 *         SourceRecoveryProtectionContainerName = primaryProtectionContainer.Name,
 *         TargetResourceGroupId = secondary.Id,
 *         TargetRecoveryFabricId = secondaryFabric.Id,
 *         TargetRecoveryProtectionContainerId = secondaryProtectionContainer.Id,
 *         ManagedDisks = new[]
 *         {
 *             new Azure.SiteRecovery.Inputs.ReplicatedVMManagedDiskArgs
 *             {
 *                 DiskId = vm.StorageOsDisk.Apply(storageOsDisk => storageOsDisk.ManagedDiskId),
 *                 StagingStorageAccountId = primaryAccount.Id,
 *                 TargetResourceGroupId = secondary.Id,
 *                 TargetDiskType = "Premium_LRS",
 *                 TargetReplicaDiskType = "Premium_LRS",
 *             },
 *         },
 *         NetworkInterfaces = new[]
 *         {
 *             new Azure.SiteRecovery.Inputs.ReplicatedVMNetworkInterfaceArgs
 *             {
 *                 SourceNetworkInterfaceId = vmNetworkInterface.Id,
 *                 TargetSubnetName = secondarySubnet.Name,
 *                 RecoveryPublicIpAddressId = secondaryPublicIp.Id,
 *             },
 *         },
 *     }, new CustomResourceOptions
 *     {
 *         DependsOn =
 *         {
 *             container_mapping,
 *             network_mapping,
 *         },
 *     });
 *     var example = new Azure.SiteRecovery.ReplicationRecoveryPlan("example", new()
 *     {
 *         Name = "example-recover-plan",
 *         RecoveryVaultId = vault.Id,
 *         SourceRecoveryFabricId = primaryFabric.Id,
 *         TargetRecoveryFabricId = secondaryFabric.Id,
 *         ShutdownRecoveryGroup = null,
 *         FailoverRecoveryGroup = null,
 *         BootRecoveryGroups = new[]
 *         {
 *             new Azure.SiteRecovery.Inputs.ReplicationRecoveryPlanBootRecoveryGroupArgs
 *             {
 *                 ReplicatedProtectedItems = new[]
 *                 {
 *                     vm_replication.Id,
 *                 },
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/compute"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/network"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/recoveryservices"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/siterecovery"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		primary, err := core.NewResourceGroup(ctx, "primary", &core.ResourceGroupArgs{
 * 			Name:     pulumi.String("tfex-replicated-vm-primary"),
 * 			Location: pulumi.String("West US"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		secondary, err := core.NewResourceGroup(ctx, "secondary", &core.ResourceGroupArgs{
 * 			Name:     pulumi.String("tfex-replicated-vm-secondary"),
 * 			Location: pulumi.String("East US"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primaryVirtualNetwork, err := network.NewVirtualNetwork(ctx, "primary", &network.VirtualNetworkArgs{
 * 			Name:              pulumi.String("network1"),
 * 			ResourceGroupName: primary.Name,
 * 			AddressSpaces: pulumi.StringArray{
 * 				pulumi.String("192.168.1.0/24"),
 * 			},
 * 			Location: primary.Location,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primarySubnet, err := network.NewSubnet(ctx, "primary", &network.SubnetArgs{
 * 			Name:               pulumi.String("network1-subnet"),
 * 			ResourceGroupName:  primary.Name,
 * 			VirtualNetworkName: primaryVirtualNetwork.Name,
 * 			AddressPrefixes: pulumi.StringArray{
 * 				pulumi.String("192.168.1.0/24"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primaryPublicIp, err := network.NewPublicIp(ctx, "primary", &network.PublicIpArgs{
 * 			Name:              pulumi.String("vm-public-ip-primary"),
 * 			AllocationMethod:  pulumi.String("Static"),
 * 			Location:          primary.Location,
 * 			ResourceGroupName: primary.Name,
 * 			Sku:               pulumi.String("Basic"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		vmNetworkInterface, err := network.NewNetworkInterface(ctx, "vm", &network.NetworkInterfaceArgs{
 * 			Name:              pulumi.String("vm-nic"),
 * 			Location:          primary.Location,
 * 			ResourceGroupName: primary.Name,
 * 			IpConfigurations: network.NetworkInterfaceIpConfigurationArray{
 * 				&network.NetworkInterfaceIpConfigurationArgs{
 * 					Name:                       pulumi.String("vm"),
 * 					SubnetId:                   primarySubnet.ID(),
 * 					PrivateIpAddressAllocation: pulumi.String("Dynamic"),
 * 					PublicIpAddressId:          primaryPublicIp.ID(),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		vm, err := compute.NewVirtualMachine(ctx, "vm", &compute.VirtualMachineArgs{
 * 			Name:              pulumi.String("vm"),
 * 			Location:          primary.Location,
 * 			ResourceGroupName: primary.Name,
 * 			VmSize:            pulumi.String("Standard_B1s"),
 * 			NetworkInterfaceIds: pulumi.StringArray{
 * 				vmNetworkInterface.ID(),
 * 			},
 * 			StorageImageReference: &compute.VirtualMachineStorageImageReferenceArgs{
 * 				Publisher: pulumi.String("Canonical"),
 * 				Offer:     pulumi.String("0001-com-ubuntu-server-jammy"),
 * 				Sku:       pulumi.String("22_04-lts"),
 * 				Version:   pulumi.String("latest"),
 * 			},
 * 			StorageOsDisk: &compute.VirtualMachineStorageOsDiskArgs{
 * 				Name:            pulumi.String("vm-os-disk"),
 * 				OsType:          pulumi.String("Linux"),
 * 				Caching:         pulumi.String("ReadWrite"),
 * 				CreateOption:    pulumi.String("FromImage"),
 * 				ManagedDiskType: pulumi.String("Premium_LRS"),
 * 			},
 * 			OsProfile: &compute.VirtualMachineOsProfileArgs{
 * 				AdminUsername: pulumi.String("test-admin-123"),
 * 				AdminPassword: pulumi.String("test-pwd-123"),
 * 				ComputerName:  pulumi.String("vm"),
 * 			},
 * 			OsProfileLinuxConfig: &compute.VirtualMachineOsProfileLinuxConfigArgs{
 * 				DisablePasswordAuthentication: pulumi.Bool(false),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		vault, err := recoveryservices.NewVault(ctx, "vault", &recoveryservices.VaultArgs{
 * 			Name:              pulumi.String("example-recovery-vault"),
 * 			Location:          secondary.Location,
 * 			ResourceGroupName: secondary.Name,
 * 			Sku:               pulumi.String("Standard"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primaryFabric, err := siterecovery.NewFabric(ctx, "primary", &siterecovery.FabricArgs{
 * 			Name:              pulumi.String("primary-fabric"),
 * 			ResourceGroupName: secondary.Name,
 * 			RecoveryVaultName: vault.Name,
 * 			Location:          primary.Location,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		secondaryFabric, err := siterecovery.NewFabric(ctx, "secondary", &siterecovery.FabricArgs{
 * 			Name:              pulumi.String("secondary-fabric"),
 * 			ResourceGroupName: secondary.Name,
 * 			RecoveryVaultName: vault.Name,
 * 			Location:          secondary.Location,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primaryProtectionContainer, err := siterecovery.NewProtectionContainer(ctx, "primary", &siterecovery.ProtectionContainerArgs{
 * 			Name:               pulumi.String("primary-protection-container"),
 * 			ResourceGroupName:  secondary.Name,
 * 			RecoveryVaultName:  vault.Name,
 * 			RecoveryFabricName: primaryFabric.Name,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		secondaryProtectionContainer, err := siterecovery.NewProtectionContainer(ctx, "secondary", &siterecovery.ProtectionContainerArgs{
 * 			Name:               pulumi.String("secondary-protection-container"),
 * 			ResourceGroupName:  secondary.Name,
 * 			RecoveryVaultName:  vault.Name,
 * 			RecoveryFabricName: secondaryFabric.Name,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		policy, err := siterecovery.NewReplicationPolicy(ctx, "policy", &siterecovery.ReplicationPolicyArgs{
 * 			Name:                            pulumi.String("policy"),
 * 			ResourceGroupName:               secondary.Name,
 * 			RecoveryVaultName:               vault.Name,
 * 			RecoveryPointRetentionInMinutes: int(24 * 60),
 * 			ApplicationConsistentSnapshotFrequencyInMinutes: int(4 * 60),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = siterecovery.NewProtectionContainerMapping(ctx, "container-mapping", &siterecovery.ProtectionContainerMappingArgs{
 * 			Name:                                  pulumi.String("container-mapping"),
 * 			ResourceGroupName:                     secondary.Name,
 * 			RecoveryVaultName:                     vault.Name,
 * 			RecoveryFabricName:                    primaryFabric.Name,
 * 			RecoverySourceProtectionContainerName: primaryProtectionContainer.Name,
 * 			RecoveryTargetProtectionContainerId:   secondaryProtectionContainer.ID(),
 * 			RecoveryReplicationPolicyId:           policy.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		secondaryVirtualNetwork, err := network.NewVirtualNetwork(ctx, "secondary", &network.VirtualNetworkArgs{
 * 			Name:              pulumi.String("network2"),
 * 			ResourceGroupName: secondary.Name,
 * 			AddressSpaces: pulumi.StringArray{
 * 				pulumi.String("192.168.2.0/24"),
 * 			},
 * 			Location: secondary.Location,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = siterecovery.NewNetworkMapping(ctx, "network-mapping", &siterecovery.NetworkMappingArgs{
 * 			Name:                     pulumi.String("network-mapping"),
 * 			ResourceGroupName:        secondary.Name,
 * 			RecoveryVaultName:        vault.Name,
 * 			SourceRecoveryFabricName: primaryFabric.Name,
 * 			TargetRecoveryFabricName: secondaryFabric.Name,
 * 			SourceNetworkId:          primaryVirtualNetwork.ID(),
 * 			TargetNetworkId:          secondaryVirtualNetwork.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primaryAccount, err := storage.NewAccount(ctx, "primary", &storage.AccountArgs{
 * 			Name:                   pulumi.String("primaryrecoverycache"),
 * 			Location:               primary.Location,
 * 			ResourceGroupName:      primary.Name,
 * 			AccountTier:            pulumi.String("Standard"),
 * 			AccountReplicationType: pulumi.String("LRS"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		secondarySubnet, err := network.NewSubnet(ctx, "secondary", &network.SubnetArgs{
 * 			Name:               pulumi.String("network2-subnet"),
 * 			ResourceGroupName:  secondary.Name,
 * 			VirtualNetworkName: secondaryVirtualNetwork.Name,
 * 			AddressPrefixes: pulumi.StringArray{
 * 				pulumi.String("192.168.2.0/24"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		secondaryPublicIp, err := network.NewPublicIp(ctx, "secondary", &network.PublicIpArgs{
 * 			Name:              pulumi.String("vm-public-ip-secondary"),
 * 			AllocationMethod:  pulumi.String("Static"),
 * 			Location:          secondary.Location,
 * 			ResourceGroupName: secondary.Name,
 * 			Sku:               pulumi.String("Basic"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = siterecovery.NewReplicatedVM(ctx, "vm-replication", &siterecovery.ReplicatedVMArgs{
 * 			Name:                                  pulumi.String("vm-replication"),
 * 			ResourceGroupName:                     secondary.Name,
 * 			RecoveryVaultName:                     vault.Name,
 * 			SourceRecoveryFabricName:              primaryFabric.Name,
 * 			SourceVmId:                            vm.ID(),
 * 			RecoveryReplicationPolicyId:           policy.ID(),
 * 			SourceRecoveryProtectionContainerName: primaryProtectionContainer.Name,
 * 			TargetResourceGroupId:                 secondary.ID(),
 * 			TargetRecoveryFabricId:                secondaryFabric.ID(),
 * 			TargetRecoveryProtectionContainerId:   secondaryProtectionContainer.ID(),
 * 			ManagedDisks: siterecovery.ReplicatedVMManagedDiskArray{
 * 				&siterecovery.ReplicatedVMManagedDiskArgs{
 * 					DiskId: vm.StorageOsDisk.ApplyT(func(storageOsDisk compute.VirtualMachineStorageOsDisk) (*string, error) {
 * 						return &storageOsDisk.ManagedDiskId, nil
 * 					}).(pulumi.StringPtrOutput),
 * 					StagingStorageAccountId: primaryAccount.ID(),
 * 					TargetResourceGroupId:   secondary.ID(),
 * 					TargetDiskType:          pulumi.String("Premium_LRS"),
 * 					TargetReplicaDiskType:   pulumi.String("Premium_LRS"),
 * 				},
 * 			},
 * 			NetworkInterfaces: siterecovery.ReplicatedVMNetworkInterfaceArray{
 * 				&siterecovery.ReplicatedVMNetworkInterfaceArgs{
 * 					SourceNetworkInterfaceId:  vmNetworkInterface.ID(),
 * 					TargetSubnetName:          secondarySubnet.Name,
 * 					RecoveryPublicIpAddressId: secondaryPublicIp.ID(),
 * 				},
 * 			},
 * 		}, pulumi.DependsOn([]pulumi.Resource{
 * 			container_mapping,
 * 			network_mapping,
 * 		}))
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = siterecovery.NewReplicationRecoveryPlan(ctx, "example", &siterecovery.ReplicationRecoveryPlanArgs{
 * 			Name:                   pulumi.String("example-recover-plan"),
 * 			RecoveryVaultId:        vault.ID(),
 * 			SourceRecoveryFabricId: primaryFabric.ID(),
 * 			TargetRecoveryFabricId: secondaryFabric.ID(),
 * 			ShutdownRecoveryGroup:  nil,
 * 			FailoverRecoveryGroup:  nil,
 * 			BootRecoveryGroups: siterecovery.ReplicationRecoveryPlanBootRecoveryGroupArray{
 * 				&siterecovery.ReplicationRecoveryPlanBootRecoveryGroupArgs{
 * 					ReplicatedProtectedItems: pulumi.StringArray{
 * 						vm_replication.ID(),
 * 					},
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.azure.core.ResourceGroup;
 * import com.pulumi.azure.core.ResourceGroupArgs;
 * import com.pulumi.azure.network.VirtualNetwork;
 * import com.pulumi.azure.network.VirtualNetworkArgs;
 * import com.pulumi.azure.network.Subnet;
 * import com.pulumi.azure.network.SubnetArgs;
 * import com.pulumi.azure.network.PublicIp;
 * import com.pulumi.azure.network.PublicIpArgs;
 * import com.pulumi.azure.network.NetworkInterface;
 * import com.pulumi.azure.network.NetworkInterfaceArgs;
 * import com.pulumi.azure.network.inputs.NetworkInterfaceIpConfigurationArgs;
 * import com.pulumi.azure.compute.VirtualMachine;
 * import com.pulumi.azure.compute.VirtualMachineArgs;
 * import com.pulumi.azure.compute.inputs.VirtualMachineStorageImageReferenceArgs;
 * import com.pulumi.azure.compute.inputs.VirtualMachineStorageOsDiskArgs;
 * import com.pulumi.azure.compute.inputs.VirtualMachineOsProfileArgs;
 * import com.pulumi.azure.compute.inputs.VirtualMachineOsProfileLinuxConfigArgs;
 * import com.pulumi.azure.recoveryservices.Vault;
 * import com.pulumi.azure.recoveryservices.VaultArgs;
 * import com.pulumi.azure.siterecovery.Fabric;
 * import com.pulumi.azure.siterecovery.FabricArgs;
 * import com.pulumi.azure.siterecovery.ProtectionContainer;
 * import com.pulumi.azure.siterecovery.ProtectionContainerArgs;
 * import com.pulumi.azure.siterecovery.ReplicationPolicy;
 * import com.pulumi.azure.siterecovery.ReplicationPolicyArgs;
 * import com.pulumi.azure.siterecovery.ProtectionContainerMapping;
 * import com.pulumi.azure.siterecovery.ProtectionContainerMappingArgs;
 * import com.pulumi.azure.siterecovery.NetworkMapping;
 * import com.pulumi.azure.siterecovery.NetworkMappingArgs;
 * import com.pulumi.azure.storage.Account;
 * import com.pulumi.azure.storage.AccountArgs;
 * import com.pulumi.azure.siterecovery.ReplicatedVM;
 * import com.pulumi.azure.siterecovery.ReplicatedVMArgs;
 * import com.pulumi.azure.siterecovery.inputs.ReplicatedVMManagedDiskArgs;
 * import com.pulumi.azure.siterecovery.inputs.ReplicatedVMNetworkInterfaceArgs;
 * import com.pulumi.azure.siterecovery.ReplicationRecoveryPlan;
 * import com.pulumi.azure.siterecovery.ReplicationRecoveryPlanArgs;
 * import com.pulumi.azure.siterecovery.inputs.ReplicationRecoveryPlanShutdownRecoveryGroupArgs;
 * import com.pulumi.azure.siterecovery.inputs.ReplicationRecoveryPlanFailoverRecoveryGroupArgs;
 * import com.pulumi.azure.siterecovery.inputs.ReplicationRecoveryPlanBootRecoveryGroupArgs;
 * import com.pulumi.resources.CustomResourceOptions;
 * 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 primary = new ResourceGroup("primary", ResourceGroupArgs.builder()
 *             .name("tfex-replicated-vm-primary")
 *             .location("West US")
 *             .build());
 *         var secondary = new ResourceGroup("secondary", ResourceGroupArgs.builder()
 *             .name("tfex-replicated-vm-secondary")
 *             .location("East US")
 *             .build());
 *         var primaryVirtualNetwork = new VirtualNetwork("primaryVirtualNetwork", VirtualNetworkArgs.builder()
 *             .name("network1")
 *             .resourceGroupName(primary.name())
 *             .addressSpaces("192.168.1.0/24")
 *             .location(primary.location())
 *             .build());
 *         var primarySubnet = new Subnet("primarySubnet", SubnetArgs.builder()
 *             .name("network1-subnet")
 *             .resourceGroupName(primary.name())
 *             .virtualNetworkName(primaryVirtualNetwork.name())
 *             .addressPrefixes("192.168.1.0/24")
 *             .build());
 *         var primaryPublicIp = new PublicIp("primaryPublicIp", PublicIpArgs.builder()
 *             .name("vm-public-ip-primary")
 *             .allocationMethod("Static")
 *             .location(primary.location())
 *             .resourceGroupName(primary.name())
 *             .sku("Basic")
 *             .build());
 *         var vmNetworkInterface = new NetworkInterface("vmNetworkInterface", NetworkInterfaceArgs.builder()
 *             .name("vm-nic")
 *             .location(primary.location())
 *             .resourceGroupName(primary.name())
 *             .ipConfigurations(NetworkInterfaceIpConfigurationArgs.builder()
 *                 .name("vm")
 *                 .subnetId(primarySubnet.id())
 *                 .privateIpAddressAllocation("Dynamic")
 *                 .publicIpAddressId(primaryPublicIp.id())
 *                 .build())
 *             .build());
 *         var vm = new VirtualMachine("vm", VirtualMachineArgs.builder()
 *             .name("vm")
 *             .location(primary.location())
 *             .resourceGroupName(primary.name())
 *             .vmSize("Standard_B1s")
 *             .networkInterfaceIds(vmNetworkInterface.id())
 *             .storageImageReference(VirtualMachineStorageImageReferenceArgs.builder()
 *                 .publisher("Canonical")
 *                 .offer("0001-com-ubuntu-server-jammy")
 *                 .sku("22_04-lts")
 *                 .version("latest")
 *                 .build())
 *             .storageOsDisk(VirtualMachineStorageOsDiskArgs.builder()
 *                 .name("vm-os-disk")
 *                 .osType("Linux")
 *                 .caching("ReadWrite")
 *                 .createOption("FromImage")
 *                 .managedDiskType("Premium_LRS")
 *                 .build())
 *             .osProfile(VirtualMachineOsProfileArgs.builder()
 *                 .adminUsername("test-admin-123")
 *                 .adminPassword("test-pwd-123")
 *                 .computerName("vm")
 *                 .build())
 *             .osProfileLinuxConfig(VirtualMachineOsProfileLinuxConfigArgs.builder()
 *                 .disablePasswordAuthentication(false)
 *                 .build())
 *             .build());
 *         var vault = new Vault("vault", VaultArgs.builder()
 *             .name("example-recovery-vault")
 *             .location(secondary.location())
 *             .resourceGroupName(secondary.name())
 *             .sku("Standard")
 *             .build());
 *         var primaryFabric = new Fabric("primaryFabric", FabricArgs.builder()
 *             .name("primary-fabric")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .location(primary.location())
 *             .build());
 *         var secondaryFabric = new Fabric("secondaryFabric", FabricArgs.builder()
 *             .name("secondary-fabric")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .location(secondary.location())
 *             .build());
 *         var primaryProtectionContainer = new ProtectionContainer("primaryProtectionContainer", ProtectionContainerArgs.builder()
 *             .name("primary-protection-container")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .recoveryFabricName(primaryFabric.name())
 *             .build());
 *         var secondaryProtectionContainer = new ProtectionContainer("secondaryProtectionContainer", ProtectionContainerArgs.builder()
 *             .name("secondary-protection-container")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .recoveryFabricName(secondaryFabric.name())
 *             .build());
 *         var policy = new ReplicationPolicy("policy", ReplicationPolicyArgs.builder()
 *             .name("policy")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .recoveryPointRetentionInMinutes(24 * 60)
 *             .applicationConsistentSnapshotFrequencyInMinutes(4 * 60)
 *             .build());
 *         var container_mapping = new ProtectionContainerMapping("container-mapping", ProtectionContainerMappingArgs.builder()
 *             .name("container-mapping")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .recoveryFabricName(primaryFabric.name())
 *             .recoverySourceProtectionContainerName(primaryProtectionContainer.name())
 *             .recoveryTargetProtectionContainerId(secondaryProtectionContainer.id())
 *             .recoveryReplicationPolicyId(policy.id())
 *             .build());
 *         var secondaryVirtualNetwork = new VirtualNetwork("secondaryVirtualNetwork", VirtualNetworkArgs.builder()
 *             .name("network2")
 *             .resourceGroupName(secondary.name())
 *             .addressSpaces("192.168.2.0/24")
 *             .location(secondary.location())
 *             .build());
 *         var network_mapping = new NetworkMapping("network-mapping", NetworkMappingArgs.builder()
 *             .name("network-mapping")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .sourceRecoveryFabricName(primaryFabric.name())
 *             .targetRecoveryFabricName(secondaryFabric.name())
 *             .sourceNetworkId(primaryVirtualNetwork.id())
 *             .targetNetworkId(secondaryVirtualNetwork.id())
 *             .build());
 *         var primaryAccount = new Account("primaryAccount", AccountArgs.builder()
 *             .name("primaryrecoverycache")
 *             .location(primary.location())
 *             .resourceGroupName(primary.name())
 *             .accountTier("Standard")
 *             .accountReplicationType("LRS")
 *             .build());
 *         var secondarySubnet = new Subnet("secondarySubnet", SubnetArgs.builder()
 *             .name("network2-subnet")
 *             .resourceGroupName(secondary.name())
 *             .virtualNetworkName(secondaryVirtualNetwork.name())
 *             .addressPrefixes("192.168.2.0/24")
 *             .build());
 *         var secondaryPublicIp = new PublicIp("secondaryPublicIp", PublicIpArgs.builder()
 *             .name("vm-public-ip-secondary")
 *             .allocationMethod("Static")
 *             .location(secondary.location())
 *             .resourceGroupName(secondary.name())
 *             .sku("Basic")
 *             .build());
 *         var vm_replication = new ReplicatedVM("vm-replication", ReplicatedVMArgs.builder()
 *             .name("vm-replication")
 *             .resourceGroupName(secondary.name())
 *             .recoveryVaultName(vault.name())
 *             .sourceRecoveryFabricName(primaryFabric.name())
 *             .sourceVmId(vm.id())
 *             .recoveryReplicationPolicyId(policy.id())
 *             .sourceRecoveryProtectionContainerName(primaryProtectionContainer.name())
 *             .targetResourceGroupId(secondary.id())
 *             .targetRecoveryFabricId(secondaryFabric.id())
 *             .targetRecoveryProtectionContainerId(secondaryProtectionContainer.id())
 *             .managedDisks(ReplicatedVMManagedDiskArgs.builder()
 *                 .diskId(vm.storageOsDisk().applyValue(storageOsDisk -> storageOsDisk.managedDiskId()))
 *                 .stagingStorageAccountId(primaryAccount.id())
 *                 .targetResourceGroupId(secondary.id())
 *                 .targetDiskType("Premium_LRS")
 *                 .targetReplicaDiskType("Premium_LRS")
 *                 .build())
 *             .networkInterfaces(ReplicatedVMNetworkInterfaceArgs.builder()
 *                 .sourceNetworkInterfaceId(vmNetworkInterface.id())
 *                 .targetSubnetName(secondarySubnet.name())
 *                 .recoveryPublicIpAddressId(secondaryPublicIp.id())
 *                 .build())
 *             .build(), CustomResourceOptions.builder()
 *                 .dependsOn(
 *                     container_mapping,
 *                     network_mapping)
 *                 .build());
 *         var example = new ReplicationRecoveryPlan("example", ReplicationRecoveryPlanArgs.builder()
 *             .name("example-recover-plan")
 *             .recoveryVaultId(vault.id())
 *             .sourceRecoveryFabricId(primaryFabric.id())
 *             .targetRecoveryFabricId(secondaryFabric.id())
 *             .shutdownRecoveryGroup()
 *             .failoverRecoveryGroup()
 *             .bootRecoveryGroups(ReplicationRecoveryPlanBootRecoveryGroupArgs.builder()
 *                 .replicatedProtectedItems(vm_replication.id())
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * 
 * ## Import
 * Site Recovery Fabric can be imported using the `resource id`, e.g.
 * ```sh
 * $ pulumi import azure:siterecovery/replicationRecoveryPlan:ReplicationRecoveryPlan azurerm_site_recovery_replication_recovery_plan.example /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/groupName/providers/Microsoft.RecoveryServices/vaults/vaultName/replicationRecoveryPlans/planName
 * ```
 */
public class ReplicationRecoveryPlan internal constructor(
    override val javaResource: com.pulumi.azure.siterecovery.ReplicationRecoveryPlan,
) : KotlinCustomResource(javaResource, ReplicationRecoveryPlanMapper) {
    /**
     * An `azure_to_azure_settings` block as defined below.
     */
    public val azureToAzureSettings: Output?
        get() = javaResource.azureToAzureSettings().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 ->
                    replicationRecoveryPlanAzureToAzureSettingsToKotlin(args0)
                })
            }).orElse(null)
        })

    /**
     * One or more `boot_recovery_group` blocks as defined below.
     * > **NOTE:** At least one `boot_recovery_group` block will be required in the next major version of the AzureRM Provider.
     */
    public val bootRecoveryGroups: Output>
        get() = javaResource.bootRecoveryGroups().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> replicationRecoveryPlanBootRecoveryGroupToKotlin(args0) })
            })
        })

    /**
     * One `failover_recovery_group` block as defined below.
     * > **NOTE:** `failover_recovery_group` will be required in the next major version of the AzureRM Provider.
     */
    public val failoverRecoveryGroup: Output
        get() = javaResource.failoverRecoveryGroup().applyValue({ args0 ->
            args0.let({ args0 ->
                replicationRecoveryPlanFailoverRecoveryGroupToKotlin(args0)
            })
        })

    /**
     * The name of the Replication Plan. The name can contain only letters, numbers, and hyphens. It should start with a letter and end with a letter or a number. Can be a maximum of 63 characters. Changing this forces a new resource to be created.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * Three or more `recovery_group` block defined as below.
     * > **Note:** The `recovery_group` block is deprecated in favor of `shutdown_recovery_group`, `failover_recovery_group` and `boot_recovery_group`. It will be removed in v4.0 of the Azure Provider.
     */
    @Deprecated(
        message = """
  the `recovery_group` block has been deprecated in favour of the `shutdown_recovery_group`,
      `failover_recovery_group` and `boot_recovery_group` and will be removed in version 4.0 of the
      provider.
  """,
    )
    public val recoveryGroups: Output>
        get() = javaResource.recoveryGroups().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> replicationRecoveryPlanRecoveryGroupToKotlin(args0) })
            })
        })

    /**
     * The ID of the vault that should be updated. Changing this forces a new resource to be created.
     */
    public val recoveryVaultId: Output
        get() = javaResource.recoveryVaultId().applyValue({ args0 -> args0 })

    /**
     * One `shutdown_recovery_group` block as defined below.
     * > **NOTE:** `shutdown_recovery_group` will be required in the next major version of the AzureRM Provider.
     */
    public val shutdownRecoveryGroup: Output
        get() = javaResource.shutdownRecoveryGroup().applyValue({ args0 ->
            args0.let({ args0 ->
                replicationRecoveryPlanShutdownRecoveryGroupToKotlin(args0)
            })
        })

    /**
     * ID of source fabric to be recovered from. Changing this forces a new Replication Plan to be created.
     */
    public val sourceRecoveryFabricId: Output
        get() = javaResource.sourceRecoveryFabricId().applyValue({ args0 -> args0 })

    /**
     * ID of target fabric to recover. Changing this forces a new Replication Plan to be created.
     */
    public val targetRecoveryFabricId: Output
        get() = javaResource.targetRecoveryFabricId().applyValue({ args0 -> args0 })
}

public object ReplicationRecoveryPlanMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.azure.siterecovery.ReplicationRecoveryPlan::class == javaResource::class

    override fun map(javaResource: Resource): ReplicationRecoveryPlan =
        ReplicationRecoveryPlan(javaResource as com.pulumi.azure.siterecovery.ReplicationRecoveryPlan)
}

/**
 * @see [ReplicationRecoveryPlan].
 * @param name The _unique_ name of the resulting resource.
 * @param block Builder for [ReplicationRecoveryPlan].
 */
public suspend fun replicationRecoveryPlan(
    name: String,
    block: suspend ReplicationRecoveryPlanResourceBuilder.() -> Unit,
): ReplicationRecoveryPlan {
    val builder = ReplicationRecoveryPlanResourceBuilder()
    builder.name(name)
    block(builder)
    return builder.build()
}

/**
 * @see [ReplicationRecoveryPlan].
 * @param name The _unique_ name of the resulting resource.
 */
public fun replicationRecoveryPlan(name: String): ReplicationRecoveryPlan {
    val builder = ReplicationRecoveryPlanResourceBuilder()
    builder.name(name)
    return builder.build()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy