pspulumiyaml.azurenative.keyvault.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionKeyvaultGetManagedHsm
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the resource group that contains the managed HSM pool.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed HSM Pool.)')]
        [string]
        $name
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:keyvault:getManagedHsm -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionKeyvaultGetKey
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group which contains the specified key vault.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the key to be retrieved.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='The name of the vault which contains the key to be retrieved.)')]
        [string]
        $vaultName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:keyvault:getKey -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionKeyvaultGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the resource group that contains the key vault.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the private endpoint connection associated with the key vault.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the key vault.)')]
        [string]
        $vaultName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:keyvault:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionKeyvaultGetMHSMPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the managed HSM Pool)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Name of the resource group that contains the managed HSM pool.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the private endpoint connection associated with the managed hsm pool.)')]
        [string]
        $privateEndpointConnectionName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:keyvault:getMHSMPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionKeyvaultGetVault
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Resource Group to which the vault belongs.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the vault.)')]
        [string]
        $vaultName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:keyvault:getVault -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionKeyvaultGetSecret
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Resource Group to which the vault belongs.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the secret.)')]
        [string]
        $secretName,
        [parameter(mandatory=$False,HelpMessage='The name of the vault.)')]
        [string]
        $vaultName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:keyvault:getSecret -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class SecretAttributes
{
    [int] $expires
    [int] $notBefore
    [bool] $enabled
}
function New-AzureNativeTypeKeyvaultSecretAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expiry date in seconds since 1970-01-01T00:00:00Z.)')]
        [int]
        $expires,
        [parameter(mandatory=$False,HelpMessage='Not before date in seconds since 1970-01-01T00:00:00Z.)')]
        [int]
        $notBefore,
        [parameter(mandatory=$False,HelpMessage='Determines whether the object is enabled.)')]
        [bool]
        $enabled
    )

    process
    {
        return $([SecretAttributes]$PSBoundParameters)
    }
}
class SecretProperties
{
    [SecretAttributes] $attributes
    [string] $value
    [string] $contentType
}
function New-AzureNativeTypeKeyvaultSecretProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The attributes of the secret.)')]
        [SecretAttributes]
        $attributes,
        [parameter(mandatory=$False,HelpMessage='The value of the secret. NOTE: ''value'' will never be returned from the service, as APIs using this model are is intended for internal use in ARM deployments. Users should use the data-plane REST service for interaction with vault secrets.)')]
        [string]
        $value,
        [parameter(mandatory=$False,HelpMessage='The content type of the secret.)')]
        [string]
        $contentType
    )

    process
    {
        return $([SecretProperties]$PSBoundParameters)
    }
}
function New-AzureNativeKeyvaultSecret
{
    [Alias('azure_native_keyvault_secret')]
    param (
        [parameter(mandatory=$False,HelpMessage='Properties of the secret)')]
        [SecretProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the Resource Group to which the vault belongs.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the vault)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='Name of the secret)')]
        [string]
        $secretName,
        [parameter(mandatory=$False,HelpMessage='The tags that will be assigned to the secret. )')]
        [hashtable]
        $tags,
        [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:keyvault:Secret")

        $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["vaultName"] = $vaultName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class Sku
{
    [ArgumentCompletions('standard', 'premium')]
    [object] $name
    [ArgumentCompletions('A')]
    [string] $family
}
function New-AzureNativeTypeKeyvaultSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='SKU name to specify whether the key vault is a standard vault or a premium vault.)')]
        $name,
        [parameter(mandatory=$False,HelpMessage='SKU family name)')]
        [string]
        [ArgumentCompletions('A')]
        $family
    )

    process
    {
        return $([Sku]$PSBoundParameters)
    }
}
class Permissions
{
    [string[]] $storage
    [string[]] $certificates
    [string[]] $secrets
    [string[]] $keys
}
function New-AzureNativeTypeKeyvaultPermissions
{
    param (
        [parameter(mandatory=$False,HelpMessage='Permissions to storage accounts)')]
        $storage,
        [parameter(mandatory=$False,HelpMessage='Permissions to certificates)')]
        $certificates,
        [parameter(mandatory=$False,HelpMessage='Permissions to secrets)')]
        $secrets,
        [parameter(mandatory=$False,HelpMessage='Permissions to keys)')]
        $keys
    )

    process
    {
        return $([Permissions]$PSBoundParameters)
    }
}
class AccessPolicyEntry
{
    [string] $objectId
    [string] $tenantId
    [string] $applicationId
    [Permissions] $permissions
}
function New-AzureNativeTypeKeyvaultAccessPolicyEntry
{
    param (
        [parameter(mandatory=$False,HelpMessage='The object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies.)')]
        [string]
        $objectId,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory tenant ID that should be used for authenticating requests to the key vault.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage=' Application ID of the client making request on behalf of a principal)')]
        [string]
        $applicationId,
        [parameter(mandatory=$False,HelpMessage='Permissions the identity has for keys, secrets and certificates.)')]
        [Permissions]
        $permissions
    )

    process
    {
        return $([AccessPolicyEntry]$PSBoundParameters)
    }
}
class VirtualNetworkRule
{
    [string] $id
    [bool] $ignoreMissingVnetServiceEndpoint
}
function New-AzureNativeTypeKeyvaultVirtualNetworkRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Full resource id of a vnet subnet, such as ''/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/test-vnet/subnets/subnet1''.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Property to specify whether NRP will ignore the check if parent subnet has serviceEndpoints configured.)')]
        [bool]
        $ignoreMissingVnetServiceEndpoint
    )

    process
    {
        return $([VirtualNetworkRule]$PSBoundParameters)
    }
}
class IPRule
{
    [string] $value
}
function New-AzureNativeTypeKeyvaultIPRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='An IPv4 address range in CIDR notation, such as ''124.56.78.91'' (simple IP address) or ''124.56.78.0/24'' (all addresses that start with 124.56.78).)')]
        [string]
        $value
    )

    process
    {
        return $([IPRule]$PSBoundParameters)
    }
}
class NetworkRuleSet
{
    [ArgumentCompletions('AzureServices', 'None')]
    [string] $bypass
    [ArgumentCompletions('Allow', 'Deny')]
    [string] $defaultAction
    [VirtualNetworkRule[]] $virtualNetworkRules
    [IPRule[]] $ipRules
}
function New-AzureNativeTypeKeyvaultNetworkRuleSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tells what traffic can bypass network rules. This can be ''AzureServices'' or ''None''. If not specified the default is ''AzureServices''.)')]
        [string]
        [ArgumentCompletions('AzureServices', 'None')]
        $bypass,
        [parameter(mandatory=$False,HelpMessage='The default action when no rule from ipRules and from virtualNetworkRules match. This is only used after the bypass property has been evaluated.)')]
        [string]
        [ArgumentCompletions('Allow', 'Deny')]
        $defaultAction,
        [parameter(mandatory=$False,HelpMessage='The list of virtual network rules.)')]
        $virtualNetworkRules,
        [parameter(mandatory=$False,HelpMessage='The list of IP address rules.)')]
        $ipRules
    )

    process
    {
        return $([NetworkRuleSet]$PSBoundParameters)
    }
}
class VaultProperties
{
    [ArgumentCompletions('recover', 'default')]
    [object] $createMode
    [bool] $enablePurgeProtection
    [bool] $enabledForDeployment
    [Sku] $sku
    [int] $softDeleteRetentionInDays
    [string] $vaultUri
    [AccessPolicyEntry[]] $accessPolicies
    [bool] $enabledForTemplateDeployment
    [bool] $enableRbacAuthorization
    [bool] $enableSoftDelete
    [string] $tenantId
    [NetworkRuleSet] $networkAcls
    [bool] $enabledForDiskEncryption
    [ArgumentCompletions('Succeeded', 'RegisteringDns')]
    [string] $provisioningState
}
function New-AzureNativeTypeKeyvaultVaultProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The vault''s create mode to indicate whether the vault need to be recovered or not.)')]
        $createMode,
        [parameter(mandatory=$False,HelpMessage='Property specifying whether protection against purge is enabled for this vault. Setting this property to true activates protection against purge for this vault and its content - only the Key Vault service may initiate a hard, irrecoverable deletion. The setting is effective only if soft delete is also enabled. Enabling this functionality is irreversible - that is, the property does not accept false as its value.)')]
        [bool]
        $enablePurgeProtection,
        [parameter(mandatory=$False,HelpMessage='Property to specify whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.)')]
        [bool]
        $enabledForDeployment,
        [parameter(mandatory=$False,HelpMessage='SKU details)')]
        [Sku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='softDelete data retention days. It accepts >=7 and <=90.)')]
        [int]
        $softDeleteRetentionInDays,
        [parameter(mandatory=$False,HelpMessage='The URI of the vault for performing operations on keys and secrets. This property is readonly)')]
        [string]
        $vaultUri,
        [parameter(mandatory=$False,HelpMessage='An array of 0 to 1024 identities that have access to the key vault. All identities in the array must use the same tenant ID as the key vault''s tenant ID. When `createMode` is set to `recover`, access policies are not required. Otherwise, access policies are required.)')]
        $accessPolicies,
        [parameter(mandatory=$False,HelpMessage='Property to specify whether Azure Resource Manager is permitted to retrieve secrets from the key vault.)')]
        [bool]
        $enabledForTemplateDeployment,
        [parameter(mandatory=$False,HelpMessage='Property that controls how data actions are authorized. When true, the key vault will use Role Based Access Control (RBAC) for authorization of data actions, and the access policies specified in vault properties will be ignored. When false, the key vault will use the access policies specified in vault properties, and any policy stored on Azure Resource Manager will be ignored. If null or not specified, the vault is created with the default value of false. Note that management actions are always authorized with RBAC.)')]
        [bool]
        $enableRbacAuthorization,
        [parameter(mandatory=$False,HelpMessage='Property to specify whether the ''soft delete'' functionality is enabled for this key vault. If it''s not set to any value(true or false) when creating new key vault, it will be set to true by default. Once set to true, it cannot be reverted to false.)')]
        [bool]
        $enableSoftDelete,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory tenant ID that should be used for authenticating requests to the key vault.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='Rules governing the accessibility of the key vault from specific network locations.)')]
        [NetworkRuleSet]
        $networkAcls,
        [parameter(mandatory=$False,HelpMessage='Property to specify whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.)')]
        [bool]
        $enabledForDiskEncryption,
        [parameter(mandatory=$False,HelpMessage='Provisioning state of the vault.)')]
        [string]
        [ArgumentCompletions('Succeeded', 'RegisteringDns')]
        $provisioningState
    )

    process
    {
        return $([VaultProperties]$PSBoundParameters)
    }
}
function New-AzureNativeKeyvaultVault
{
    [Alias('azure_native_keyvault_vault')]
    param (
        [parameter(mandatory=$False,HelpMessage='The supported Azure location where the key vault should be created.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Properties of the vault)')]
        [VaultProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the Resource Group to which the server belongs.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the vault)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='The tags that will be assigned to the key vault.)')]
        [hashtable]
        $tags,
        [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:keyvault: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["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class MHSMVirtualNetworkRule
{
    [string] $id
}
function New-AzureNativeTypeKeyvaultMHSMVirtualNetworkRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Full resource id of a vnet subnet, such as ''/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/test-vnet/subnets/subnet1''.)')]
        [string]
        $id
    )

    process
    {
        return $([MHSMVirtualNetworkRule]$PSBoundParameters)
    }
}
class MHSMIPRule
{
    [string] $value
}
function New-AzureNativeTypeKeyvaultMHSMIPRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='An IPv4 address range in CIDR notation, such as ''124.56.78.91'' (simple IP address) or ''124.56.78.0/24'' (all addresses that start with 124.56.78).)')]
        [string]
        $value
    )

    process
    {
        return $([MHSMIPRule]$PSBoundParameters)
    }
}
class MHSMNetworkRuleSet
{
    [ArgumentCompletions('AzureServices', 'None')]
    [string] $bypass
    [ArgumentCompletions('Allow', 'Deny')]
    [string] $defaultAction
    [MHSMVirtualNetworkRule[]] $virtualNetworkRules
    [MHSMIPRule[]] $ipRules
}
function New-AzureNativeTypeKeyvaultMHSMNetworkRuleSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tells what traffic can bypass network rules. This can be ''AzureServices'' or ''None''. If not specified the default is ''AzureServices''.)')]
        [string]
        [ArgumentCompletions('AzureServices', 'None')]
        $bypass,
        [parameter(mandatory=$False,HelpMessage='The default action when no rule from ipRules and from virtualNetworkRules match. This is only used after the bypass property has been evaluated.)')]
        [string]
        [ArgumentCompletions('Allow', 'Deny')]
        $defaultAction,
        [parameter(mandatory=$False,HelpMessage='The list of virtual network rules.)')]
        $virtualNetworkRules,
        [parameter(mandatory=$False,HelpMessage='The list of IP address rules.)')]
        $ipRules
    )

    process
    {
        return $([MHSMNetworkRuleSet]$PSBoundParameters)
    }
}
class ManagedHsmProperties
{
    [ArgumentCompletions('recover', 'default')]
    [object] $createMode
    [string[]] $initialAdminObjectIds
    [bool] $enablePurgeProtection
    [int] $softDeleteRetentionInDays
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $publicNetworkAccess
    [bool] $enableSoftDelete
    [MHSMNetworkRuleSet] $networkAcls
    [string] $tenantId
}
function New-AzureNativeTypeKeyvaultManagedHsmProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The create mode to indicate whether the resource is being created or is being recovered from a deleted resource.)')]
        $createMode,
        [parameter(mandatory=$False,HelpMessage='Array of initial administrators object ids for this managed hsm pool.)')]
        [string[]]
        $initialAdminObjectIds,
        [parameter(mandatory=$False,HelpMessage='Property specifying whether protection against purge is enabled for this managed HSM pool. Setting this property to true activates protection against purge for this managed HSM pool and its content - only the Managed HSM service may initiate a hard, irrecoverable deletion. The setting is effective only if soft delete is also enabled. Enabling this functionality is irreversible.)')]
        [bool]
        $enablePurgeProtection,
        [parameter(mandatory=$False,HelpMessage='softDelete data retention days. It accepts >=7 and <=90.)')]
        [int]
        $softDeleteRetentionInDays,
        [parameter(mandatory=$False,HelpMessage='Control permission for data plane traffic coming from public networks while private endpoint is enabled.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $publicNetworkAccess,
        [parameter(mandatory=$False,HelpMessage='Property to specify whether the ''soft delete'' functionality is enabled for this managed HSM pool. If it''s not set to any value(true or false) when creating new managed HSM pool, it will be set to true by default. Once set to true, it cannot be reverted to false.)')]
        [bool]
        $enableSoftDelete,
        [parameter(mandatory=$False,HelpMessage='Rules governing the accessibility of the key vault from specific network locations.)')]
        [MHSMNetworkRuleSet]
        $networkAcls,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory tenant ID that should be used for authenticating requests to the managed HSM pool.)')]
        [string]
        $tenantId
    )

    process
    {
        return $([ManagedHsmProperties]$PSBoundParameters)
    }
}
class ManagedHsmSku
{
    [ArgumentCompletions('Standard_B1', 'Custom_B32')]
    [object] $name
    [ArgumentCompletions('B')]
    [string] $family
}
function New-AzureNativeTypeKeyvaultManagedHsmSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='SKU of the managed HSM Pool)')]
        $name,
        [parameter(mandatory=$False,HelpMessage='SKU Family of the managed HSM Pool)')]
        [string]
        [ArgumentCompletions('B')]
        $family
    )

    process
    {
        return $([ManagedHsmSku]$PSBoundParameters)
    }
}
function New-AzureNativeKeyvaultManagedHsm
{
    [Alias('azure_native_keyvault_managedhsm')]
    param (
        [parameter(mandatory=$False,HelpMessage='Properties of the managed HSM)')]
        [ManagedHsmProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Name of the resource group that contains the managed HSM pool.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The supported Azure location where the managed HSM Pool should be created.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Name of the managed HSM Pool)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource tags)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='SKU details)')]
        [ManagedHsmSku]
        $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:keyvault:ManagedHsm")

        $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 'properties')
        {
            $resource.properties["properties"] = $properties
        }

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class MHSMPrivateLinkServiceConnectionState
{
    [string] $description
    [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
    [string] $status
    [ArgumentCompletions('None')]
    [string] $actionsRequired
}
function New-AzureNativeTypeKeyvaultMHSMPrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='The reason for approval or rejection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Indicates whether the connection has been approved, rejected or removed by the key vault owner.)')]
        [string]
        [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
        $status,
        [parameter(mandatory=$False,HelpMessage='A message indicating if changes on the service provider require any updates on the consumer.)')]
        [string]
        [ArgumentCompletions('None')]
        $actionsRequired
    )

    process
    {
        return $([MHSMPrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeKeyvaultMHSMPrivateEndpointConnection
{
    [Alias('azure_native_keyvault_mhsmprivateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the resource group that contains the managed HSM pool.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The supported Azure location where the managed HSM Pool should be created.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Name of the managed HSM Pool)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Approval state of the private link connection.)')]
        [MHSMPrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory=$False,HelpMessage='Name of the private endpoint connection associated with the managed hsm pool.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='SKU details)')]
        [ManagedHsmSku]
        $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:keyvault:MHSMPrivateEndpointConnection")

        $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["name"] = $name
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $description
    [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
    [string] $status
    [string] $actionsRequired
}
function New-AzureNativeTypeKeyvaultPrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='The reason for approval or rejection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Indicates whether the connection has been approved, rejected or removed by the key vault owner.)')]
        [string]
        [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
        $status,
        [parameter(mandatory=$False,HelpMessage='A message indicating if changes on the service provider require any updates on the consumer.)')]
        [string]
        $actionsRequired
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeKeyvaultPrivateEndpointConnection
{
    [Alias('azure_native_keyvault_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the key vault.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='Name of the resource group that contains the key vault.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the private endpoint connection associated with the key vault.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='Approval state of the private link connection.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [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:keyvault: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 'privateEndpointConnectionName')
        {
            $resource.properties["privateEndpointConnectionName"] = $privateEndpointConnectionName
        }

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class KeyAttributes
{
    [int] $expires
    [int] $notBefore
    [bool] $enabled
}
function New-AzureNativeTypeKeyvaultKeyAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expiry date in seconds since 1970-01-01T00:00:00Z.)')]
        [int]
        $expires,
        [parameter(mandatory=$False,HelpMessage='Not before date in seconds since 1970-01-01T00:00:00Z.)')]
        [int]
        $notBefore,
        [parameter(mandatory=$False,HelpMessage='Determines whether or not the object is enabled.)')]
        [bool]
        $enabled
    )

    process
    {
        return $([KeyAttributes]$PSBoundParameters)
    }
}
class KeyProperties
{
    [KeyAttributes] $attributes
    [ArgumentCompletions('P-256', 'P-384', 'P-521', 'P-256K')]
    [string] $curveName
    [ArgumentCompletions('EC', 'EC-HSM', 'RSA', 'RSA-HSM')]
    [string] $kty
    [string[]] $keyOps
    [int] $keySize
}
function New-AzureNativeTypeKeyvaultKeyProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The attributes of the key.)')]
        [KeyAttributes]
        $attributes,
        [parameter(mandatory=$False,HelpMessage='The elliptic curve name. For valid values, see JsonWebKeyCurveName.)')]
        [string]
        [ArgumentCompletions('P-256', 'P-384', 'P-521', 'P-256K')]
        $curveName,
        [parameter(mandatory=$False,HelpMessage='The type of the key. For valid values, see JsonWebKeyType.)')]
        [string]
        [ArgumentCompletions('EC', 'EC-HSM', 'RSA', 'RSA-HSM')]
        $kty,
        [parameter(mandatory=$False,HelpMessage=')')]
        $keyOps,
        [parameter(mandatory=$False,HelpMessage='The key size in bits. For example: 2048, 3072, or 4096 for RSA.)')]
        [int]
        $keySize
    )

    process
    {
        return $([KeyProperties]$PSBoundParameters)
    }
}
function New-AzureNativeKeyvaultKey
{
    [Alias('azure_native_keyvault_key')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group which contains the specified key vault.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The properties of the key to be created.)')]
        [KeyProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the key to be created.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='The name of the key vault which contains the key to be created.)')]
        [string]
        $vaultName,
        [parameter(mandatory=$False,HelpMessage='The tags that will be assigned to the key.)')]
        [hashtable]
        $tags,
        [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:keyvault:Key")

        $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["vaultName"] = $vaultName

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

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

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