pspulumiyaml.azurenative.hdinsight.psm1

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hdinsight:getClusterGatewaySettings -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHdinsightGetCluster
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the cluster.)')]
        [string]
        $clusterName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hdinsight:getCluster -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHdinsightGetApplication
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The constant value for the application name.)')]
        [string]
        $applicationName,
        [parameter(mandatory=$False,HelpMessage='The name of the cluster.)')]
        [string]
        $clusterName
    )

    process
    {
        $arguments = @{}
        $arguments["applicationName"] = $applicationName
        $arguments["clusterName"] = $clusterName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:hdinsight:getApplication -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHdinsightGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the cluster.)')]
        [string]
        $clusterName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hdinsight:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class RuntimeScriptAction
{
    [string] $uri
    [string] $name
    [string] $parameters
    [string[]] $roles
}
function New-AzureNativeTypeHdinsightRuntimeScriptAction
{
    param (
        [parameter(mandatory=$False,HelpMessage='The URI to the script.)')]
        [string]
        $uri,
        [parameter(mandatory=$False,HelpMessage='The name of the script action.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The parameters for the script)')]
        [string]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='The list of roles where script will be executed.)')]
        [string[]]
        $roles
    )

    process
    {
        return $([RuntimeScriptAction]$PSBoundParameters)
    }
}
class Errors
{
    [string] $code
    [string] $message
}
function New-AzureNativeTypeHdinsightErrors
{
    param (
        [parameter(mandatory=$False,HelpMessage='The error code.)')]
        [string]
        $code,
        [parameter(mandatory=$False,HelpMessage='The error message.)')]
        [string]
        $message
    )

    process
    {
        return $([Errors]$PSBoundParameters)
    }
}
class ApplicationGetEndpoint
{
    [int] $destinationPort
    [string] $privateIPAddress
    [int] $publicPort
    [string] $location
}
function New-AzureNativeTypeHdinsightApplicationGetEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The destination port to connect to.)')]
        [int]
        $destinationPort,
        [parameter(mandatory=$False,HelpMessage='The private ip address of the endpoint.)')]
        [string]
        $privateIPAddress,
        [parameter(mandatory=$False,HelpMessage='The public port to connect to.)')]
        [int]
        $publicPort,
        [parameter(mandatory=$False,HelpMessage='The location of the endpoint.)')]
        [string]
        $location
    )

    process
    {
        return $([ApplicationGetEndpoint]$PSBoundParameters)
    }
}
class ApplicationGetHttpsEndpoint
{
    [int] $destinationPort
    [string] $privateIPAddress
    [string] $subDomainSuffix
    [string[]] $accessModes
    [bool] $disableGatewayAuth
}
function New-AzureNativeTypeHdinsightApplicationGetHttpsEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The destination port to connect to.)')]
        [int]
        $destinationPort,
        [parameter(mandatory=$False,HelpMessage='The private ip address of the endpoint.)')]
        [string]
        $privateIPAddress,
        [parameter(mandatory=$False,HelpMessage='The subdomain suffix of the application.)')]
        [string]
        $subDomainSuffix,
        [parameter(mandatory=$False,HelpMessage='The list of access modes for the application.)')]
        [string[]]
        $accessModes,
        [parameter(mandatory=$False,HelpMessage='The value indicates whether to disable GatewayAuth.)')]
        [bool]
        $disableGatewayAuth
    )

    process
    {
        return $([ApplicationGetHttpsEndpoint]$PSBoundParameters)
    }
}
class SshPublicKey
{
    [string] $certificateData
}
function New-AzureNativeTypeHdinsightSshPublicKey
{
    param (
        [parameter(mandatory=$False,HelpMessage='The certificate for SSH.)')]
        [string]
        $certificateData
    )

    process
    {
        return $([SshPublicKey]$PSBoundParameters)
    }
}
class SshProfile
{
    [SshPublicKey[]] $publicKeys
}
function New-AzureNativeTypeHdinsightSshProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of SSH public keys.)')]
        $publicKeys
    )

    process
    {
        return $([SshProfile]$PSBoundParameters)
    }
}
class LinuxOperatingSystemProfile
{
    [string] $username
    [string] $password
    [SshProfile] $sshProfile
}
function New-AzureNativeTypeHdinsightLinuxOperatingSystemProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The username.)')]
        [string]
        $username,
        [parameter(mandatory=$False,HelpMessage='The password.)')]
        [string]
        $password,
        [parameter(mandatory=$False,HelpMessage='The SSH profile.)')]
        [SshProfile]
        $sshProfile
    )

    process
    {
        return $([LinuxOperatingSystemProfile]$PSBoundParameters)
    }
}
class OsProfile
{
    [LinuxOperatingSystemProfile] $linuxOperatingSystemProfile
}
function New-AzureNativeTypeHdinsightOsProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Linux OS profile.)')]
        [LinuxOperatingSystemProfile]
        $linuxOperatingSystemProfile
    )

    process
    {
        return $([OsProfile]$PSBoundParameters)
    }
}
class VirtualNetworkProfile
{
    [string] $id
    [string] $subnet
}
function New-AzureNativeTypeHdinsightVirtualNetworkProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ID of the virtual network.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the subnet.)')]
        [string]
        $subnet
    )

    process
    {
        return $([VirtualNetworkProfile]$PSBoundParameters)
    }
}
class AutoscaleCapacity
{
    [int] $minInstanceCount
    [int] $maxInstanceCount
}
function New-AzureNativeTypeHdinsightAutoscaleCapacity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The minimum instance count of the cluster)')]
        [int]
        $minInstanceCount,
        [parameter(mandatory=$False,HelpMessage='The maximum instance count of the cluster)')]
        [int]
        $maxInstanceCount
    )

    process
    {
        return $([AutoscaleCapacity]$PSBoundParameters)
    }
}
class AutoscaleTimeAndCapacity
{
    [int] $maxInstanceCount
    [int] $minInstanceCount
    [string] $time
}
function New-AzureNativeTypeHdinsightAutoscaleTimeAndCapacity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The maximum instance count of the cluster)')]
        [int]
        $maxInstanceCount,
        [parameter(mandatory=$False,HelpMessage='The minimum instance count of the cluster)')]
        [int]
        $minInstanceCount,
        [parameter(mandatory=$False,HelpMessage='24-hour time in the form xx:xx)')]
        [string]
        $time
    )

    process
    {
        return $([AutoscaleTimeAndCapacity]$PSBoundParameters)
    }
}
class AutoscaleSchedule
{
    [AutoscaleTimeAndCapacity] $timeAndCapacity
    [ArgumentCompletions('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')]
    [string] $days
}
function New-AzureNativeTypeHdinsightAutoscaleSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Time and capacity for a schedule-based autoscale rule)')]
        [AutoscaleTimeAndCapacity]
        $timeAndCapacity,
        [parameter(mandatory=$False,HelpMessage='Days of the week for a schedule-based autoscale rule)')]
        $days
    )

    process
    {
        return $([AutoscaleSchedule]$PSBoundParameters)
    }
}
class AutoscaleRecurrence
{
    [string] $timeZone
    [AutoscaleSchedule[]] $schedule
}
function New-AzureNativeTypeHdinsightAutoscaleRecurrence
{
    param (
        [parameter(mandatory=$False,HelpMessage='The time zone for the autoscale schedule times)')]
        [string]
        $timeZone,
        [parameter(mandatory=$False,HelpMessage='Array of schedule-based autoscale rules)')]
        $schedule
    )

    process
    {
        return $([AutoscaleRecurrence]$PSBoundParameters)
    }
}
class Autoscale
{
    [AutoscaleCapacity] $capacity
    [AutoscaleRecurrence] $recurrence
}
function New-AzureNativeTypeHdinsightAutoscale
{
    param (
        [parameter(mandatory=$False,HelpMessage='Parameters for load-based autoscale)')]
        [AutoscaleCapacity]
        $capacity,
        [parameter(mandatory=$False,HelpMessage='Parameters for schedule-based autoscale)')]
        [AutoscaleRecurrence]
        $recurrence
    )

    process
    {
        return $([Autoscale]$PSBoundParameters)
    }
}
class DataDisksGroups
{
    [int] $disksPerNode
}
function New-AzureNativeTypeHdinsightDataDisksGroups
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of disks per node.)')]
        [int]
        $disksPerNode
    )

    process
    {
        return $([DataDisksGroups]$PSBoundParameters)
    }
}
class ScriptAction
{
    [string] $uri
    [string] $name
    [string] $parameters
}
function New-AzureNativeTypeHdinsightScriptAction
{
    param (
        [parameter(mandatory=$False,HelpMessage='The URI to the script.)')]
        [string]
        $uri,
        [parameter(mandatory=$False,HelpMessage='The name of the script action.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The parameters for the script provided.)')]
        [string]
        $parameters
    )

    process
    {
        return $([ScriptAction]$PSBoundParameters)
    }
}
class HardwareProfile
{
    [string] $vmSize
}
function New-AzureNativeTypeHdinsightHardwareProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The size of the VM)')]
        [string]
        $vmSize
    )

    process
    {
        return $([HardwareProfile]$PSBoundParameters)
    }
}
class Role
{
    [string] $vMGroupName
    [int] $targetInstanceCount
    [int] $minInstanceCount
    [OsProfile] $osProfile
    [string] $name
    [VirtualNetworkProfile] $virtualNetworkProfile
    [Autoscale] $autoscaleConfiguration
    [DataDisksGroups[]] $dataDisksGroups
    [bool] $encryptDataDisks
    [ScriptAction[]] $scriptActions
    [HardwareProfile] $hardwareProfile
}
function New-AzureNativeTypeHdinsightRole
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine group.)')]
        [string]
        $vMGroupName,
        [parameter(mandatory=$False,HelpMessage='The instance count of the cluster.)')]
        [int]
        $targetInstanceCount,
        [parameter(mandatory=$False,HelpMessage='The minimum instance count of the cluster.)')]
        [int]
        $minInstanceCount,
        [parameter(mandatory=$False,HelpMessage='The operating system profile.)')]
        [OsProfile]
        $osProfile,
        [parameter(mandatory=$False,HelpMessage='The name of the role.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The virtual network profile.)')]
        [VirtualNetworkProfile]
        $virtualNetworkProfile,
        [parameter(mandatory=$False,HelpMessage='The autoscale configurations.)')]
        [Autoscale]
        $autoscaleConfiguration,
        [parameter(mandatory=$False,HelpMessage='The data disks groups for the role.)')]
        $dataDisksGroups,
        [parameter(mandatory=$False,HelpMessage='Indicates whether encrypt the data disks.)')]
        [bool]
        $encryptDataDisks,
        [parameter(mandatory=$False,HelpMessage='The list of script actions on the role.)')]
        $scriptActions,
        [parameter(mandatory=$False,HelpMessage='The hardware profile.)')]
        [HardwareProfile]
        $hardwareProfile
    )

    process
    {
        return $([Role]$PSBoundParameters)
    }
}
class ComputeProfile
{
    [Role[]] $roles
}
function New-AzureNativeTypeHdinsightComputeProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of roles in the cluster.)')]
        $roles
    )

    process
    {
        return $([ComputeProfile]$PSBoundParameters)
    }
}
class ApplicationProperties
{
    [RuntimeScriptAction[]] $installScriptActions
    [Errors[]] $errors
    [ApplicationGetEndpoint[]] $sshEndpoints
    [RuntimeScriptAction[]] $uninstallScriptActions
    [string] $applicationType
    [ApplicationGetHttpsEndpoint[]] $httpsEndpoints
    [ComputeProfile] $computeProfile
}
function New-AzureNativeTypeHdinsightApplicationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of install script actions.)')]
        $installScriptActions,
        [parameter(mandatory=$False,HelpMessage='The list of errors.)')]
        $errors,
        [parameter(mandatory=$False,HelpMessage='The list of application SSH endpoints.)')]
        $sshEndpoints,
        [parameter(mandatory=$False,HelpMessage='The list of uninstall script actions.)')]
        $uninstallScriptActions,
        [parameter(mandatory=$False,HelpMessage='The application type.)')]
        [string]
        $applicationType,
        [parameter(mandatory=$False,HelpMessage='The list of application HTTPS endpoints.)')]
        $httpsEndpoints,
        [parameter(mandatory=$False,HelpMessage='The list of roles in the cluster.)')]
        [ComputeProfile]
        $computeProfile
    )

    process
    {
        return $([ApplicationProperties]$PSBoundParameters)
    }
}
function New-AzureNativeHdinsightApplication
{
    [Alias('azure_native_hdinsight_application')]
    param (
        [parameter(mandatory=$False,HelpMessage='The properties of the application.)')]
        [ApplicationProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The tags for the application.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The constant value for the application name.)')]
        [string]
        $applicationName,
        [parameter(mandatory=$False,HelpMessage='The name of the cluster.)')]
        [string]
        $clusterName,
        [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:hdinsight:Application")

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $description
    [ArgumentCompletions('Approved', 'Rejected', 'Pending', 'Removed')]
    [string] $status
    [string] $actionsRequired
}
function New-AzureNativeTypeHdinsightPrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='The optional description of the status.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The concrete private link service connection.)')]
        [string]
        [ArgumentCompletions('Approved', 'Rejected', 'Pending', 'Removed')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Whether there is further actions.)')]
        [string]
        $actionsRequired
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeHdinsightPrivateEndpointConnection
{
    [Alias('azure_native_hdinsight_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The private link service connection state.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the cluster.)')]
        [string]
        $clusterName,
        [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:hdinsight:PrivateEndpointConnection")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ClusterIdentity
{
    [ArgumentCompletions('SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None')]
    [object] $type
    [object] $userAssignedIdentities
}
class ClusterIdentityUserAssignedIdentities
{
    [string] $tenantId
}
function New-AzureNativeTypeHdinsightClusterIdentityUserAssignedIdentities
{
    param (
        [parameter(mandatory=$False,HelpMessage='The tenant id of user assigned identity.)')]
        [string]
        $tenantId
    )

    process
    {
        return $([ClusterIdentityUserAssignedIdentities]$PSBoundParameters)
    }
}
function New-AzureNativeTypeHdinsightClusterIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of identity used for the cluster. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user assigned identities.)')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The list of user identities associated with the cluster. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.)')]
        [ClusterIdentityUserAssignedIdentities]
        $userAssignedIdentities
    )

    process
    {
        return $([ClusterIdentity]$PSBoundParameters)
    }
}
class EncryptionInTransitProperties
{
    [bool] $isEncryptionInTransitEnabled
}
function New-AzureNativeTypeHdinsightEncryptionInTransitProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicates whether or not inter cluster node communication is encrypted in transit.)')]
        [bool]
        $isEncryptionInTransitEnabled
    )

    process
    {
        return $([EncryptionInTransitProperties]$PSBoundParameters)
    }
}
class SecurityProfile
{
    [string] $domainUserPassword
    [string] $organizationalUnitDN
    [string[]] $ldapsUrls
    [ArgumentCompletions('ActiveDirectory')]
    [object] $directoryType
    [string] $aaddsResourceId
    [string[]] $clusterUsersGroupDNs
    [string] $domain
    [string] $domainUsername
    [string] $msiResourceId
}
function New-AzureNativeTypeHdinsightSecurityProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The domain admin password.)')]
        [string]
        $domainUserPassword,
        [parameter(mandatory=$False,HelpMessage='The organizational unit within the Active Directory to place the cluster and service accounts.)')]
        [string]
        $organizationalUnitDN,
        [parameter(mandatory=$False,HelpMessage='The LDAPS protocol URLs to communicate with the Active Directory.)')]
        [string[]]
        $ldapsUrls,
        [parameter(mandatory=$False,HelpMessage='The directory type.)')]
        $directoryType,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the user''s Azure Active Directory Domain Service.)')]
        [string]
        $aaddsResourceId,
        [parameter(mandatory=$False,HelpMessage='Optional. The Distinguished Names for cluster user groups)')]
        [string[]]
        $clusterUsersGroupDNs,
        [parameter(mandatory=$False,HelpMessage='The organization''s active directory domain.)')]
        [string]
        $domain,
        [parameter(mandatory=$False,HelpMessage='The domain user account that will have admin privileges on the cluster.)')]
        [string]
        $domainUsername,
        [parameter(mandatory=$False,HelpMessage='User assigned identity that has permissions to read and create cluster-related artifacts in the user''s AADDS.)')]
        [string]
        $msiResourceId
    )

    process
    {
        return $([SecurityProfile]$PSBoundParameters)
    }
}
class ComputeIsolationProperties
{
    [string] $hostSku
    [bool] $enableComputeIsolation
}
function New-AzureNativeTypeHdinsightComputeIsolationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The host sku.)')]
        [string]
        $hostSku,
        [parameter(mandatory=$False,HelpMessage='The flag indicates whether enable compute isolation or not.)')]
        [bool]
        $enableComputeIsolation
    )

    process
    {
        return $([ComputeIsolationProperties]$PSBoundParameters)
    }
}
class NetworkProperties
{
    [ArgumentCompletions('Inbound', 'Outbound')]
    [string] $resourceProviderConnection
    [ArgumentCompletions('Disabled', 'Enabled')]
    [string] $privateLink
}
function New-AzureNativeTypeHdinsightNetworkProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The direction for the resource provider connection.)')]
        [string]
        [ArgumentCompletions('Inbound', 'Outbound')]
        $resourceProviderConnection,
        [parameter(mandatory=$False,HelpMessage='Indicates whether or not private link is enabled.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $privateLink
    )

    process
    {
        return $([NetworkProperties]$PSBoundParameters)
    }
}
class StorageAccount
{
    [bool] $isDefault
    [string] $msiResourceId
    [string] $container
    [string] $resourceId
    [string] $fileSystem
    [string] $name
    [string] $fileshare
    [string] $saskey
    [string] $key
}
function New-AzureNativeTypeHdinsightStorageAccount
{
    param (
        [parameter(mandatory=$False,HelpMessage='Whether or not the storage account is the default storage account.)')]
        [bool]
        $isDefault,
        [parameter(mandatory=$False,HelpMessage='The managed identity (MSI) that is allowed to access the storage account, only to be specified for Azure Data Lake Storage Gen 2.)')]
        [string]
        $msiResourceId,
        [parameter(mandatory=$False,HelpMessage='The container in the storage account, only to be specified for WASB storage accounts.)')]
        [string]
        $container,
        [parameter(mandatory=$False,HelpMessage='The resource ID of storage account, only to be specified for Azure Data Lake Storage Gen 2.)')]
        [string]
        $resourceId,
        [parameter(mandatory=$False,HelpMessage='The filesystem, only to be specified for Azure Data Lake Storage Gen 2.)')]
        [string]
        $fileSystem,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The file share name.)')]
        [string]
        $fileshare,
        [parameter(mandatory=$False,HelpMessage='The shared access signature key.)')]
        [string]
        $saskey,
        [parameter(mandatory=$False,HelpMessage='The storage account access key.)')]
        [string]
        $key
    )

    process
    {
        return $([StorageAccount]$PSBoundParameters)
    }
}
class StorageProfile
{
    [StorageAccount[]] $storageaccounts
}
function New-AzureNativeTypeHdinsightStorageProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of storage accounts in the cluster.)')]
        $storageaccounts
    )

    process
    {
        return $([StorageProfile]$PSBoundParameters)
    }
}
class ClientGroupInfo
{
    [string] $groupName
    [string] $groupId
}
function New-AzureNativeTypeHdinsightClientGroupInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The AAD security group name.)')]
        [string]
        $groupName,
        [parameter(mandatory=$False,HelpMessage='The AAD security group id.)')]
        [string]
        $groupId
    )

    process
    {
        return $([ClientGroupInfo]$PSBoundParameters)
    }
}
class KafkaRestProperties
{
    [ClientGroupInfo] $clientGroupInfo
    [object] $configurationOverride
}
function New-AzureNativeTypeHdinsightKafkaRestProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The information of AAD security group.)')]
        [ClientGroupInfo]
        $clientGroupInfo,
        [parameter(mandatory=$False,HelpMessage='The configurations that need to be overriden.)')]
        [hashtable]
        $configurationOverride
    )

    process
    {
        return $([KafkaRestProperties]$PSBoundParameters)
    }
}
class DiskEncryptionProperties
{
    [ArgumentCompletions('RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5')]
    [string] $encryptionAlgorithm
    [string] $vaultUri
    [string] $msiResourceId
    [string] $keyName
    [string] $keyVersion
    [bool] $encryptionAtHost
}
function New-AzureNativeTypeHdinsightDiskEncryptionProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Algorithm identifier for encryption, default RSA-OAEP.)')]
        [string]
        [ArgumentCompletions('RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5')]
        $encryptionAlgorithm,
        [parameter(mandatory=$False,HelpMessage='Base key vault URI where the customers key is located eg. https://myvault.vault.azure.net)')]
        [string]
        $vaultUri,
        [parameter(mandatory=$False,HelpMessage='Resource ID of Managed Identity that is used to access the key vault.)')]
        [string]
        $msiResourceId,
        [parameter(mandatory=$False,HelpMessage='Key name that is used for enabling disk encryption.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='Specific key version that is used for enabling disk encryption.)')]
        [string]
        $keyVersion,
        [parameter(mandatory=$False,HelpMessage='Indicates whether or not resource disk encryption is enabled.)')]
        [bool]
        $encryptionAtHost
    )

    process
    {
        return $([DiskEncryptionProperties]$PSBoundParameters)
    }
}
class ClusterDefinition
{
    [object] $componentVersion
    [object] $configurations
    [string] $kind
    [string] $blueprint
}
function New-AzureNativeTypeHdinsightClusterDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='The versions of different services in the cluster.)')]
        [hashtable]
        $componentVersion,
        [parameter(mandatory=$False,HelpMessage='The cluster configurations.)')]
        $configurations,
        [parameter(mandatory=$False,HelpMessage='The type of cluster.)')]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='The link to the blueprint.)')]
        [string]
        $blueprint
    )

    process
    {
        return $([ClusterDefinition]$PSBoundParameters)
    }
}
class ClusterCreateProperties
{
    [EncryptionInTransitProperties] $encryptionInTransitProperties
    [SecurityProfile] $securityProfile
    [ComputeIsolationProperties] $computeIsolationProperties
    [string] $clusterVersion
    [ArgumentCompletions('Windows', 'Linux')]
    [object] $osType
    [string] $minSupportedTlsVersion
    [NetworkProperties] $networkProperties
    [StorageProfile] $storageProfile
    [KafkaRestProperties] $kafkaRestProperties
    [ArgumentCompletions('Standard', 'Premium')]
    [object] $tier
    [DiskEncryptionProperties] $diskEncryptionProperties
    [ClusterDefinition] $clusterDefinition
    [ComputeProfile] $computeProfile
}
function New-AzureNativeTypeHdinsightClusterCreateProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The encryption-in-transit properties.)')]
        [EncryptionInTransitProperties]
        $encryptionInTransitProperties,
        [parameter(mandatory=$False,HelpMessage='The security profile.)')]
        [SecurityProfile]
        $securityProfile,
        [parameter(mandatory=$False,HelpMessage='The compute isolation properties.)')]
        [ComputeIsolationProperties]
        $computeIsolationProperties,
        [parameter(mandatory=$False,HelpMessage='The version of the cluster.)')]
        [string]
        $clusterVersion,
        [parameter(mandatory=$False,HelpMessage='The type of operating system.)')]
        $osType,
        [parameter(mandatory=$False,HelpMessage='The minimal supported tls version.)')]
        [string]
        $minSupportedTlsVersion,
        [parameter(mandatory=$False,HelpMessage='The network properties.)')]
        [NetworkProperties]
        $networkProperties,
        [parameter(mandatory=$False,HelpMessage='The storage profile.)')]
        [StorageProfile]
        $storageProfile,
        [parameter(mandatory=$False,HelpMessage='The cluster kafka rest proxy configuration.)')]
        [KafkaRestProperties]
        $kafkaRestProperties,
        [parameter(mandatory=$False,HelpMessage='The cluster tier.)')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='The disk encryption properties.)')]
        [DiskEncryptionProperties]
        $diskEncryptionProperties,
        [parameter(mandatory=$False,HelpMessage='The cluster definition.)')]
        [ClusterDefinition]
        $clusterDefinition,
        [parameter(mandatory=$False,HelpMessage='The compute profile.)')]
        [ComputeProfile]
        $computeProfile
    )

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

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

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

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

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

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

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

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

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

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