pspulumiyaml.azurenative.recoveryservices.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationProtectionContainerMapping
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Protection Container mapping name.)')]
        [string]
        $mappingName,
        [parameter(mandatory=$False,HelpMessage='Protection container name.)')]
        [string]
        $protectionContainerName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["mappingName"] = $mappingName
        $arguments["protectionContainerName"] = $protectionContainerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationProtectionContainerMapping -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetProtectionContainer
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the container whose details need to be fetched.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='Name of the fabric where the container belongs.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName
    )

    process
    {
        $arguments = @{}
        $arguments["containerName"] = $containerName
        $arguments["fabricName"] = $fabricName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getProtectionContainer -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class AADProperties
{
    [string] $audience
    [string] $authority
    [string] $servicePrincipalObjectId
    [string] $tenantId
    [string] $servicePrincipalClientId
}
function New-AzureNativeTypeRecoveryservicesAADProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $audience,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $authority,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $servicePrincipalObjectId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $servicePrincipalClientId
    )

    process
    {
        return $([AADProperties]$PSBoundParameters)
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetRecoveryPointAccessToken
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Name of the Protected Item.)')]
        [string]
        $protectedItemName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='AADPropertiesResource properties)')]
        [AADProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Optional ETag.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Name of the container.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='Fabric name associated with the container.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Recovery Point Id)')]
        [string]
        $recoveryPointId,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location
    )

    process
    {
        $arguments = @{}
        $arguments["containerName"] = $containerName
        $arguments["fabricName"] = $fabricName
        $arguments["protectedItemName"] = $protectedItemName
        $arguments["recoveryPointId"] = $recoveryPointId
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $arguments["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $arguments["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'eTag')
        {
            $arguments["eTag"] = $eTag
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $arguments["location"] = $location
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getRecoveryPointAccessToken -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetProtectedItem
{
    param (
        [parameter(mandatory=$False,HelpMessage='Container name associated with the backed up item.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='Fabric name associated with the backed up item.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Backed up item name whose details are to be fetched.)')]
        [string]
        $protectedItemName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='OData filter options.)')]
        [string]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["containerName"] = $containerName
        $arguments["fabricName"] = $fabricName
        $arguments["protectedItemName"] = $protectedItemName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $arguments["filter"] = $filter
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getProtectedItem -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationStorageClassificationMapping
{
    param (
        [parameter(mandatory=$False,HelpMessage='Storage classification mapping name.)')]
        [string]
        $storageClassificationMappingName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Storage classification name.)')]
        [string]
        $storageClassificationName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName
        $arguments["storageClassificationMappingName"] = $storageClassificationMappingName
        $arguments["storageClassificationName"] = $storageClassificationName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationStorageClassificationMapping -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Replication policy name.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["policyName"] = $policyName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationNetworkMapping
{
    param (
        [parameter(mandatory=$False,HelpMessage='Primary network name.)')]
        [string]
        $networkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Primary fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Network mapping name.)')]
        [string]
        $networkMappingName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["networkMappingName"] = $networkMappingName
        $arguments["networkName"] = $networkName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationNetworkMapping -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationFabric
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationFabric -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationMigrationItem
{
    param (
        [parameter(mandatory=$False,HelpMessage='Migration item name.)')]
        [string]
        $migrationItemName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric unique name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Protection container name.)')]
        [string]
        $protectionContainerName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["migrationItemName"] = $migrationItemName
        $arguments["protectionContainerName"] = $protectionContainerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationMigrationItem -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetResourceGuardProxy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $resourceGuardProxyName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceGuardProxyName"] = $resourceGuardProxyName
        $arguments["vaultName"] = $vaultName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getResourceGuardProxy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationRecoveryPlan
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the recovery plan.)')]
        [string]
        $recoveryPlanName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["recoveryPlanName"] = $recoveryPlanName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationRecoveryPlan -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationRecoveryServicesProvider
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Recovery services provider name)')]
        [string]
        $providerName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["providerName"] = $providerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationRecoveryServicesProvider -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationProtectedItem
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Replication protected item name.)')]
        [string]
        $replicatedProtectedItemName,
        [parameter(mandatory=$False,HelpMessage='Fabric unique name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Protection container name.)')]
        [string]
        $protectionContainerName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["protectionContainerName"] = $protectionContainerName
        $arguments["replicatedProtectedItemName"] = $replicatedProtectedItemName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationProtectedItem -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetProtectionIntent
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric name associated with the backed up item.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Backed up item name whose details are to be fetched.)')]
        [string]
        $intentObjectName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["intentObjectName"] = $intentObjectName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getProtectionIntent -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetReplicationvCenter
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='vCenter name.)')]
        [string]
        $vCenterName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName
    )

    process
    {
        $arguments = @{}
        $arguments["fabricName"] = $fabricName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceName"] = $resourceName
        $arguments["vCenterName"] = $vCenterName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getReplicationvCenter -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName
    )

    process
    {
        $arguments = @{}
        $arguments["privateEndpointConnectionName"] = $privateEndpointConnectionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetVault
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getVault -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionRecoveryservicesGetProtectionPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Backup policy information to be fetched.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName
    )

    process
    {
        $arguments = @{}
        $arguments["policyName"] = $policyName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vaultName"] = $vaultName

        $functionObject = Invoke-PulumiFunction -Name azure-native:recoveryservices:getProtectionPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class AzureWorkloadSQLAutoProtectionIntent
{
    [string] $itemId
    [ArgumentCompletions('Invalid', 'SQLInstance', 'SQLDataBase', 'SAPHanaSystem', 'SAPHanaDatabase', 'SAPAseSystem', 'SAPAseDatabase')]
    [string] $workloadItemType
    [ArgumentCompletions('Invalid', 'AzureIaasVM', 'MAB', 'DPM', 'AzureBackupServer', 'AzureSql', 'AzureStorage', 'AzureWorkload', 'DefaultBackup')]
    [string] $backupManagementType
    [ArgumentCompletions('Invalid', 'NotProtected', 'Protecting', 'Protected', 'ProtectionFailed')]
    [string] $protectionState
    [string] $sourceResourceId
    [string] $policyId
    [string] $protectionIntentItemType
}
function New-AzureNativeTypeRecoveryservicesAzureWorkloadSQLAutoProtectionIntent
{
    param (
        [parameter(mandatory=$False,HelpMessage='ID of the item which is getting protected, In case of Azure Vm , it is ProtectedItemId)')]
        [string]
        $itemId,
        [parameter(mandatory=$False,HelpMessage='Workload item type of the item for which intent is to be set)')]
        [string]
        [ArgumentCompletions('Invalid', 'SQLInstance', 'SQLDataBase', 'SAPHanaSystem', 'SAPHanaDatabase', 'SAPAseSystem', 'SAPAseDatabase')]
        $workloadItemType,
        [parameter(mandatory=$False,HelpMessage='Type of backup management for the backed up item.)')]
        [string]
        [ArgumentCompletions('Invalid', 'AzureIaasVM', 'MAB', 'DPM', 'AzureBackupServer', 'AzureSql', 'AzureStorage', 'AzureWorkload', 'DefaultBackup')]
        $backupManagementType,
        [parameter(mandatory=$False,HelpMessage='Backup state of this backup item.)')]
        [string]
        [ArgumentCompletions('Invalid', 'NotProtected', 'Protecting', 'Protected', 'ProtectionFailed')]
        $protectionState,
        [parameter(mandatory=$False,HelpMessage='ARM ID of the resource to be backed up.)')]
        [string]
        $sourceResourceId,
        [parameter(mandatory=$False,HelpMessage='ID of the backup policy with which this item is backed up.)')]
        [string]
        $policyId,
        [parameter(mandatory=$False,HelpMessage='backup protectionIntent type.
Expected value is ''AzureWorkloadSQLAutoProtectionIntent''.)'
)]
        [string]
        $protectionIntentItemType
    )

    process
    {
        return $([AzureWorkloadSQLAutoProtectionIntent]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesProtectionIntent
{
    [Alias('azure_native_recoveryservices_protectionintent')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='Fabric name associated with the backup item.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='ProtectionIntentResource properties)')]
        [AzureWorkloadSQLAutoProtectionIntent]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Intent object name.)')]
        [string]
        $intentObjectName,
        [parameter(mandatory=$False,HelpMessage='Optional ETag.)')]
        [string]
        $eTag,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ProtectionIntent")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'intentObjectName')
        {
            $resource.properties["intentObjectName"] = $intentObjectName
        }

        if($PSBoundParameters.Keys -icontains 'eTag')
        {
            $resource.properties["eTag"] = $eTag
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class AddVCenterRequestProperties
{
    [string] $port
    [string] $friendlyName
    [string] $runAsAccountId
    [string] $ipAddress
    [string] $processServerId
}
function New-AzureNativeTypeRecoveryservicesAddVCenterRequestProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The port number for discovery.)')]
        [string]
        $port,
        [parameter(mandatory=$False,HelpMessage='The friendly name of the vCenter.)')]
        [string]
        $friendlyName,
        [parameter(mandatory=$False,HelpMessage='The account Id which has privileges to discover the vCenter.)')]
        [string]
        $runAsAccountId,
        [parameter(mandatory=$False,HelpMessage='The IP address of the vCenter to be discovered.)')]
        [string]
        $ipAddress,
        [parameter(mandatory=$False,HelpMessage='The process server Id from where the discovery is orchestrated.)')]
        [string]
        $processServerId
    )

    process
    {
        return $([AddVCenterRequestProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationvCenter
{
    [Alias('azure_native_recoveryservices_replicationvcenter')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The properties of an add vCenter request.)')]
        [AddVCenterRequestProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='vCenter name.)')]
        [string]
        $vCenterName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationvCenter")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'vCenterName')
        {
            $resource.properties["vCenterName"] = $vCenterName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class IdentityProviderInput
{
    [string] $applicationId
    [string] $objectId
    [string] $tenantId
    [string] $audience
    [string] $aadAuthority
}
function New-AzureNativeTypeRecoveryservicesIdentityProviderInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The application/client Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $applicationId,
        [parameter(mandatory=$False,HelpMessage='The object Id of the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $objectId,
        [parameter(mandatory=$False,HelpMessage='The tenant Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='The intended Audience of the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $audience,
        [parameter(mandatory=$False,HelpMessage='The base authority for Azure Active Directory authentication.)')]
        [string]
        $aadAuthority
    )

    process
    {
        return $([IdentityProviderInput]$PSBoundParameters)
    }
}
class AddRecoveryServicesProviderInputProperties
{
    [IdentityProviderInput] $authenticationIdentityInput
    [string] $machineName
    [IdentityProviderInput] $dataPlaneAuthenticationIdentityInput
    [string] $machineId
    [IdentityProviderInput] $resourceAccessIdentityInput
}
function New-AzureNativeTypeRecoveryservicesAddRecoveryServicesProviderInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The identity provider input for DRA authentication.)')]
        [IdentityProviderInput]
        $authenticationIdentityInput,
        [parameter(mandatory=$False,HelpMessage='The name of the machine where the provider is getting added.)')]
        [string]
        $machineName,
        [parameter(mandatory=$False,HelpMessage='The identity provider input for data plane authentication.)')]
        [IdentityProviderInput]
        $dataPlaneAuthenticationIdentityInput,
        [parameter(mandatory=$False,HelpMessage='The Id of the machine where the provider is getting added.)')]
        [string]
        $machineId,
        [parameter(mandatory=$False,HelpMessage='The identity provider input for resource access.)')]
        [IdentityProviderInput]
        $resourceAccessIdentityInput
    )

    process
    {
        return $([AddRecoveryServicesProviderInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationRecoveryServicesProvider
{
    [Alias('azure_native_recoveryservices_replicationrecoveryservicesprovider')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The properties of an add provider request.)')]
        [AddRecoveryServicesProviderInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Recovery services provider name.)')]
        [string]
        $providerName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationRecoveryServicesProvider")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'providerName')
        {
            $resource.properties["providerName"] = $providerName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class RecoveryPlanAction
{
    [string[]] $failoverDirections
    [string[]] $failoverTypes
    [string] $actionName
}
function New-AzureNativeTypeRecoveryservicesRecoveryPlanAction
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of failover directions.)')]
        $failoverDirections,
        [parameter(mandatory=$False,HelpMessage='The list of failover types.)')]
        $failoverTypes,
        [parameter(mandatory=$False,HelpMessage='The action name.)')]
        [string]
        $actionName
    )

    process
    {
        return $([RecoveryPlanAction]$PSBoundParameters)
    }
}
class RecoveryPlanProtectedItem
{
    [string] $id
    [string] $virtualMachineId
}
function New-AzureNativeTypeRecoveryservicesRecoveryPlanProtectedItem
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ARM Id of the recovery plan protected item.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The virtual machine Id.)')]
        [string]
        $virtualMachineId
    )

    process
    {
        return $([RecoveryPlanProtectedItem]$PSBoundParameters)
    }
}
class RecoveryPlanGroup
{
    [ArgumentCompletions('Shutdown', 'Boot', 'Failover')]
    [string] $groupType
    [RecoveryPlanAction[]] $startGroupActions
    [RecoveryPlanAction[]] $endGroupActions
    [RecoveryPlanProtectedItem[]] $replicationProtectedItems
}
function New-AzureNativeTypeRecoveryservicesRecoveryPlanGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The group type.)')]
        [string]
        [ArgumentCompletions('Shutdown', 'Boot', 'Failover')]
        $groupType,
        [parameter(mandatory=$False,HelpMessage='The start group actions.)')]
        $startGroupActions,
        [parameter(mandatory=$False,HelpMessage='The end group actions.)')]
        $endGroupActions,
        [parameter(mandatory=$False,HelpMessage='The list of protected items.)')]
        $replicationProtectedItems
    )

    process
    {
        return $([RecoveryPlanGroup]$PSBoundParameters)
    }
}
class RecoveryPlanA2AInput
{
    [string] $primaryZone
    [string] $recoveryZone
    [string] $instanceType
}
function New-AzureNativeTypeRecoveryservicesRecoveryPlanA2AInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The primary zone.)')]
        [string]
        $primaryZone,
        [parameter(mandatory=$False,HelpMessage='The recovery zone.)')]
        [string]
        $recoveryZone,
        [parameter(mandatory=$False,HelpMessage='Gets the Instance type.
Expected value is ''A2A''.)'
)]
        [string]
        $instanceType
    )

    process
    {
        return $([RecoveryPlanA2AInput]$PSBoundParameters)
    }
}
class CreateRecoveryPlanInputProperties
{
    [string] $recoveryFabricId
    [string] $primaryFabricId
    [ArgumentCompletions('NotApplicable', 'Classic', 'ResourceManager')]
    [string] $failoverDeploymentModel
    [RecoveryPlanGroup[]] $groups
    [RecoveryPlanA2AInput[]] $providerSpecificInput
}
function New-AzureNativeTypeRecoveryservicesCreateRecoveryPlanInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The recovery fabric Id.)')]
        [string]
        $recoveryFabricId,
        [parameter(mandatory=$False,HelpMessage='The primary fabric Id.)')]
        [string]
        $primaryFabricId,
        [parameter(mandatory=$False,HelpMessage='The failover deployment model.)')]
        [string]
        [ArgumentCompletions('NotApplicable', 'Classic', 'ResourceManager')]
        $failoverDeploymentModel,
        [parameter(mandatory=$False,HelpMessage='The recovery plan groups.)')]
        $groups,
        [parameter(mandatory=$False,HelpMessage='The provider specific input.)')]
        $providerSpecificInput
    )

    process
    {
        return $([CreateRecoveryPlanInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationRecoveryPlan
{
    [Alias('azure_native_recoveryservices_replicationrecoveryplan')]
    param (
        [parameter(mandatory=$False,HelpMessage='Recovery plan creation properties.)')]
        [CreateRecoveryPlanInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Recovery plan name.)')]
        [string]
        $recoveryPlanName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationRecoveryPlan")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'recoveryPlanName')
        {
            $resource.properties["recoveryPlanName"] = $recoveryPlanName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class MabFileFolderProtectedItemExtendedInfo
{
    [string] $lastRefreshedAt
    [int] $recoveryPointCount
    [string] $oldestRecoveryPoint
}
function New-AzureNativeTypeRecoveryservicesMabFileFolderProtectedItemExtendedInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='Last time when the agent data synced to service.)')]
        [string]
        $lastRefreshedAt,
        [parameter(mandatory=$False,HelpMessage='Number of backup copies associated with the backup item.)')]
        [int]
        $recoveryPointCount,
        [parameter(mandatory=$False,HelpMessage='The oldest backup copy available.)')]
        [string]
        $oldestRecoveryPoint
    )

    process
    {
        return $([MabFileFolderProtectedItemExtendedInfo]$PSBoundParameters)
    }
}
class MabFileFolderProtectedItem
{
    [string] $lastRecoveryPoint
    [string] $deferredDeleteTimeRemaining
    [MabFileFolderProtectedItemExtendedInfo] $extendedInfo
    [bool] $isDeferredDeleteScheduleUpcoming
    [string] $deferredDeleteTimeInUTC
    [string] $protectionState
    [ArgumentCompletions('Invalid', 'AzureIaasVM', 'MAB', 'DPM', 'AzureBackupServer', 'AzureSql', 'AzureStorage', 'AzureWorkload', 'DefaultBackup')]
    [string] $backupManagementType
    [ArgumentCompletions('Invalid', 'VM', 'FileFolder', 'AzureSqlDb', 'SQLDB', 'Exchange', 'Sharepoint', 'VMwareVM', 'SystemState', 'Client', 'GenericDataSource', 'SQLDataBase', 'AzureFileShare', 'SAPHanaDatabase', 'SAPAseDatabase')]
    [string] $workloadType
    [string] $computerName
    [string] $backupSetName
    [string] $protectedItemType
    [string] $containerName
    [int] $deferredDeleteSyncTimeInUTC
    [bool] $isRehydrate
    [string] $sourceResourceId
    [string] $policyId
    [string] $friendlyName
    [string] $lastBackupStatus
    [ArgumentCompletions('Invalid', 'Default', 'Recover')]
    [string] $createMode
    [string] $lastBackupTime
    [bool] $isScheduledForDeferredDelete
}
function New-AzureNativeTypeRecoveryservicesMabFileFolderProtectedItem
{
    param (
        [parameter(mandatory=$False,HelpMessage='Timestamp when the last (latest) backup copy was created for this backup item.)')]
        [string]
        $lastRecoveryPoint,
        [parameter(mandatory=$False,HelpMessage='Time remaining before the DS marked for deferred delete is permanently deleted)')]
        [string]
        $deferredDeleteTimeRemaining,
        [parameter(mandatory=$False,HelpMessage='Additional information with this backup item.)')]
        [MabFileFolderProtectedItemExtendedInfo]
        $extendedInfo,
        [parameter(mandatory=$False,HelpMessage='Flag to identify whether the deferred deleted DS is to be purged soon)')]
        [bool]
        $isDeferredDeleteScheduleUpcoming,
        [parameter(mandatory=$False,HelpMessage='Time for deferred deletion in UTC)')]
        [string]
        $deferredDeleteTimeInUTC,
        [parameter(mandatory=$False,HelpMessage='Protected, ProtectionStopped, IRPending or ProtectionError)')]
        [string]
        $protectionState,
        [parameter(mandatory=$False,HelpMessage='Type of backup management for the backed up item.)')]
        [string]
        [ArgumentCompletions('Invalid', 'AzureIaasVM', 'MAB', 'DPM', 'AzureBackupServer', 'AzureSql', 'AzureStorage', 'AzureWorkload', 'DefaultBackup')]
        $backupManagementType,
        [parameter(mandatory=$False,HelpMessage='Type of workload this item represents.)')]
        [string]
        [ArgumentCompletions('Invalid', 'VM', 'FileFolder', 'AzureSqlDb', 'SQLDB', 'Exchange', 'Sharepoint', 'VMwareVM', 'SystemState', 'Client', 'GenericDataSource', 'SQLDataBase', 'AzureFileShare', 'SAPHanaDatabase', 'SAPAseDatabase')]
        $workloadType,
        [parameter(mandatory=$False,HelpMessage='Name of the computer associated with this backup item.)')]
        [string]
        $computerName,
        [parameter(mandatory=$False,HelpMessage='Name of the backup set the backup item belongs to)')]
        [string]
        $backupSetName,
        [parameter(mandatory=$False,HelpMessage='backup item type.
Expected value is ''MabFileFolderProtectedItem''.)'
)]
        [string]
        $protectedItemType,
        [parameter(mandatory=$False,HelpMessage='Unique name of container)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='Sync time for deferred deletion in UTC)')]
        [int]
        $deferredDeleteSyncTimeInUTC,
        [parameter(mandatory=$False,HelpMessage='Flag to identify that deferred deleted DS is to be moved into Pause state)')]
        [bool]
        $isRehydrate,
        [parameter(mandatory=$False,HelpMessage='ARM ID of the resource to be backed up.)')]
        [string]
        $sourceResourceId,
        [parameter(mandatory=$False,HelpMessage='ID of the backup policy with which this item is backed up.)')]
        [string]
        $policyId,
        [parameter(mandatory=$False,HelpMessage='Friendly name of this backup item.)')]
        [string]
        $friendlyName,
        [parameter(mandatory=$False,HelpMessage='Status of last backup operation.)')]
        [string]
        $lastBackupStatus,
        [parameter(mandatory=$False,HelpMessage='Create mode to indicate recovery of existing soft deleted data source or creation of new data source.)')]
        [string]
        [ArgumentCompletions('Invalid', 'Default', 'Recover')]
        $createMode,
        [parameter(mandatory=$False,HelpMessage='Timestamp of the last backup operation on this backup item.)')]
        [string]
        $lastBackupTime,
        [parameter(mandatory=$False,HelpMessage='Flag to identify whether the DS is scheduled for deferred delete)')]
        [bool]
        $isScheduledForDeferredDelete
    )

    process
    {
        return $([MabFileFolderProtectedItem]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesProtectedItem
{
    [Alias('azure_native_recoveryservices_protecteditem')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Item name to be backed up.)')]
        [string]
        $protectedItemName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='ProtectedItemResource properties)')]
        [MabFileFolderProtectedItem]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Optional ETag.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Container name associated with the backup item.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='Fabric name associated with the backup item.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ProtectedItem")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["containerName"] = $containerName
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'protectedItemName')
        {
            $resource.properties["protectedItemName"] = $protectedItemName
        }

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'eTag')
        {
            $resource.properties["eTag"] = $eTag
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class FabricCreationInputProperties
{
    [object] $customDetails #todo add class here
}
class VMwareV2FabricCreationInput
{
    [string] $vmwareSiteId
    [string] $migrationSolutionId
    [string] $instanceType
}
function New-AzureNativeTypeRecoveryservicesVMwareV2FabricCreationInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ARM Id of the VMware site.)')]
        [string]
        $vmwareSiteId,
        [parameter(mandatory=$False,HelpMessage='The ARM Id of the migration solution.)')]
        [string]
        $migrationSolutionId,
        [parameter(mandatory=$False,HelpMessage='Gets the class type.
Expected value is ''VMwareV2''.)'
)]
        [string]
        $instanceType
    )

    process
    {
        return $([VMwareV2FabricCreationInput]$PSBoundParameters)
    }
}
function New-AzureNativeTypeRecoveryservicesFabricCreationInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Fabric provider specific creation input.)')]
        [VMwareV2FabricCreationInput]
        $customDetails
    )

    process
    {
        return $([FabricCreationInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationFabric
{
    [Alias('azure_native_recoveryservices_replicationfabric')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Fabric creation input.)')]
        [FabricCreationInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Name of the ASR fabric.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationFabric")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'fabricName')
        {
            $resource.properties["fabricName"] = $fabricName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class CreatePolicyInputProperties
{
    [object] $providerSpecificInput #todo add class here
}
class VMwareCbtPolicyCreationInput
{
    [int] $appConsistentFrequencyInMinutes
    [string] $instanceType
    [int] $recoveryPointHistoryInMinutes
    [int] $crashConsistentFrequencyInMinutes
}
function New-AzureNativeTypeRecoveryservicesVMwareCbtPolicyCreationInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The app consistent snapshot frequency (in minutes).)')]
        [int]
        $appConsistentFrequencyInMinutes,
        [parameter(mandatory=$False,HelpMessage='The class type.
Expected value is ''VMwareCbt''.)'
)]
        [string]
        $instanceType,
        [parameter(mandatory=$False,HelpMessage='The duration in minutes until which the recovery points need to be stored.)')]
        [int]
        $recoveryPointHistoryInMinutes,
        [parameter(mandatory=$False,HelpMessage='The crash consistent snapshot frequency (in minutes).)')]
        [int]
        $crashConsistentFrequencyInMinutes
    )

    process
    {
        return $([VMwareCbtPolicyCreationInput]$PSBoundParameters)
    }
}
function New-AzureNativeTypeRecoveryservicesCreatePolicyInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ReplicationProviderSettings.)')]
        [VMwareCbtPolicyCreationInput]
        $providerSpecificInput
    )

    process
    {
        return $([CreatePolicyInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationPolicy
{
    [Alias('azure_native_recoveryservices_replicationpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='Policy creation properties.)')]
        [CreatePolicyInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Replication policy name)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationPolicy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'policyName')
        {
            $resource.properties["policyName"] = $policyName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class MabContainerExtendedInfo
{
    [string] $lastRefreshedAt
    [string[]] $backupItems
    [string] $lastBackupStatus
    [string] $policyName
    [ArgumentCompletions('Invalid', 'VM', 'FileFolder', 'AzureSqlDb', 'SQLDB', 'Exchange', 'Sharepoint', 'VMwareVM', 'SystemState', 'Client', 'GenericDataSource', 'SQLDataBase', 'AzureFileShare', 'SAPHanaDatabase', 'SAPAseDatabase')]
    [string] $backupItemType
}
function New-AzureNativeTypeRecoveryservicesMabContainerExtendedInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='Time stamp when this container was refreshed.)')]
        [string]
        $lastRefreshedAt,
        [parameter(mandatory=$False,HelpMessage='List of backup items associated with this container.)')]
        [string[]]
        $backupItems,
        [parameter(mandatory=$False,HelpMessage='Latest backup status of this container.)')]
        [string]
        $lastBackupStatus,
        [parameter(mandatory=$False,HelpMessage='Backup policy associated with this container.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='Type of backup items associated with this container.)')]
        [string]
        [ArgumentCompletions('Invalid', 'VM', 'FileFolder', 'AzureSqlDb', 'SQLDB', 'Exchange', 'Sharepoint', 'VMwareVM', 'SystemState', 'Client', 'GenericDataSource', 'SQLDataBase', 'AzureFileShare', 'SAPHanaDatabase', 'SAPAseDatabase')]
        $backupItemType
    )

    process
    {
        return $([MabContainerExtendedInfo]$PSBoundParameters)
    }
}
class MABContainerHealthDetails
{
    [string] $message
    [int] $code
    [string] $title
    [string[]] $recommendations
}
function New-AzureNativeTypeRecoveryservicesMABContainerHealthDetails
{
    param (
        [parameter(mandatory=$False,HelpMessage='Health Message)')]
        [string]
        $message,
        [parameter(mandatory=$False,HelpMessage='Health Code)')]
        [int]
        $code,
        [parameter(mandatory=$False,HelpMessage='Health Title)')]
        [string]
        $title,
        [parameter(mandatory=$False,HelpMessage='Health Recommended Actions)')]
        [string[]]
        $recommendations
    )

    process
    {
        return $([MABContainerHealthDetails]$PSBoundParameters)
    }
}
class MabContainer
{
    [int] $protectedItemCount
    [MabContainerExtendedInfo] $extendedInfo
    [string] $agentVersion
    [ArgumentCompletions('Invalid', 'AzureIaasVM', 'MAB', 'DPM', 'AzureBackupServer', 'AzureSql', 'AzureStorage', 'AzureWorkload', 'DefaultBackup')]
    [string] $backupManagementType
    [string] $registrationStatus
    [string] $friendlyName
    [bool] $canReRegister
    [string] $containerType
    [string] $healthStatus
    [string] $containerHealthState
    [int] $containerId
    [MABContainerHealthDetails[]] $mabContainerHealthDetails
}
function New-AzureNativeTypeRecoveryservicesMabContainer
{
    param (
        [parameter(mandatory=$False,HelpMessage='Number of items backed up in this container.)')]
        [int]
        $protectedItemCount,
        [parameter(mandatory=$False,HelpMessage='Additional information for this container)')]
        [MabContainerExtendedInfo]
        $extendedInfo,
        [parameter(mandatory=$False,HelpMessage='Agent version of this container.)')]
        [string]
        $agentVersion,
        [parameter(mandatory=$False,HelpMessage='Type of backup management for the container.)')]
        [string]
        [ArgumentCompletions('Invalid', 'AzureIaasVM', 'MAB', 'DPM', 'AzureBackupServer', 'AzureSql', 'AzureStorage', 'AzureWorkload', 'DefaultBackup')]
        $backupManagementType,
        [parameter(mandatory=$False,HelpMessage='Status of registration of the container with the Recovery Services Vault.)')]
        [string]
        $registrationStatus,
        [parameter(mandatory=$False,HelpMessage='Friendly name of the container.)')]
        [string]
        $friendlyName,
        [parameter(mandatory=$False,HelpMessage='Can the container be registered one more time.)')]
        [bool]
        $canReRegister,
        [parameter(mandatory=$False,HelpMessage='Type of the container. The value of this property for: 1. Compute Azure VM is Microsoft.Compute/virtualMachines 2.
Classic Compute Azure VM is Microsoft.ClassicCompute/virtualMachines 3. Windows machines (like MAB, DPM etc) is
Windows 4. Azure SQL instance is AzureSqlContainer. 5. Storage containers is StorageContainer. 6. Azure workload
Backup is VMAppContainer
Expected value is ''Windows''.)'
)]
        [string]
        $containerType,
        [parameter(mandatory=$False,HelpMessage='Status of health of the container.)')]
        [string]
        $healthStatus,
        [parameter(mandatory=$False,HelpMessage='Health state of mab container.)')]
        [string]
        $containerHealthState,
        [parameter(mandatory=$False,HelpMessage='ContainerID represents the container.)')]
        [int]
        $containerId,
        [parameter(mandatory=$False,HelpMessage='Health details on this mab container.)')]
        $mabContainerHealthDetails
    )

    process
    {
        return $([MabContainer]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesProtectionContainer
{
    [Alias('azure_native_recoveryservices_protectioncontainer')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the container to be registered.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='Fabric name associated with the container.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='ProtectionContainerResource properties)')]
        [MabContainer]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Optional ETag.)')]
        [string]
        $eTag,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ProtectionContainer")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'containerName')
        {
            $resource.properties["containerName"] = $containerName
        }

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'eTag')
        {
            $resource.properties["eTag"] = $eTag
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class StorageMappingInputProperties
{
    [string] $targetStorageClassificationId
}
function New-AzureNativeTypeRecoveryservicesStorageMappingInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ID of the storage object.)')]
        [string]
        $targetStorageClassificationId
    )

    process
    {
        return $([StorageMappingInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationStorageClassificationMapping
{
    [Alias('azure_native_recoveryservices_replicationstorageclassificationmapping')]
    param (
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Storage classification name.)')]
        [string]
        $storageClassificationName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Storage mapping input properties.)')]
        [StorageMappingInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Storage classification mapping name.)')]
        [string]
        $storageClassificationMappingName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationStorageClassificationMapping")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName
        $resource.properties["storageClassificationName"] = $storageClassificationName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'storageClassificationMappingName')
        {
            $resource.properties["storageClassificationMappingName"] = $storageClassificationMappingName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeRecoveryservicesResourceGuardProxy
{
    [Alias('azure_native_recoveryservices_resourceguardproxy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $resourceGuardProxyName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ResourceGuardProxy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'resourceGuardProxyName')
        {
            $resource.properties["resourceGuardProxyName"] = $resourceGuardProxyName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class MabProtectionPolicy
{
    [object] $retentionPolicy #todo add class here
    [string] $backupManagementType
    [object] $schedulePolicy #todo add class here
    [int] $protectedItemsCount
}
class RetentionDuration
{
    [ArgumentCompletions('Invalid', 'Days', 'Weeks', 'Months', 'Years')]
    [string] $durationType
    [int] $count
}
function New-AzureNativeTypeRecoveryservicesRetentionDuration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Retention duration type of retention policy.)')]
        [string]
        [ArgumentCompletions('Invalid', 'Days', 'Weeks', 'Months', 'Years')]
        $durationType,
        [parameter(mandatory=$False,HelpMessage='Count of duration types. Retention duration is obtained by the counting the duration type Count times.
For example, when Count = 3 and DurationType = Weeks, retention duration will be three weeks.)'
)]
        [int]
        $count
    )

    process
    {
        return $([RetentionDuration]$PSBoundParameters)
    }
}
class SimpleRetentionPolicy
{
    [string] $retentionPolicyType
    [RetentionDuration] $retentionDuration
}
function New-AzureNativeTypeRecoveryservicesSimpleRetentionPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='This property will be used as the discriminator for deciding the specific types in the polymorphic chain of types.
Expected value is ''SimpleRetentionPolicy''.)'
)]
        [string]
        $retentionPolicyType,
        [parameter(mandatory=$False,HelpMessage='Retention duration of the protection policy.)')]
        [RetentionDuration]
        $retentionDuration
    )

    process
    {
        return $([SimpleRetentionPolicy]$PSBoundParameters)
    }
}
class SimpleSchedulePolicy
{
    [string] $schedulePolicyType
    [ArgumentCompletions('Invalid', 'Daily', 'Weekly')]
    [string] $scheduleRunFrequency
    [ArgumentCompletions('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')]
    [string] $scheduleRunDays
    [int] $scheduleWeeklyFrequency
    [string[]] $scheduleRunTimes
}
function New-AzureNativeTypeRecoveryservicesSimpleSchedulePolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='This property will be used as the discriminator for deciding the specific types in the polymorphic chain of types.
Expected value is ''SimpleSchedulePolicy''.)'
)]
        [string]
        $schedulePolicyType,
        [parameter(mandatory=$False,HelpMessage='Frequency of the schedule operation of this policy.)')]
        [string]
        [ArgumentCompletions('Invalid', 'Daily', 'Weekly')]
        $scheduleRunFrequency,
        [parameter(mandatory=$False,HelpMessage='List of days of week this schedule has to be run.)')]
        $scheduleRunDays,
        [parameter(mandatory=$False,HelpMessage='At every number weeks this schedule has to be run.)')]
        [int]
        $scheduleWeeklyFrequency,
        [parameter(mandatory=$False,HelpMessage='List of times of day this schedule has to be run.)')]
        [string[]]
        $scheduleRunTimes
    )

    process
    {
        return $([SimpleSchedulePolicy]$PSBoundParameters)
    }
}
function New-AzureNativeTypeRecoveryservicesMabProtectionPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Retention policy details.)')]
        [SimpleRetentionPolicy]
        $retentionPolicy,
        [parameter(mandatory=$False,HelpMessage='This property will be used as the discriminator for deciding the specific types in the polymorphic chain of types.
Expected value is ''MAB''.)'
)]
        [string]
        $backupManagementType,
        [parameter(mandatory=$False,HelpMessage='Backup schedule of backup policy.)')]
        [SimpleSchedulePolicy]
        $schedulePolicy,
        [parameter(mandatory=$False,HelpMessage='Number of items associated with this policy.)')]
        [int]
        $protectedItemsCount
    )

    process
    {
        return $([MabProtectionPolicy]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesProtectionPolicy
{
    [Alias('azure_native_recoveryservices_protectionpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Optional ETag.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Backup policy to be created.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='ProtectionPolicyResource properties)')]
        [MabProtectionPolicy]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ProtectionPolicy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'eTag')
        {
            $resource.properties["eTag"] = $eTag
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'policyName')
        {
            $resource.properties["policyName"] = $policyName
        }

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class VMwareCbtDiskInput
{
    [ArgumentCompletions('Standard_LRS', 'Premium_LRS', 'StandardSSD_LRS')]
    [string] $diskType
    [string] $diskId
    [string] $isOSDisk
    [string] $logStorageAccountId
    [string] $logStorageAccountSasSecretName
}
function New-AzureNativeTypeRecoveryservicesVMwareCbtDiskInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The disk type.)')]
        [string]
        [ArgumentCompletions('Standard_LRS', 'Premium_LRS', 'StandardSSD_LRS')]
        $diskType,
        [parameter(mandatory=$False,HelpMessage='The disk Id.)')]
        [string]
        $diskId,
        [parameter(mandatory=$False,HelpMessage='A value indicating whether the disk is the OS disk.)')]
        [string]
        $isOSDisk,
        [parameter(mandatory=$False,HelpMessage='The log storage account ARM Id.)')]
        [string]
        $logStorageAccountId,
        [parameter(mandatory=$False,HelpMessage='The key vault secret name of the log storage account.)')]
        [string]
        $logStorageAccountSasSecretName
    )

    process
    {
        return $([VMwareCbtDiskInput]$PSBoundParameters)
    }
}
class VMwareCbtEnableMigrationInput
{
    [string] $targetVmName
    [string] $targetAvailabilitySetId
    [string] $targetBootDiagnosticsStorageAccountId
    [string] $vmwareMachineId
    [string] $targetSubnetName
    [string] $targetNetworkId
    [ArgumentCompletions('NotSpecified', 'NoLicenseType', 'WindowsServer')]
    [string] $licenseType
    [string] $targetVmSize
    [string] $targetResourceGroupId
    [string] $instanceType
    [string] $dataMoverRunAsAccountId
    [string] $snapshotRunAsAccountId
    [VMwareCbtDiskInput[]] $disksToInclude
}
function New-AzureNativeTypeRecoveryservicesVMwareCbtEnableMigrationInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The target VM name.)')]
        [string]
        $targetVmName,
        [parameter(mandatory=$False,HelpMessage='The target availability set ARM Id.)')]
        [string]
        $targetAvailabilitySetId,
        [parameter(mandatory=$False,HelpMessage='The target boot diagnostics storage account ARM Id.)')]
        [string]
        $targetBootDiagnosticsStorageAccountId,
        [parameter(mandatory=$False,HelpMessage='The ARM Id of the VM discovered in VMware.)')]
        [string]
        $vmwareMachineId,
        [parameter(mandatory=$False,HelpMessage='The target subnet name.)')]
        [string]
        $targetSubnetName,
        [parameter(mandatory=$False,HelpMessage='The target network ARM Id.)')]
        [string]
        $targetNetworkId,
        [parameter(mandatory=$False,HelpMessage='License type.)')]
        [string]
        [ArgumentCompletions('NotSpecified', 'NoLicenseType', 'WindowsServer')]
        $licenseType,
        [parameter(mandatory=$False,HelpMessage='The target VM size.)')]
        [string]
        $targetVmSize,
        [parameter(mandatory=$False,HelpMessage='The target resource group ARM Id.)')]
        [string]
        $targetResourceGroupId,
        [parameter(mandatory=$False,HelpMessage='The class type.
Expected value is ''VMwareCbt''.)'
)]
        [string]
        $instanceType,
        [parameter(mandatory=$False,HelpMessage='The data mover RunAs account Id.)')]
        [string]
        $dataMoverRunAsAccountId,
        [parameter(mandatory=$False,HelpMessage='The snapshot RunAs account Id.)')]
        [string]
        $snapshotRunAsAccountId,
        [parameter(mandatory=$False,HelpMessage='The disks to include list.)')]
        $disksToInclude
    )

    process
    {
        return $([VMwareCbtEnableMigrationInput]$PSBoundParameters)
    }
}
class EnableMigrationInputProperties
{
    [VMwareCbtEnableMigrationInput] $providerSpecificDetails
    [string] $policyId
}
function New-AzureNativeTypeRecoveryservicesEnableMigrationInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The provider specific details.)')]
        [VMwareCbtEnableMigrationInput]
        $providerSpecificDetails,
        [parameter(mandatory=$False,HelpMessage='The policy Id.)')]
        [string]
        $policyId
    )

    process
    {
        return $([EnableMigrationInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationMigrationItem
{
    [Alias('azure_native_recoveryservices_replicationmigrationitem')]
    param (
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Protection container name.)')]
        [string]
        $protectionContainerName,
        [parameter(mandatory=$False,HelpMessage='Migration item name.)')]
        [string]
        $migrationItemName,
        [parameter(mandatory=$False,HelpMessage='Enable migration input properties.)')]
        [EnableMigrationInputProperties]
        $properties,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationMigrationItem")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["properties"] = $properties
        $resource.properties["protectionContainerName"] = $protectionContainerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'migrationItemName')
        {
            $resource.properties["migrationItemName"] = $migrationItemName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class IdentityData
{
    [ArgumentCompletions('SystemAssigned', 'None', 'UserAssigned', 'SystemAssigned, UserAssigned')]
    [string] $type
    [object] $userAssignedIdentities
}
function New-AzureNativeTypeRecoveryservicesIdentityData
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove any identities.)')]
        [string]
        [ArgumentCompletions('SystemAssigned', 'None', 'UserAssigned', 'SystemAssigned, UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The list of user-assigned identities associated with the resource. The user-assigned identity dictionary keys will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.)')]
        [object]
        $userAssignedIdentities
    )

    process
    {
        return $([IdentityData]$PSBoundParameters)
    }
}
class CmkKeyVaultProperties
{
    [string] $keyUri
}
function New-AzureNativeTypeRecoveryservicesCmkKeyVaultProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The key uri of the Customer Managed Key)')]
        [string]
        $keyUri
    )

    process
    {
        return $([CmkKeyVaultProperties]$PSBoundParameters)
    }
}
class CmkKekIdentity
{
    [bool] $useSystemAssignedIdentity
    [string] $userAssignedIdentity
}
function New-AzureNativeTypeRecoveryservicesCmkKekIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicate that system assigned identity should be used. Mutually exclusive with ''userAssignedIdentity'' field)')]
        [bool]
        $useSystemAssignedIdentity,
        [parameter(mandatory=$False,HelpMessage='The user assigned identity to be used to grant permissions in case the type of identity used is UserAssigned)')]
        [string]
        $userAssignedIdentity
    )

    process
    {
        return $([CmkKekIdentity]$PSBoundParameters)
    }
}
class VaultPropertiesEncryption
{
    [CmkKeyVaultProperties] $keyVaultProperties
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $infrastructureEncryption
    [CmkKekIdentity] $kekIdentity
}
function New-AzureNativeTypeRecoveryservicesVaultPropertiesEncryption
{
    param (
        [parameter(mandatory=$False,HelpMessage='The properties of the Key Vault which hosts CMK)')]
        [CmkKeyVaultProperties]
        $keyVaultProperties,
        [parameter(mandatory=$False,HelpMessage='Enabling/Disabling the Double Encryption state)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $infrastructureEncryption,
        [parameter(mandatory=$False,HelpMessage='The details of the identity used for CMK)')]
        [CmkKekIdentity]
        $kekIdentity
    )

    process
    {
        return $([VaultPropertiesEncryption]$PSBoundParameters)
    }
}
class VaultProperties
{
    [VaultPropertiesEncryption] $encryption
}
function New-AzureNativeTypeRecoveryservicesVaultProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Customer Managed Key details of the resource.)')]
        [VaultPropertiesEncryption]
        $encryption
    )

    process
    {
        return $([VaultProperties]$PSBoundParameters)
    }
}
class Sku
{
    [string] $tier
    [ArgumentCompletions('Standard', 'RS0')]
    [string] $name
}
function New-AzureNativeTypeRecoveryservicesSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Sku tier.)')]
        [string]
        $tier,
        [parameter(mandatory=$False,HelpMessage='The Sku name.)')]
        [string]
        [ArgumentCompletions('Standard', 'RS0')]
        $name
    )

    process
    {
        return $([Sku]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesVault
{
    [Alias('azure_native_recoveryservices_vault')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Identity for the resource.)')]
        [IdentityData]
        $identity,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Properties of the vault.)')]
        [VaultProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Identifies the unique system identifier for each Azure resource.)')]
        [Sku]
        $sku,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:Vault")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'vaultName')
        {
            $resource.properties["vaultName"] = $vaultName
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $actionRequired
    [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
    [string] $status
    [string] $description
}
function New-AzureNativeTypeRecoveryservicesPrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets actions required)')]
        [string]
        $actionRequired,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the status)')]
        [string]
        [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Gets or sets description)')]
        [string]
        $description
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
class PrivateEndpoint
{
    [string] $id
}
function New-AzureNativeTypeRecoveryservicesPrivateEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets id)')]
        [string]
        $id
    )

    process
    {
        return $([PrivateEndpoint]$PSBoundParameters)
    }
}
class PrivateEndpointConnection
{
    [ArgumentCompletions('Succeeded', 'Deleting', 'Failed', 'Pending')]
    [string] $provisioningState
    [PrivateLinkServiceConnectionState] $privateLinkServiceConnectionState
    [PrivateEndpoint] $privateEndpoint
}
function New-AzureNativeTypeRecoveryservicesPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets provisioning state of the private endpoint connection)')]
        [string]
        [ArgumentCompletions('Succeeded', 'Deleting', 'Failed', 'Pending')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='Gets or sets private link service connection state)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory=$False,HelpMessage='Gets or sets private endpoint associated with the private endpoint connection)')]
        [PrivateEndpoint]
        $privateEndpoint
    )

    process
    {
        return $([PrivateEndpointConnection]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesPrivateEndpointConnection
{
    [Alias('azure_native_recoveryservices_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='PrivateEndpointConnectionResource properties)')]
        [PrivateEndpointConnection]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Optional ETag.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:PrivateEndpointConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vaultName"] = $vaultName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'eTag')
        {
            $resource.properties["eTag"] = $eTag
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'privateEndpointConnectionName')
        {
            $resource.properties["privateEndpointConnectionName"] = $privateEndpointConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class CreateProtectionContainerMappingInputProperties
{
    [object] $providerSpecificInput #todo add class here
    [string] $policyId
    [string] $targetProtectionContainerId
}
class VMwareCbtContainerMappingInput
{
    [string] $serviceBusConnectionStringSecretName
    [string] $instanceType
    [string] $keyVaultUri
    [string] $targetLocation
    [string] $keyVaultId
    [string] $storageAccountId
    [string] $storageAccountSasSecretName
}
function New-AzureNativeTypeRecoveryservicesVMwareCbtContainerMappingInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The secret name of the service bus connection string.)')]
        [string]
        $serviceBusConnectionStringSecretName,
        [parameter(mandatory=$False,HelpMessage='The class type.
Expected value is ''VMwareCbt''.)'
)]
        [string]
        $instanceType,
        [parameter(mandatory=$False,HelpMessage='The target key vault URL.)')]
        [string]
        $keyVaultUri,
        [parameter(mandatory=$False,HelpMessage='The target location.)')]
        [string]
        $targetLocation,
        [parameter(mandatory=$False,HelpMessage='The target key vault ARM Id.)')]
        [string]
        $keyVaultId,
        [parameter(mandatory=$False,HelpMessage='The storage account ARM Id.)')]
        [string]
        $storageAccountId,
        [parameter(mandatory=$False,HelpMessage='The secret name of the storage account.)')]
        [string]
        $storageAccountSasSecretName
    )

    process
    {
        return $([VMwareCbtContainerMappingInput]$PSBoundParameters)
    }
}
function New-AzureNativeTypeRecoveryservicesCreateProtectionContainerMappingInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Provider specific input for pairing.)')]
        [VMwareCbtContainerMappingInput]
        $providerSpecificInput,
        [parameter(mandatory=$False,HelpMessage='Applicable policy.)')]
        [string]
        $policyId,
        [parameter(mandatory=$False,HelpMessage='The target unique protection container name.)')]
        [string]
        $targetProtectionContainerId
    )

    process
    {
        return $([CreateProtectionContainerMappingInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationProtectionContainerMapping
{
    [Alias('azure_native_recoveryservices_replicationprotectioncontainermapping')]
    param (
        [parameter(mandatory=$False,HelpMessage='Fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Protection container name.)')]
        [string]
        $protectionContainerName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Configure protection input properties.)')]
        [CreateProtectionContainerMappingInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Protection container mapping name.)')]
        [string]
        $mappingName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationProtectionContainerMapping")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["protectionContainerName"] = $protectionContainerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'mappingName')
        {
            $resource.properties["mappingName"] = $mappingName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class EnableProtectionInputProperties
{
    [string] $policyId
    [string] $protectableItemId
    [object] $providerSpecificDetails #todo add class here
}
class SanEnableProtectionInput
{
    [string] $instanceType
}
function New-AzureNativeTypeRecoveryservicesSanEnableProtectionInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The class type.
Expected value is ''San''.)'
)]
        [string]
        $instanceType
    )

    process
    {
        return $([SanEnableProtectionInput]$PSBoundParameters)
    }
}
function New-AzureNativeTypeRecoveryservicesEnableProtectionInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Policy Id.)')]
        [string]
        $policyId,
        [parameter(mandatory=$False,HelpMessage='The protectable item Id.)')]
        [string]
        $protectableItemId,
        [parameter(mandatory=$False,HelpMessage='The ReplicationProviderInput. For HyperVReplicaAzure provider, it will be AzureEnableProtectionInput object. For San provider, it will be SanEnableProtectionInput object. For HyperVReplicaAzure provider, it can be null.)')]
        [SanEnableProtectionInput]
        $providerSpecificDetails
    )

    process
    {
        return $([EnableProtectionInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationProtectedItem
{
    [Alias('azure_native_recoveryservices_replicationprotecteditem')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the fabric.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Protection container name.)')]
        [string]
        $protectionContainerName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Enable protection input properties.)')]
        [EnableProtectionInputProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='A name for the replication protected item.)')]
        [string]
        $replicatedProtectedItemName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationProtectedItem")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["protectionContainerName"] = $protectionContainerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        if($PSBoundParameters.Keys -icontains 'replicatedProtectedItemName')
        {
            $resource.properties["replicatedProtectedItemName"] = $replicatedProtectedItemName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class CreateNetworkMappingInputProperties
{
    [string] $recoveryFabricName
    [object] $fabricSpecificDetails #todo add class here
    [string] $recoveryNetworkId
}
class VmmToVmmCreateNetworkMappingInput
{
    [string] $instanceType
}
function New-AzureNativeTypeRecoveryservicesVmmToVmmCreateNetworkMappingInput
{
    param (
        [parameter(mandatory=$False,HelpMessage='The instance type.
Expected value is ''VmmToVmm''.)'
)]
        [string]
        $instanceType
    )

    process
    {
        return $([VmmToVmmCreateNetworkMappingInput]$PSBoundParameters)
    }
}
function New-AzureNativeTypeRecoveryservicesCreateNetworkMappingInputProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Recovery fabric Name.)')]
        [string]
        $recoveryFabricName,
        [parameter(mandatory=$False,HelpMessage='Fabric specific input properties.)')]
        [VmmToVmmCreateNetworkMappingInput]
        $fabricSpecificDetails,
        [parameter(mandatory=$False,HelpMessage='Recovery network Id.)')]
        [string]
        $recoveryNetworkId
    )

    process
    {
        return $([CreateNetworkMappingInputProperties]$PSBoundParameters)
    }
}
function New-AzureNativeRecoveryservicesReplicationNetworkMapping
{
    [Alias('azure_native_recoveryservices_replicationnetworkmapping')]
    param (
        [parameter(mandatory=$False,HelpMessage='Primary fabric name.)')]
        [string]
        $fabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group where the recovery services vault is present.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the recovery services vault.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Network mapping name.)')]
        [string]
        $networkMappingName,
        [parameter(mandatory=$False,HelpMessage='Primary network name.)')]
        [string]
        $networkName,
        [parameter(mandatory=$False,HelpMessage='Input properties for creating network mapping.)')]
        [CreateNetworkMappingInputProperties]
        $properties,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:recoveryservices:ReplicationNetworkMapping")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["fabricName"] = $fabricName
        $resource.properties["networkName"] = $networkName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

        if($PSBoundParameters.Keys -icontains 'networkMappingName')
        {
            $resource.properties["networkMappingName"] = $networkMappingName
        }

        if($PSBoundParameters.Keys -icontains 'properties')
        {
            $resource.properties["properties"] = $properties
        }

        $global:pulumiresources += $resource
        return $resource
    }
}