pspulumiyaml.azurenative.blueprint.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionBlueprintGetArtifact
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName
    )

    process
    {
        $arguments = @{}
        $arguments["artifactName"] = $artifactName
        $arguments["blueprintName"] = $blueprintName
        $arguments["resourceScope"] = $resourceScope

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getArtifact -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionBlueprintGetBlueprint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName
    )

    process
    {
        $arguments = @{}
        $arguments["blueprintName"] = $blueprintName
        $arguments["resourceScope"] = $resourceScope

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getBlueprint -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionBlueprintGetTemplateArtifact
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName
    )

    process
    {
        $arguments = @{}
        $arguments["artifactName"] = $artifactName
        $arguments["blueprintName"] = $blueprintName
        $arguments["resourceScope"] = $resourceScope

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getTemplateArtifact -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionBlueprintGetAssignment
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint assignment.)')]
        [string]
        $assignmentName,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope
    )

    process
    {
        $arguments = @{}
        $arguments["assignmentName"] = $assignmentName
        $arguments["resourceScope"] = $resourceScope

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getAssignment -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionBlueprintGetPublishedBlueprint
{
    param (
        [parameter(mandatory=$False,HelpMessage='Version of the published blueprint definition.)')]
        [string]
        $versionId,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName
    )

    process
    {
        $arguments = @{}
        $arguments["blueprintName"] = $blueprintName
        $arguments["resourceScope"] = $resourceScope
        $arguments["versionId"] = $versionId

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getPublishedBlueprint -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionBlueprintGetRoleAssignmentArtifact
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName
    )

    process
    {
        $arguments = @{}
        $arguments["artifactName"] = $artifactName
        $arguments["blueprintName"] = $blueprintName
        $arguments["resourceScope"] = $resourceScope

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getRoleAssignmentArtifact -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionBlueprintGetPolicyAssignmentArtifact
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName
    )

    process
    {
        $arguments = @{}
        $arguments["artifactName"] = $artifactName
        $arguments["blueprintName"] = $blueprintName
        $arguments["resourceScope"] = $resourceScope

        $functionObject = Invoke-PulumiFunction -Name azure-native:blueprint:getPolicyAssignmentArtifact -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function New-AzureNativeBlueprintRoleAssignmentArtifact
{
    [Alias('azure_native_blueprint_roleassignmentartifact')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Specifies the kind of blueprint artifact.
Expected value is ''roleAssignment''.)'
)]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Multi-line explain this resource.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='One-liner string explain this resource.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='RoleAssignment will be scope to this resourceGroup. If empty, it scopes to the subscription.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName,
        [parameter(mandatory=$False,HelpMessage='Artifacts which need to be deployed before the specified artifact.)')]
        [string[]]
        $dependsOn,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Array of user or group identities in Azure Active Directory. The roleDefinition will apply to each identity.)')]
        $principalIds,
        [parameter(mandatory=$False,HelpMessage='Azure resource ID of the RoleDefinition.)')]
        [string]
        $roleDefinitionId,
        [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:blueprint:RoleAssignmentArtifact")

        $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["blueprintName"] = $blueprintName
        $resource.properties["kind"] = $kind
        $resource.properties["principalIds"] = $principalIds
        $resource.properties["resourceScope"] = $resourceScope
        $resource.properties["roleDefinitionId"] = $roleDefinitionId

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ParameterDefinition
{
    [string] $displayName
    [string] $description
    [ArgumentCompletions('string', 'array', 'bool', 'int', 'object', 'secureObject', 'secureString')]
    [string] $type
    [string] $strongType
    [object[]] $allowedValues
    [object] $defaultValue
}
function New-AzureNativeTypeBlueprintParameterDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='DisplayName of this parameter/resourceGroup.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Description of this parameter/resourceGroup.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Allowed data types for Resource Manager template parameters.)')]
        [string]
        [ArgumentCompletions('string', 'array', 'bool', 'int', 'object', 'secureObject', 'secureString')]
        $type,
        [parameter(mandatory=$False,HelpMessage='StrongType for UI to render rich experience during blueprint assignment. Supported strong types are resourceType, principalId and location.)')]
        [string]
        $strongType,
        [parameter(mandatory=$False,HelpMessage='Array of allowed values for this parameter.)')]
        $allowedValues,
        [parameter(mandatory=$False,HelpMessage='Default Value for this parameter.)')]
        $defaultValue
    )

    process
    {
        return $([ParameterDefinition]$PSBoundParameters)
    }
}
class ResourceGroupDefinition
{
    [string] $description
    [string] $location
    [string[]] $dependsOn
    [string] $strongType
    [string] $name
    [string] $displayName
    [object] $tags
}
function New-AzureNativeTypeBlueprintResourceGroupDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='Description of this parameter/resourceGroup.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Location of this resourceGroup. Leave empty if the resource group location will be specified during the blueprint assignment.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Artifacts which need to be deployed before this resource group.)')]
        [string[]]
        $dependsOn,
        [parameter(mandatory=$False,HelpMessage='StrongType for UI to render rich experience during blueprint assignment. Supported strong types are resourceType, principalId and location.)')]
        [string]
        $strongType,
        [parameter(mandatory=$False,HelpMessage='Name of this resourceGroup. Leave empty if the resource group name will be specified during the blueprint assignment.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='DisplayName of this parameter/resourceGroup.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Tags to be assigned to this resource group.)')]
        [hashtable]
        $tags
    )

    process
    {
        return $([ResourceGroupDefinition]$PSBoundParameters)
    }
}
function New-AzureNativeBlueprintBlueprint
{
    [Alias('azure_native_blueprint_blueprint')]
    param (
        [parameter(mandatory=$False,HelpMessage='Published versions of this blueprint definition.)')]
        $versions,
        [parameter(mandatory=$False,HelpMessage='One-liner string explain this resource.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Parameters required by this blueprint definition.)')]
        [ParameterDefinition]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='Resource group placeholders defined by this blueprint definition.)')]
        [ResourceGroupDefinition]
        $resourceGroups,
        [parameter(mandatory=$False,HelpMessage='Multi-line explain this resource.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName,
        [parameter(mandatory=$False,HelpMessage='The scope where this blueprint definition can be assigned.)')]
        [string]
        [ArgumentCompletions('subscription', 'managementGroup')]
        $targetScope,
        [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:blueprint:Blueprint")

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeBlueprintArtifact
{
    [Alias('azure_native_blueprint_artifact')]
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName,
        [parameter(mandatory=$False,HelpMessage='Specifies the kind of blueprint artifact.)')]
        [string]
        [ArgumentCompletions('template', 'roleAssignment', 'policyAssignment')]
        $kind,
        [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:blueprint:Artifact")

        $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["blueprintName"] = $blueprintName
        $resource.properties["kind"] = $kind
        $resource.properties["resourceScope"] = $resourceScope

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class KeyVaultReference
{
    [string] $id
}
function New-AzureNativeTypeBlueprintKeyVaultReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='Azure resource ID of the Key Vault.)')]
        [string]
        $id
    )

    process
    {
        return $([KeyVaultReference]$PSBoundParameters)
    }
}
class SecretValueReference
{
    [string] $secretVersion
    [KeyVaultReference] $keyVault
    [string] $secretName
}
function New-AzureNativeTypeBlueprintSecretValueReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='The version of the secret to use. If left blank, the latest version of the secret is used.)')]
        [string]
        $secretVersion,
        [parameter(mandatory=$False,HelpMessage='Specifies the reference to a given Azure Key Vault.)')]
        [KeyVaultReference]
        $keyVault,
        [parameter(mandatory=$False,HelpMessage='Name of the secret.)')]
        [string]
        $secretName
    )

    process
    {
        return $([SecretValueReference]$PSBoundParameters)
    }
}
class ParameterValue
{
    [object] $value
    [SecretValueReference] $reference
}
function New-AzureNativeTypeBlueprintParameterValue
{
    param (
        [parameter(mandatory=$False,HelpMessage='Parameter value. Any valid JSON value is allowed including objects, arrays, strings, numbers and booleans.)')]
        $value,
        [parameter(mandatory=$False,HelpMessage='Parameter value as reference type.)')]
        [SecretValueReference]
        $reference
    )

    process
    {
        return $([ParameterValue]$PSBoundParameters)
    }
}
function New-AzureNativeBlueprintTemplateArtifact
{
    [Alias('azure_native_blueprint_templateartifact')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Specifies the kind of blueprint artifact.
Expected value is ''template''.)'
)]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Resource Manager template blueprint artifact parameter values.)')]
        [ParameterValue]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='Multi-line explain this resource.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='One-liner string explain this resource.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='If applicable, the name of the resource group placeholder to which the Resource Manager template blueprint artifact will be deployed.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName,
        [parameter(mandatory=$False,HelpMessage='Artifacts which need to be deployed before the specified artifact.)')]
        [string[]]
        $dependsOn,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='The Resource Manager template blueprint artifact body.)')]
        $template,
        [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:blueprint:TemplateArtifact")

        $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["blueprintName"] = $blueprintName
        $resource.properties["kind"] = $kind
        $resource.properties["parameters"] = $parameters
        $resource.properties["resourceScope"] = $resourceScope
        $resource.properties["template"] = $template

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeBlueprintPolicyAssignmentArtifact
{
    [Alias('azure_native_blueprint_policyassignmentartifact')]
    param (
        [parameter(mandatory=$False,HelpMessage='Azure resource ID of the policy definition.)')]
        [string]
        $policyDefinitionId,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint artifact.)')]
        [string]
        $artifactName,
        [parameter(mandatory=$False,HelpMessage='Specifies the kind of blueprint artifact.
Expected value is ''policyAssignment''.)'
)]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Parameter values for the policy definition.)')]
        [ParameterValue]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='Multi-line explain this resource.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='One-liner string explain this resource.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Name of the resource group placeholder to which the policy will be assigned.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Name of the blueprint definition.)')]
        [string]
        $blueprintName,
        [parameter(mandatory=$False,HelpMessage='Artifacts which need to be deployed before the specified artifact.)')]
        [string[]]
        $dependsOn,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [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:blueprint:PolicyAssignmentArtifact")

        $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["blueprintName"] = $blueprintName
        $resource.properties["kind"] = $kind
        $resource.properties["parameters"] = $parameters
        $resource.properties["policyDefinitionId"] = $policyDefinitionId
        $resource.properties["resourceScope"] = $resourceScope

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeBlueprintPublishedBlueprint
{
    [Alias('azure_native_blueprint_publishedblueprint')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource group placeholders defined by this blueprint definition.)')]
        [ResourceGroupDefinition]
        $resourceGroups,
        [parameter(mandatory=$False,HelpMessage='Version-specific change notes.)')]
        [string]
        $changeNotes,
        [parameter(mandatory=$False,HelpMessage='Parameters required by this blueprint definition.)')]
        [ParameterDefinition]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='Multi-line explain this resource.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='One-liner string explain this resource.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Version of the published blueprint definition.)')]
        [string]
        $versionId,
        [parameter(mandatory=$False,HelpMessage='Name of the published blueprint definition.)')]
        [string]
        $blueprintName,
        [parameter(mandatory=$False,HelpMessage='The scope of the resource. Valid scopes are: management group (format: ''/providers/Microsoft.Management/managementGroups/{managementGroup}''), subscription (format: ''/subscriptions/{subscriptionId}'').)')]
        [string]
        $resourceScope,
        [parameter(mandatory=$False,HelpMessage='The scope where this blueprint definition can be assigned.)')]
        [string]
        [ArgumentCompletions('subscription', 'managementGroup')]
        $targetScope,
        [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:blueprint:PublishedBlueprint")

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ResourceGroupValue
{
    [string] $location
    [string] $name
}
function New-AzureNativeTypeBlueprintResourceGroupValue
{
    param (
        [parameter(mandatory=$False,HelpMessage='Location of the resource group.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Name of the resource group.)')]
        [string]
        $name
    )

    process
    {
        return $([ResourceGroupValue]$PSBoundParameters)
    }
}
class ManagedServiceIdentity
{
    [string] $principalId
    [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned')]
    [string] $type
    [string] $tenantId
    [object] $userAssignedIdentities
}
class UserAssignedIdentity
{
    [string] $clientId
    [string] $principalId
}
function New-AzureNativeTypeBlueprintUserAssignedIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Client App Id associated with this identity.)')]
        [string]
        $clientId,
        [parameter(mandatory=$False,HelpMessage='Azure Active Directory principal ID associated with this Identity.)')]
        [string]
        $principalId
    )

    process
    {
        return $([UserAssignedIdentity]$PSBoundParameters)
    }
}
function New-AzureNativeTypeBlueprintManagedServiceIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Azure Active Directory principal ID associated with this Identity.)')]
        [string]
        $principalId,
        [parameter(mandatory=$False,HelpMessage='Type of the managed identity.)')]
        [string]
        [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='ID of the Azure Active Directory.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='The list of user-assigned managed identities associated with the resource. Key is the Azure resource Id of the managed identity.)')]
        [UserAssignedIdentity]
        $userAssignedIdentities
    )

    process
    {
        return $([ManagedServiceIdentity]$PSBoundParameters)
    }
}
class AssignmentLockSettings
{
    [string[]] $excludedActions
    [ArgumentCompletions('None', 'AllResourcesReadOnly', 'AllResourcesDoNotDelete')]
    [string] $mode
    [string[]] $excludedPrincipals
}
function New-AzureNativeTypeBlueprintAssignmentLockSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of management operations that are excluded from blueprint locks. Up to 200 actions are permitted. If the lock mode is set to ''AllResourcesReadOnly'', then the following actions are automatically appended to ''excludedActions'': ''*/read'', ''Microsoft.Network/virtualNetworks/subnets/join/action'' and ''Microsoft.Authorization/locks/delete''. If the lock mode is set to ''AllResourcesDoNotDelete'', then the following actions are automatically appended to ''excludedActions'': ''Microsoft.Authorization/locks/delete''. Duplicate actions will get removed.)')]
        [string[]]
        $excludedActions,
        [parameter(mandatory=$False,HelpMessage='Lock mode.)')]
        [string]
        [ArgumentCompletions('None', 'AllResourcesReadOnly', 'AllResourcesDoNotDelete')]
        $mode,
        [parameter(mandatory=$False,HelpMessage='List of AAD principals excluded from blueprint locks. Up to 5 principals are permitted.)')]
        [string[]]
        $excludedPrincipals
    )

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

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

        $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["identity"] = $identity
        $resource.properties["parameters"] = $parameters
        $resource.properties["resourceGroups"] = $resourceGroups
        $resource.properties["resourceScope"] = $resourceScope

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

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

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

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

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

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

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

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