pspulumiyaml.azurenative.providerhub.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionProviderhubGetSkusNestedResourceTypeFirst
{
    param (
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The first child resource type.)')]
        [string]
        $nestedResourceTypeFirst
    )

    process
    {
        $arguments = @{}
        $arguments["nestedResourceTypeFirst"] = $nestedResourceTypeFirst
        $arguments["providerNamespace"] = $providerNamespace
        $arguments["resourceType"] = $resourceType
        $arguments["sku"] = $sku

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getSkusNestedResourceTypeFirst -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetResourceTypeRegistration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType
    )

    process
    {
        $arguments = @{}
        $arguments["providerNamespace"] = $providerNamespace
        $arguments["resourceType"] = $resourceType

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getResourceTypeRegistration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetDefaultRollout
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The rollout name.)')]
        [string]
        $rolloutName
    )

    process
    {
        $arguments = @{}
        $arguments["providerNamespace"] = $providerNamespace
        $arguments["rolloutName"] = $rolloutName

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getDefaultRollout -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetSkusNestedResourceTypeThird
{
    param (
        [parameter(mandatory=$False,HelpMessage='The first child resource type.)')]
        [string]
        $nestedResourceTypeFirst,
        [parameter(mandatory=$False,HelpMessage='The third child resource type.)')]
        [string]
        $nestedResourceTypeThird,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The second child resource type.)')]
        [string]
        $nestedResourceTypeSecond,
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $sku
    )

    process
    {
        $arguments = @{}
        $arguments["nestedResourceTypeFirst"] = $nestedResourceTypeFirst
        $arguments["nestedResourceTypeSecond"] = $nestedResourceTypeSecond
        $arguments["nestedResourceTypeThird"] = $nestedResourceTypeThird
        $arguments["providerNamespace"] = $providerNamespace
        $arguments["resourceType"] = $resourceType
        $arguments["sku"] = $sku

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getSkusNestedResourceTypeThird -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetNotificationRegistration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The notification registration.)')]
        [string]
        $notificationRegistrationName
    )

    process
    {
        $arguments = @{}
        $arguments["notificationRegistrationName"] = $notificationRegistrationName
        $arguments["providerNamespace"] = $providerNamespace

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getNotificationRegistration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetSkus
{
    param (
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace
    )

    process
    {
        $arguments = @{}
        $arguments["providerNamespace"] = $providerNamespace
        $arguments["resourceType"] = $resourceType
        $arguments["sku"] = $sku

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getSkus -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetProviderRegistration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace
    )

    process
    {
        $arguments = @{}
        $arguments["providerNamespace"] = $providerNamespace

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getProviderRegistration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionProviderhubGetSkusNestedResourceTypeSecond
{
    param (
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The first child resource type.)')]
        [string]
        $nestedResourceTypeFirst,
        [parameter(mandatory=$False,HelpMessage='The second child resource type.)')]
        [string]
        $nestedResourceTypeSecond
    )

    process
    {
        $arguments = @{}
        $arguments["nestedResourceTypeFirst"] = $nestedResourceTypeFirst
        $arguments["nestedResourceTypeSecond"] = $nestedResourceTypeSecond
        $arguments["providerNamespace"] = $providerNamespace
        $arguments["resourceType"] = $resourceType
        $arguments["sku"] = $sku

        $functionObject = Invoke-PulumiFunction -Name azure-native:providerhub:getSkusNestedResourceTypeSecond -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function New-AzureNativeProviderhubOperationByProviderRegistration
{
    [Alias('azure_native_providerhub_operationbyproviderregistration')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage=')')]
        $contents,
        [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:providerhub:OperationByProviderRegistration")

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class SkuCost
{
    [string] $extendedUnit
    [string] $meterId
    [int] $quantity
}
function New-AzureNativeTypeProviderhubSkuCost
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $extendedUnit,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $meterId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [int]
        $quantity
    )

    process
    {
        return $([SkuCost]$PSBoundParameters)
    }
}
class SkuSettingCapacity
{
    [ArgumentCompletions('None', 'Manual', 'Automatic')]
    [string] $scaleType
    [int] $minimum
    [int] $default
    [int] $maximum
}
function New-AzureNativeTypeProviderhubSkuSettingCapacity
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('None', 'Manual', 'Automatic')]
        $scaleType,
        [parameter(mandatory=$False,HelpMessage=')')]
        [int]
        $minimum,
        [parameter(mandatory=$False,HelpMessage=')')]
        [int]
        $default,
        [parameter(mandatory=$False,HelpMessage=')')]
        [int]
        $maximum
    )

    process
    {
        return $([SkuSettingCapacity]$PSBoundParameters)
    }
}
class SkuCapability
{
    [string] $name
    [string] $value
}
function New-AzureNativeTypeProviderhubSkuCapability
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $value
    )

    process
    {
        return $([SkuCapability]$PSBoundParameters)
    }
}
class SkuZoneDetail
{
    [string[]] $name
    [SkuCapability[]] $capabilities
}
function New-AzureNativeTypeProviderhubSkuZoneDetail
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $name,
        [parameter(mandatory=$False,HelpMessage=')')]
        $capabilities
    )

    process
    {
        return $([SkuZoneDetail]$PSBoundParameters)
    }
}
class SkuLocationInfo
{
    [string] $location
    [string[]] $zones
    [ArgumentCompletions('NotSpecified', 'EdgeZone', 'ArcZone')]
    [string] $type
    [string[]] $extendedLocations
    [SkuZoneDetail[]] $zoneDetails
}
function New-AzureNativeTypeProviderhubSkuLocationInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'EdgeZone', 'ArcZone')]
        $type,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $extendedLocations,
        [parameter(mandatory=$False,HelpMessage=')')]
        $zoneDetails
    )

    process
    {
        return $([SkuLocationInfo]$PSBoundParameters)
    }
}
class SkuSetting
{
    [string] $size
    [SkuCost[]] $costs
    [SkuSettingCapacity] $capacity
    [string] $kind
    [string[]] $requiredQuotaIds
    [string] $family
    [SkuCapability[]] $capabilities
    [string[]] $locations
    [SkuLocationInfo[]] $locationInfo
    [string] $name
    [string[]] $requiredFeatures
    [string] $tier
}
function New-AzureNativeTypeProviderhubSkuSetting
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $size,
        [parameter(mandatory=$False,HelpMessage=')')]
        $costs,
        [parameter(mandatory=$False,HelpMessage=')')]
        [SkuSettingCapacity]
        $capacity,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredQuotaIds,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $family,
        [parameter(mandatory=$False,HelpMessage=')')]
        $capabilities,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $locations,
        [parameter(mandatory=$False,HelpMessage=')')]
        $locationInfo,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredFeatures,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $tier
    )

    process
    {
        return $([SkuSetting]$PSBoundParameters)
    }
}
class SkuResourceProperties
{
    [SkuSetting[]] $skuSettings
    [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
    [string] $provisioningState
}
function New-AzureNativeTypeProviderhubSkuResourceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $skuSettings,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
        $provisioningState
    )

    process
    {
        return $([SkuResourceProperties]$PSBoundParameters)
    }
}
function New-AzureNativeProviderhubSkus
{
    [Alias('azure_native_providerhub_skus')]
    param (
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage=')')]
        [SkuResourceProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [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:providerhub:Skus")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class NotificationEndpoint
{
    [string[]] $locations
    [string] $notificationDestination
}
function New-AzureNativeTypeProviderhubNotificationEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $locations,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $notificationDestination
    )

    process
    {
        return $([NotificationEndpoint]$PSBoundParameters)
    }
}
class NotificationRegistrationProperties
{
    [ArgumentCompletions('NotSpecified', 'RegisteredSubscriptions')]
    [string] $messageScope
    [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
    [string] $provisioningState
    [NotificationEndpoint[]] $notificationEndpoints
    [string[]] $includedEvents
    [ArgumentCompletions('NotSpecified', 'EventHub', 'WebHook')]
    [string] $notificationMode
}
function New-AzureNativeTypeProviderhubNotificationRegistrationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'RegisteredSubscriptions')]
        $messageScope,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage=')')]
        $notificationEndpoints,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $includedEvents,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'EventHub', 'WebHook')]
        $notificationMode
    )

    process
    {
        return $([NotificationRegistrationProperties]$PSBoundParameters)
    }
}
function New-AzureNativeProviderhubNotificationRegistration
{
    [Alias('azure_native_providerhub_notificationregistration')]
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [NotificationRegistrationProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The notification registration.)')]
        [string]
        $notificationRegistrationName,
        [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:providerhub:NotificationRegistration")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ResourceProviderManifestPropertiesTemplateDeploymentOptions
{
    [string[]] $preflightOptions
    [bool] $preflightSupported
}
function New-AzureNativeTypeProviderhubResourceProviderManifestPropertiesTemplateDeploymentOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $preflightOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $preflightSupported
    )

    process
    {
        return $([ResourceProviderManifestPropertiesTemplateDeploymentOptions]$PSBoundParameters)
    }
}
class ResourceProviderManifestPropertiesFeaturesRule
{
    [ArgumentCompletions('Any', 'All')]
    [string] $requiredFeaturesPolicy
}
function New-AzureNativeTypeProviderhubResourceProviderManifestPropertiesFeaturesRule
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('Any', 'All')]
        $requiredFeaturesPolicy
    )

    process
    {
        return $([ResourceProviderManifestPropertiesFeaturesRule]$PSBoundParameters)
    }
}
class ResourceProviderManifestPropertiesProviderAuthentication
{
    [string[]] $allowedAudiences
}
function New-AzureNativeTypeProviderhubResourceProviderManifestPropertiesProviderAuthentication
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $allowedAudiences
    )

    process
    {
        return $([ResourceProviderManifestPropertiesProviderAuthentication]$PSBoundParameters)
    }
}
class ResourceProviderAuthorization
{
    [string] $roleDefinitionId
    [string] $applicationId
    [string] $managedByRoleDefinitionId
}
function New-AzureNativeTypeProviderhubResourceProviderAuthorization
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $roleDefinitionId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $applicationId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $managedByRoleDefinitionId
    )

    process
    {
        return $([ResourceProviderAuthorization]$PSBoundParameters)
    }
}
class ServiceTreeInfo
{
    [string] $componentId
    [string] $serviceId
}
function New-AzureNativeTypeProviderhubServiceTreeInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $componentId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $serviceId
    )

    process
    {
        return $([ServiceTreeInfo]$PSBoundParameters)
    }
}
class ResourceProviderManifestPropertiesManagement
{
    [ArgumentCompletions('NotSpecified', 'AcisReadAllowed', 'AcisActionAllowed')]
    [string] $resourceAccessPolicy
    [ServiceTreeInfo[]] $serviceTreeInfos
    [string] $incidentRoutingTeam
    [string[]] $manifestOwners
    [string] $incidentContactEmail
    [object[]] $resourceAccessRoles
    [string[]] $schemaOwners
    [string] $incidentRoutingService
}
function New-AzureNativeTypeProviderhubResourceProviderManifestPropertiesManagement
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'AcisReadAllowed', 'AcisActionAllowed')]
        $resourceAccessPolicy,
        [parameter(mandatory=$False,HelpMessage=')')]
        $serviceTreeInfos,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $incidentRoutingTeam,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $manifestOwners,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $incidentContactEmail,
        [parameter(mandatory=$False,HelpMessage=')')]
        $resourceAccessRoles,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $schemaOwners,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $incidentRoutingService
    )

    process
    {
        return $([ResourceProviderManifestPropertiesManagement]$PSBoundParameters)
    }
}
class ProviderHubMetadataProviderAuthentication
{
    [string[]] $allowedAudiences
}
function New-AzureNativeTypeProviderhubProviderHubMetadataProviderAuthentication
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $allowedAudiences
    )

    process
    {
        return $([ProviderHubMetadataProviderAuthentication]$PSBoundParameters)
    }
}
class LightHouseAuthorization
{
    [string] $roleDefinitionId
    [string] $principalId
}
function New-AzureNativeTypeProviderhubLightHouseAuthorization
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $roleDefinitionId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $principalId
    )

    process
    {
        return $([LightHouseAuthorization]$PSBoundParameters)
    }
}
class ProviderHubMetadataThirdPartyProviderAuthorization
{
    [string] $managedByTenantId
    [LightHouseAuthorization[]] $authorizations
}
function New-AzureNativeTypeProviderhubProviderHubMetadataThirdPartyProviderAuthorization
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $managedByTenantId,
        [parameter(mandatory=$False,HelpMessage=')')]
        $authorizations
    )

    process
    {
        return $([ProviderHubMetadataThirdPartyProviderAuthorization]$PSBoundParameters)
    }
}
class ProviderRegistrationPropertiesProviderHubMetadata
{
    [ResourceProviderAuthorization[]] $providerAuthorizations
    [ProviderHubMetadataProviderAuthentication] $providerAuthentication
    [ProviderHubMetadataThirdPartyProviderAuthorization] $thirdPartyProviderAuthorization
}
function New-AzureNativeTypeProviderhubProviderRegistrationPropertiesProviderHubMetadata
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $providerAuthorizations,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ProviderHubMetadataProviderAuthentication]
        $providerAuthentication,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ProviderHubMetadataThirdPartyProviderAuthorization]
        $thirdPartyProviderAuthorization
    )

    process
    {
        return $([ProviderRegistrationPropertiesProviderHubMetadata]$PSBoundParameters)
    }
}
class ResourceProviderManifestPropertiesRequestHeaderOptions
{
    [ArgumentCompletions('NotSpecified', 'SignedUserToken', 'ClientGroupMembership', 'SignedAuxiliaryTokens', 'UnboundedClientGroupMembership')]
    [string] $optInHeaders
}
function New-AzureNativeTypeProviderhubResourceProviderManifestPropertiesRequestHeaderOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'SignedUserToken', 'ClientGroupMembership', 'SignedAuxiliaryTokens', 'UnboundedClientGroupMembership')]
        $optInHeaders
    )

    process
    {
        return $([ResourceProviderManifestPropertiesRequestHeaderOptions]$PSBoundParameters)
    }
}
class SubscriptionStateOverrideAction
{
    [ArgumentCompletions('Registered', 'Unregistered', 'Warned', 'Suspended', 'Deleted', 'WarnedToRegistered', 'WarnedToSuspended', 'WarnedToDeleted', 'WarnedToUnregistered', 'SuspendedToRegistered', 'SuspendedToWarned', 'SuspendedToDeleted', 'SuspendedToUnregistered')]
    [string] $state
    [ArgumentCompletions('NotDefined', 'DeleteAllResources', 'SoftDeleteAllResources', 'NoOp', 'BillingCancellation', 'UndoSoftDelete')]
    [string] $action
}
function New-AzureNativeTypeProviderhubSubscriptionStateOverrideAction
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('Registered', 'Unregistered', 'Warned', 'Suspended', 'Deleted', 'WarnedToRegistered', 'WarnedToSuspended', 'WarnedToDeleted', 'WarnedToUnregistered', 'SuspendedToRegistered', 'SuspendedToWarned', 'SuspendedToDeleted', 'SuspendedToUnregistered')]
        $state,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotDefined', 'DeleteAllResources', 'SoftDeleteAllResources', 'NoOp', 'BillingCancellation', 'UndoSoftDelete')]
        $action
    )

    process
    {
        return $([SubscriptionStateOverrideAction]$PSBoundParameters)
    }
}
class ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
{
    [string] $softDeleteTTL
    [SubscriptionStateOverrideAction[]] $subscriptionStateOverrideActions
}
function New-AzureNativeTypeProviderhubProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $softDeleteTTL,
        [parameter(mandatory=$False,HelpMessage=')')]
        $subscriptionStateOverrideActions
    )

    process
    {
        return $([ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications]$PSBoundParameters)
    }
}
class ResourceProviderCapabilities
{
    [string] $quotaId
    [string[]] $requiredFeatures
    [ArgumentCompletions('NotSpecified', 'Allow', 'Disallow')]
    [string] $effect
}
function New-AzureNativeTypeProviderhubResourceProviderCapabilities
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $quotaId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredFeatures,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Allow', 'Disallow')]
        $effect
    )

    process
    {
        return $([ResourceProviderCapabilities]$PSBoundParameters)
    }
}
class ProviderRegistrationProperties
{
    [ResourceProviderManifestPropertiesTemplateDeploymentOptions] $templateDeploymentOptions
    [ResourceProviderManifestPropertiesFeaturesRule] $featuresRule
    [ResourceProviderManifestPropertiesProviderAuthentication] $providerAuthentication
    [object] $metadata
    [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
    [string] $provisioningState
    [ArgumentCompletions('NotSpecified', 'Internal', 'External', 'Hidden', 'RegistrationFree', 'LegacyRegistrationRequired', 'TenantOnly', 'AuthorizationFree')]
    [string] $providerType
    [string] $namespace
    [ResourceProviderAuthorization[]] $providerAuthorizations
    [ResourceProviderManifestPropertiesManagement] $management
    [string[]] $requiredFeatures
    [ProviderRegistrationPropertiesProviderHubMetadata] $providerHubMetadata
    [ResourceProviderManifestPropertiesRequestHeaderOptions] $requestHeaderOptions
    [ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications] $subscriptionLifecycleNotificationSpecifications
    [ResourceProviderCapabilities[]] $capabilities
    [string] $providerVersion
}
function New-AzureNativeTypeProviderhubProviderRegistrationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceProviderManifestPropertiesTemplateDeploymentOptions]
        $templateDeploymentOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceProviderManifestPropertiesFeaturesRule]
        $featuresRule,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceProviderManifestPropertiesProviderAuthentication]
        $providerAuthentication,
        [parameter(mandatory=$False,HelpMessage=')')]
        $metadata,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Internal', 'External', 'Hidden', 'RegistrationFree', 'LegacyRegistrationRequired', 'TenantOnly', 'AuthorizationFree')]
        $providerType,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $namespace,
        [parameter(mandatory=$False,HelpMessage=')')]
        $providerAuthorizations,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceProviderManifestPropertiesManagement]
        $management,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredFeatures,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ProviderRegistrationPropertiesProviderHubMetadata]
        $providerHubMetadata,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceProviderManifestPropertiesRequestHeaderOptions]
        $requestHeaderOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications]
        $subscriptionLifecycleNotificationSpecifications,
        [parameter(mandatory=$False,HelpMessage=')')]
        $capabilities,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $providerVersion
    )

    process
    {
        return $([ProviderRegistrationProperties]$PSBoundParameters)
    }
}
function New-AzureNativeProviderhubProviderRegistration
{
    [Alias('azure_native_providerhub_providerregistration')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ProviderRegistrationProperties]
        $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:providerhub:ProviderRegistration")

        $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
        }

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeProviderhubSkusNestedResourceTypeFirst
{
    [Alias('azure_native_providerhub_skusnestedresourcetypefirst')]
    param (
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage=')')]
        [SkuResourceProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The first child resource type.)')]
        [string]
        $nestedResourceTypeFirst,
        [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:providerhub:SkusNestedResourceTypeFirst")

        $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["nestedResourceTypeFirst"] = $nestedResourceTypeFirst
        $resource.properties["providerNamespace"] = $providerNamespace
        $resource.properties["resourceType"] = $resourceType

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class LoggingRuleHiddenPropertyPaths
{
    [string[]] $hiddenPathsOnResponse
    [string[]] $hiddenPathsOnRequest
}
function New-AzureNativeTypeProviderhubLoggingRuleHiddenPropertyPaths
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $hiddenPathsOnResponse,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $hiddenPathsOnRequest
    )

    process
    {
        return $([LoggingRuleHiddenPropertyPaths]$PSBoundParameters)
    }
}
class LoggingRule
{
    [LoggingRuleHiddenPropertyPaths] $hiddenPropertyPaths
    [ArgumentCompletions('None', 'Request', 'Response')]
    [string] $direction
    [ArgumentCompletions('None', 'Body')]
    [string] $detailLevel
    [string] $action
}
function New-AzureNativeTypeProviderhubLoggingRule
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [LoggingRuleHiddenPropertyPaths]
        $hiddenPropertyPaths,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('None', 'Request', 'Response')]
        $direction,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('None', 'Body')]
        $detailLevel,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $action
    )

    process
    {
        return $([LoggingRule]$PSBoundParameters)
    }
}
class ThrottlingMetric
{
    [string] $interval
    [ArgumentCompletions('NotSpecified', 'NumberOfRequests', 'NumberOfResources')]
    [string] $type
    [int] $limit
}
function New-AzureNativeTypeProviderhubThrottlingMetric
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $interval,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'NumberOfRequests', 'NumberOfResources')]
        $type,
        [parameter(mandatory=$False,HelpMessage=')')]
        [int]
        $limit
    )

    process
    {
        return $([ThrottlingMetric]$PSBoundParameters)
    }
}
class ThrottlingRule
{
    [string[]] $requiredFeatures
    [ThrottlingMetric[]] $metrics
    [string] $action
}
function New-AzureNativeTypeProviderhubThrottlingRule
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredFeatures,
        [parameter(mandatory=$False,HelpMessage=')')]
        $metrics,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $action
    )

    process
    {
        return $([ThrottlingRule]$PSBoundParameters)
    }
}
class AuthorizationActionMapping
{
    [string] $original
    [string] $desired
}
function New-AzureNativeTypeProviderhubAuthorizationActionMapping
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $original,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $desired
    )

    process
    {
        return $([AuthorizationActionMapping]$PSBoundParameters)
    }
}
class ResourceTypeExtension
{
    [string[]] $extensionCategories
    [string] $endpointUri
    [string] $timeout
}
function New-AzureNativeTypeProviderhubResourceTypeExtension
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $extensionCategories,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $endpointUri,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $timeout
    )

    process
    {
        return $([ResourceTypeExtension]$PSBoundParameters)
    }
}
class ResourceTypeEndpointFeaturesRule
{
    [ArgumentCompletions('Any', 'All')]
    [string] $requiredFeaturesPolicy
}
function New-AzureNativeTypeProviderhubResourceTypeEndpointFeaturesRule
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('Any', 'All')]
        $requiredFeaturesPolicy
    )

    process
    {
        return $([ResourceTypeEndpointFeaturesRule]$PSBoundParameters)
    }
}
class ResourceTypeEndpoint
{
    [string[]] $locations
    [bool] $enabled
    [string] $timeout
    [string[]] $requiredFeatures
    [string[]] $apiVersions
    [ResourceTypeExtension[]] $extensions
    [ResourceTypeEndpointFeaturesRule] $featuresRule
}
function New-AzureNativeTypeProviderhubResourceTypeEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $locations,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $timeout,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredFeatures,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $apiVersions,
        [parameter(mandatory=$False,HelpMessage=')')]
        $extensions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeEndpointFeaturesRule]
        $featuresRule
    )

    process
    {
        return $([ResourceTypeEndpoint]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesFeaturesRule
{
    [ArgumentCompletions('Any', 'All')]
    [string] $requiredFeaturesPolicy
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesFeaturesRule
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('Any', 'All')]
        $requiredFeaturesPolicy
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesFeaturesRule]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesIdentityManagement
{
    [string] $applicationId
    [ArgumentCompletions('NotSpecified', 'SystemAssigned', 'UserAssigned', 'Actor', 'DelegatedResourceIdentity')]
    [string] $type
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesIdentityManagement
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $applicationId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'SystemAssigned', 'UserAssigned', 'Actor', 'DelegatedResourceIdentity')]
        $type
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesIdentityManagement]$PSBoundParameters)
    }
}
class SwaggerSpecification
{
    [string] $swaggerSpecFolderUri
    [string[]] $apiVersions
}
function New-AzureNativeTypeProviderhubSwaggerSpecification
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $swaggerSpecFolderUri,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $apiVersions
    )

    process
    {
        return $([SwaggerSpecification]$PSBoundParameters)
    }
}
class LinkedAccessCheck
{
    [string] $linkedActionVerb
    [string] $linkedProperty
    [string] $linkedType
    [string] $linkedAction
    [string] $actionName
}
function New-AzureNativeTypeProviderhubLinkedAccessCheck
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $linkedActionVerb,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $linkedProperty,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $linkedType,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $linkedAction,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $actionName
    )

    process
    {
        return $([LinkedAccessCheck]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesTemplateDeploymentOptions
{
    [string[]] $preflightOptions
    [bool] $preflightSupported
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesTemplateDeploymentOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $preflightOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $preflightSupported
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesTemplateDeploymentOptions]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
{
    [string] $softDeleteTTL
    [SubscriptionStateOverrideAction[]] $subscriptionStateOverrideActions
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $softDeleteTTL,
        [parameter(mandatory=$False,HelpMessage=')')]
        $subscriptionStateOverrideActions
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesRequestHeaderOptions
{
    [ArgumentCompletions('NotSpecified', 'SignedUserToken', 'ClientGroupMembership', 'SignedAuxiliaryTokens', 'UnboundedClientGroupMembership')]
    [string] $optInHeaders
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesRequestHeaderOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'SignedUserToken', 'ClientGroupMembership', 'SignedAuxiliaryTokens', 'UnboundedClientGroupMembership')]
        $optInHeaders
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesRequestHeaderOptions]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesResourceMovePolicy
{
    [bool] $crossSubscriptionMoveEnabled
    [bool] $crossResourceGroupMoveEnabled
    [bool] $validationRequired
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesResourceMovePolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $crossSubscriptionMoveEnabled,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $crossResourceGroupMoveEnabled,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $validationRequired
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesResourceMovePolicy]$PSBoundParameters)
    }
}
class ResourceTypeExtensionOptionsResourceCreationBegin
{
    [string[]] $request
    [string[]] $response
}
function New-AzureNativeTypeProviderhubResourceTypeExtensionOptionsResourceCreationBegin
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $request,
        [parameter(mandatory=$False,HelpMessage=')')]
        $response
    )

    process
    {
        return $([ResourceTypeExtensionOptionsResourceCreationBegin]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesExtensionOptions
{
    [ResourceTypeExtensionOptionsResourceCreationBegin] $resourceCreationBegin
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesExtensionOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeExtensionOptionsResourceCreationBegin]
        $resourceCreationBegin
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesExtensionOptions]$PSBoundParameters)
    }
}
class ExtendedLocationOptions
{
    [string] $type
    [string] $supportedPolicy
}
function New-AzureNativeTypeProviderhubExtendedLocationOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $supportedPolicy
    )

    process
    {
        return $([ExtendedLocationOptions]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationPropertiesCheckNameAvailabilitySpecifications
{
    [bool] $enableDefaultValidation
    [string[]] $resourceTypesWithCustomValidation
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationPropertiesCheckNameAvailabilitySpecifications
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $enableDefaultValidation,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $resourceTypesWithCustomValidation
    )

    process
    {
        return $([ResourceTypeRegistrationPropertiesCheckNameAvailabilitySpecifications]$PSBoundParameters)
    }
}
class SubscriptionStateRule
{
    [string[]] $allowedActions
    [ArgumentCompletions('NotDefined', 'Enabled', 'Warned', 'PastDue', 'Disabled', 'Deleted')]
    [string] $state
}
function New-AzureNativeTypeProviderhubSubscriptionStateRule
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $allowedActions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotDefined', 'Enabled', 'Warned', 'PastDue', 'Disabled', 'Deleted')]
        $state
    )

    process
    {
        return $([SubscriptionStateRule]$PSBoundParameters)
    }
}
class ResourceTypeRegistrationProperties
{
    [ServiceTreeInfo[]] $serviceTreeInfos
    [ArgumentCompletions('NotSpecified', 'AddOn', 'Bypass', 'Store')]
    [string] $marketplaceType
    [LoggingRule[]] $loggingRules
    [string[]] $requiredFeatures
    [string[]] $disallowedActionVerbs
    [ThrottlingRule[]] $throttlingRules
    [ArgumentCompletions('NotSpecified', 'Global', 'Regional')]
    [string] $regionality
    [AuthorizationActionMapping[]] $authorizationActionMappings
    [ResourceTypeEndpoint[]] $endpoints
    [string] $defaultApiVersion
    [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
    [string] $provisioningState
    [ResourceTypeRegistrationPropertiesFeaturesRule] $featuresRule
    [bool] $isPureProxy
    [ResourceTypeRegistrationPropertiesIdentityManagement] $identityManagement
    [SwaggerSpecification[]] $swaggerSpecifications
    [LinkedAccessCheck[]] $linkedAccessChecks
    [ResourceTypeRegistrationPropertiesTemplateDeploymentOptions] $templateDeploymentOptions
    [bool] $enableThirdPartyS2S
    [bool] $enableAsyncOperation
    [ResourceTypeRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications] $subscriptionLifecycleNotificationSpecifications
    [ResourceTypeRegistrationPropertiesRequestHeaderOptions] $requestHeaderOptions
    [ResourceTypeRegistrationPropertiesResourceMovePolicy] $resourceMovePolicy
    [ResourceTypeRegistrationPropertiesExtensionOptions] $extensionOptions
    [ExtendedLocationOptions[]] $extendedLocations
    [string[]] $allowedUnauthorizedActions
    [ResourceTypeRegistrationPropertiesCheckNameAvailabilitySpecifications] $checkNameAvailabilitySpecifications
    [SubscriptionStateRule[]] $subscriptionStateRules
    [ArgumentCompletions('NotSpecified', 'CascadeDeleteAll', 'CascadeDeleteProxyOnlyChildren')]
    [string] $resourceDeletionPolicy
    [ArgumentCompletions('Default', 'ProxyOnly', 'HostBased', 'Extension', 'Tenant', 'Fanout', 'LocationBased', 'Failover', 'CascadeExtension')]
    [string] $routingType
}
function New-AzureNativeTypeProviderhubResourceTypeRegistrationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $serviceTreeInfos,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'AddOn', 'Bypass', 'Store')]
        $marketplaceType,
        [parameter(mandatory=$False,HelpMessage=')')]
        $loggingRules,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $requiredFeatures,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $disallowedActionVerbs,
        [parameter(mandatory=$False,HelpMessage=')')]
        $throttlingRules,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Global', 'Regional')]
        $regionality,
        [parameter(mandatory=$False,HelpMessage=')')]
        $authorizationActionMappings,
        [parameter(mandatory=$False,HelpMessage=')')]
        $endpoints,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $defaultApiVersion,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesFeaturesRule]
        $featuresRule,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $isPureProxy,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesIdentityManagement]
        $identityManagement,
        [parameter(mandatory=$False,HelpMessage=')')]
        $swaggerSpecifications,
        [parameter(mandatory=$False,HelpMessage=')')]
        $linkedAccessChecks,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesTemplateDeploymentOptions]
        $templateDeploymentOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $enableThirdPartyS2S,
        [parameter(mandatory=$False,HelpMessage=')')]
        [bool]
        $enableAsyncOperation,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications]
        $subscriptionLifecycleNotificationSpecifications,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesRequestHeaderOptions]
        $requestHeaderOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesResourceMovePolicy]
        $resourceMovePolicy,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesExtensionOptions]
        $extensionOptions,
        [parameter(mandatory=$False,HelpMessage=')')]
        $extendedLocations,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $allowedUnauthorizedActions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationPropertiesCheckNameAvailabilitySpecifications]
        $checkNameAvailabilitySpecifications,
        [parameter(mandatory=$False,HelpMessage=')')]
        $subscriptionStateRules,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'CascadeDeleteAll', 'CascadeDeleteProxyOnlyChildren')]
        $resourceDeletionPolicy,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('Default', 'ProxyOnly', 'HostBased', 'Extension', 'Tenant', 'Fanout', 'LocationBased', 'Failover', 'CascadeExtension')]
        $routingType
    )

    process
    {
        return $([ResourceTypeRegistrationProperties]$PSBoundParameters)
    }
}
function New-AzureNativeProviderhubResourceTypeRegistration
{
    [Alias('azure_native_providerhub_resourcetyperegistration')]
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [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:providerhub:ResourceTypeRegistration")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeProviderhubSkusNestedResourceTypeThird
{
    [Alias('azure_native_providerhub_skusnestedresourcetypethird')]
    param (
        [parameter(mandatory=$False,HelpMessage='The first child resource type.)')]
        [string]
        $nestedResourceTypeFirst,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='The third child resource type.)')]
        [string]
        $nestedResourceTypeThird,
        [parameter(mandatory=$False,HelpMessage=')')]
        [SkuResourceProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The second child resource type.)')]
        [string]
        $nestedResourceTypeSecond,
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $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:providerhub:SkusNestedResourceTypeThird")

        $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["nestedResourceTypeFirst"] = $nestedResourceTypeFirst
        $resource.properties["nestedResourceTypeSecond"] = $nestedResourceTypeSecond
        $resource.properties["nestedResourceTypeThird"] = $nestedResourceTypeThird
        $resource.properties["providerNamespace"] = $providerNamespace
        $resource.properties["resourceType"] = $resourceType

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeProviderhubSkusNestedResourceTypeSecond
{
    [Alias('azure_native_providerhub_skusnestedresourcetypesecond')]
    param (
        [parameter(mandatory=$False,HelpMessage='The first child resource type.)')]
        [string]
        $nestedResourceTypeFirst,
        [parameter(mandatory=$False,HelpMessage='The resource type.)')]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage=')')]
        [SkuResourceProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [parameter(mandatory=$False,HelpMessage='The second child resource type.)')]
        [string]
        $nestedResourceTypeSecond,
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [string]
        $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:providerhub:SkusNestedResourceTypeSecond")

        $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["nestedResourceTypeFirst"] = $nestedResourceTypeFirst
        $resource.properties["nestedResourceTypeSecond"] = $nestedResourceTypeSecond
        $resource.properties["providerNamespace"] = $providerNamespace
        $resource.properties["resourceType"] = $resourceType

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class DefaultRolloutSpecificationCanary
{
    [string[]] $skipRegions
    [string[]] $regions
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationCanary
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $skipRegions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $regions
    )

    process
    {
        return $([DefaultRolloutSpecificationCanary]$PSBoundParameters)
    }
}
class DefaultRolloutSpecificationRestOfTheWorldGroupOne
{
    [string[]] $regions
    [string] $waitDuration
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationRestOfTheWorldGroupOne
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $waitDuration
    )

    process
    {
        return $([DefaultRolloutSpecificationRestOfTheWorldGroupOne]$PSBoundParameters)
    }
}
class DefaultRolloutSpecificationRestOfTheWorldGroupTwo
{
    [string[]] $regions
    [string] $waitDuration
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationRestOfTheWorldGroupTwo
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $waitDuration
    )

    process
    {
        return $([DefaultRolloutSpecificationRestOfTheWorldGroupTwo]$PSBoundParameters)
    }
}
class ResourceTypeRegistration
{
    [ResourceTypeRegistrationProperties] $properties
}
function New-AzureNativeTypeProviderhubResourceTypeRegistration
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [ResourceTypeRegistrationProperties]
        $properties
    )

    process
    {
        return $([ResourceTypeRegistration]$PSBoundParameters)
    }
}
class DefaultRolloutSpecificationHighTraffic
{
    [string[]] $regions
    [string] $waitDuration
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationHighTraffic
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $waitDuration
    )

    process
    {
        return $([DefaultRolloutSpecificationHighTraffic]$PSBoundParameters)
    }
}
class DefaultRolloutSpecificationMediumTraffic
{
    [string[]] $regions
    [string] $waitDuration
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationMediumTraffic
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $waitDuration
    )

    process
    {
        return $([DefaultRolloutSpecificationMediumTraffic]$PSBoundParameters)
    }
}
class DefaultRolloutSpecificationLowTraffic
{
    [string[]] $regions
    [string] $waitDuration
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationLowTraffic
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $waitDuration
    )

    process
    {
        return $([DefaultRolloutSpecificationLowTraffic]$PSBoundParameters)
    }
}
class DefaultRolloutSpecificationProviderRegistration
{
    [ProviderRegistrationProperties] $properties
}
function New-AzureNativeTypeProviderhubDefaultRolloutSpecificationProviderRegistration
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [ProviderRegistrationProperties]
        $properties
    )

    process
    {
        return $([DefaultRolloutSpecificationProviderRegistration]$PSBoundParameters)
    }
}
class DefaultRolloutPropertiesSpecification
{
    [DefaultRolloutSpecificationCanary] $canary
    [DefaultRolloutSpecificationRestOfTheWorldGroupOne] $restOfTheWorldGroupOne
    [DefaultRolloutSpecificationRestOfTheWorldGroupTwo] $restOfTheWorldGroupTwo
    [ResourceTypeRegistration[]] $resourceTypeRegistrations
    [DefaultRolloutSpecificationHighTraffic] $highTraffic
    [DefaultRolloutSpecificationMediumTraffic] $mediumTraffic
    [DefaultRolloutSpecificationLowTraffic] $lowTraffic
    [DefaultRolloutSpecificationProviderRegistration] $providerRegistration
}
function New-AzureNativeTypeProviderhubDefaultRolloutPropertiesSpecification
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationCanary]
        $canary,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationRestOfTheWorldGroupOne]
        $restOfTheWorldGroupOne,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationRestOfTheWorldGroupTwo]
        $restOfTheWorldGroupTwo,
        [parameter(mandatory=$False,HelpMessage=')')]
        $resourceTypeRegistrations,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationHighTraffic]
        $highTraffic,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationMediumTraffic]
        $mediumTraffic,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationLowTraffic]
        $lowTraffic,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutSpecificationProviderRegistration]
        $providerRegistration
    )

    process
    {
        return $([DefaultRolloutPropertiesSpecification]$PSBoundParameters)
    }
}
class DefaultRolloutPropertiesStatus
{
    [ArgumentCompletions('NotSpecified', 'Canary', 'LowTraffic', 'MediumTraffic', 'HighTraffic', 'None', 'RestOfTheWorldGroupOne', 'RestOfTheWorldGroupTwo')]
    [string] $nextTrafficRegion
    [object] $failedOrSkippedRegions
    [string[]] $completedRegions
    [string] $nextTrafficRegionScheduledTime
    [ArgumentCompletions('NotApplicable', 'ConditionalUpdate', 'ForcedUpdate', 'Failed')]
    [string] $subscriptionReregistrationResult
}
class TypedErrorInfo
{
    [string] $type
}
function New-AzureNativeTypeProviderhubTypedErrorInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $type
    )

    process
    {
        return $([TypedErrorInfo]$PSBoundParameters)
    }
}
class ExtendedErrorInfo
{
    [TypedErrorInfo[]] $additionalInfo
    [string] $code
    [string] $target
    [string] $message
    [ExtendedErrorInfo[]] $details
}
function New-AzureNativeTypeProviderhubExtendedErrorInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        $additionalInfo,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $code,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $target,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $message,
        [parameter(mandatory=$False,HelpMessage=')')]
        $details
    )

    process
    {
        return $([ExtendedErrorInfo]$PSBoundParameters)
    }
}
function New-AzureNativeTypeProviderhubDefaultRolloutPropertiesStatus
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Canary', 'LowTraffic', 'MediumTraffic', 'HighTraffic', 'None', 'RestOfTheWorldGroupOne', 'RestOfTheWorldGroupTwo')]
        $nextTrafficRegion,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ExtendedErrorInfo]
        $failedOrSkippedRegions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string[]]
        $completedRegions,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $nextTrafficRegionScheduledTime,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotApplicable', 'ConditionalUpdate', 'ForcedUpdate', 'Failed')]
        $subscriptionReregistrationResult
    )

    process
    {
        return $([DefaultRolloutPropertiesStatus]$PSBoundParameters)
    }
}
class DefaultRolloutProperties
{
    [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
    [string] $provisioningState
    [DefaultRolloutPropertiesSpecification] $specification
    [DefaultRolloutPropertiesStatus] $status
}
function New-AzureNativeTypeProviderhubDefaultRolloutProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('NotSpecified', 'Accepted', 'Running', 'Creating', 'Created', 'Deleting', 'Deleted', 'Canceled', 'Failed', 'Succeeded', 'MovingResources', 'TransientFailure', 'RolloutInProgress')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutPropertiesSpecification]
        $specification,
        [parameter(mandatory=$False,HelpMessage=')')]
        [DefaultRolloutPropertiesStatus]
        $status
    )

    process
    {
        return $([DefaultRolloutProperties]$PSBoundParameters)
    }
}
function New-AzureNativeProviderhubDefaultRollout
{
    [Alias('azure_native_providerhub_defaultrollout')]
    param (
        [parameter(mandatory=$False,HelpMessage='The rollout name.)')]
        [string]
        $rolloutName,
        [parameter(mandatory=$False,HelpMessage='Properties of the rollout.)')]
        [DefaultRolloutProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource provider hosted within ProviderHub.)')]
        [string]
        $providerNamespace,
        [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:providerhub:DefaultRollout")

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

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

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

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