pspulumiyaml.azurenative.containerservice.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionContainerserviceGetTrustedAccessRoleBinding
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of trusted access role binding.)')]
        [string]
        $trustedAccessRoleBindingName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName
    )

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:containerservice:getSnapshot -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionContainerserviceGetPrivateEndpointConnection
{
    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 managed cluster resource.)')]
        [string]
        $resourceName
    )

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

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

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

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

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

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

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:containerservice:getOpenShiftManagedCluster -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionContainerserviceGetMaintenanceConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the maintenance configuration.)')]
        [string]
        $configName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:containerservice:getMaintenanceConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionContainerserviceGetManagedClusterSnapshot
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:containerservice:getManagedClusterSnapshot -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionContainerserviceListManagedClusterAccessProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the role for managed cluster accessProfile resource.)')]
        [string]
        $roleName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:containerservice:listManagedClusterAccessProfile -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionContainerserviceGetAgentPool
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the agent pool.)')]
        [string]
        $agentPoolName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName
    )

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:containerservice:listManagedClusterMonitoringUserCredentials -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class SysctlConfig
{
    [int] $netCoreRmemMax
    [int] $netCoreWmemDefault
    [int] $netIpv4TcpkeepaliveIntvl
    [int] $netIpv4TcpMaxSynBacklog
    [int] $vmVfsCachePressure
    [int] $netIpv4TcpKeepaliveTime
    [int] $netIpv4NeighDefaultGcThresh2
    [int] $kernelThreadsMax
    [int] $vmSwappiness
    [int] $vmMaxMapCount
    [int] $netIpv4TcpKeepaliveProbes
    [int] $netCoreNetdevMaxBacklog
    [int] $netIpv4TcpFinTimeout
    [int] $netNetfilterNfConntrackMax
    [int] $netCoreRmemDefault
    [int] $fsFileMax
    [int] $netCoreWmemMax
    [int] $netIpv4NeighDefaultGcThresh3
    [int] $netCoreOptmemMax
    [int] $fsAioMaxNr
    [int] $netIpv4NeighDefaultGcThresh1
    [int] $netNetfilterNfConntrackBuckets
    [bool] $netIpv4TcpTwReuse
    [int] $fsNrOpen
    [string] $netIpv4IpLocalPortRange
    [int] $netCoreSomaxconn
    [int] $fsInotifyMaxUserWatches
    [int] $netIpv4TcpMaxTwBuckets
}
function New-AzureNativeTypeContainerserviceSysctlConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.rmem_max.)')]
        [int]
        $netCoreRmemMax,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.wmem_default.)')]
        [int]
        $netCoreWmemDefault,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_keepalive_intvl.)')]
        [int]
        $netIpv4TcpkeepaliveIntvl,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_max_syn_backlog.)')]
        [int]
        $netIpv4TcpMaxSynBacklog,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting vm.vfs_cache_pressure.)')]
        [int]
        $vmVfsCachePressure,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_keepalive_time.)')]
        [int]
        $netIpv4TcpKeepaliveTime,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.neigh.default.gc_thresh2.)')]
        [int]
        $netIpv4NeighDefaultGcThresh2,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting kernel.threads-max.)')]
        [int]
        $kernelThreadsMax,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting vm.swappiness.)')]
        [int]
        $vmSwappiness,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting vm.max_map_count.)')]
        [int]
        $vmMaxMapCount,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_keepalive_probes.)')]
        [int]
        $netIpv4TcpKeepaliveProbes,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.netdev_max_backlog.)')]
        [int]
        $netCoreNetdevMaxBacklog,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_fin_timeout.)')]
        [int]
        $netIpv4TcpFinTimeout,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.netfilter.nf_conntrack_max.)')]
        [int]
        $netNetfilterNfConntrackMax,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.rmem_default.)')]
        [int]
        $netCoreRmemDefault,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting fs.file-max.)')]
        [int]
        $fsFileMax,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.wmem_max.)')]
        [int]
        $netCoreWmemMax,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.neigh.default.gc_thresh3.)')]
        [int]
        $netIpv4NeighDefaultGcThresh3,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.optmem_max.)')]
        [int]
        $netCoreOptmemMax,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting fs.aio-max-nr.)')]
        [int]
        $fsAioMaxNr,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.neigh.default.gc_thresh1.)')]
        [int]
        $netIpv4NeighDefaultGcThresh1,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.netfilter.nf_conntrack_buckets.)')]
        [int]
        $netNetfilterNfConntrackBuckets,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_tw_reuse.)')]
        [bool]
        $netIpv4TcpTwReuse,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting fs.nr_open.)')]
        [int]
        $fsNrOpen,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.ip_local_port_range.)')]
        [string]
        $netIpv4IpLocalPortRange,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.core.somaxconn.)')]
        [int]
        $netCoreSomaxconn,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting fs.inotify.max_user_watches.)')]
        [int]
        $fsInotifyMaxUserWatches,
        [parameter(mandatory=$False,HelpMessage='Sysctl setting net.ipv4.tcp_max_tw_buckets.)')]
        [int]
        $netIpv4TcpMaxTwBuckets
    )

    process
    {
        return $([SysctlConfig]$PSBoundParameters)
    }
}
class LinuxOSConfig
{
    [string] $transparentHugePageEnabled
    [SysctlConfig] $sysctls
    [int] $swapFileSizeMB
    [string] $transparentHugePageDefrag
}
function New-AzureNativeTypeContainerserviceLinuxOSConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='Transparent Huge Page enabled configuration.)')]
        [string]
        $transparentHugePageEnabled,
        [parameter(mandatory=$False,HelpMessage='Sysctl settings for Linux agent nodes.)')]
        [SysctlConfig]
        $sysctls,
        [parameter(mandatory=$False,HelpMessage='SwapFileSizeMB specifies size in MB of a swap file will be created on each node.)')]
        [int]
        $swapFileSizeMB,
        [parameter(mandatory=$False,HelpMessage='Transparent Huge Page defrag configuration.)')]
        [string]
        $transparentHugePageDefrag
    )

    process
    {
        return $([LinuxOSConfig]$PSBoundParameters)
    }
}
class KubeletConfig
{
    [string] $cpuCfsQuotaPeriod
    [int] $imageGcHighThreshold
    [int] $imageGcLowThreshold
    [int] $podMaxPids
    [int] $containerLogMaxSizeMB
    [bool] $failSwapOn
    [string] $cpuManagerPolicy
    [string[]] $allowedUnsafeSysctls
    [string] $topologyManagerPolicy
    [int] $containerLogMaxFiles
    [bool] $cpuCfsQuota
}
function New-AzureNativeTypeContainerserviceKubeletConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='Sets CPU CFS quota period value.)')]
        [string]
        $cpuCfsQuotaPeriod,
        [parameter(mandatory=$False,HelpMessage='The percent of disk usage after which image garbage collection is always run.)')]
        [int]
        $imageGcHighThreshold,
        [parameter(mandatory=$False,HelpMessage='The percent of disk usage before which image garbage collection is never run.)')]
        [int]
        $imageGcLowThreshold,
        [parameter(mandatory=$False,HelpMessage='The maximum number of processes per pod.)')]
        [int]
        $podMaxPids,
        [parameter(mandatory=$False,HelpMessage='The maximum size (e.g. 10Mi) of container log file before it is rotated.)')]
        [int]
        $containerLogMaxSizeMB,
        [parameter(mandatory=$False,HelpMessage='If set to true it will make the Kubelet fail to start if swap is enabled on the node.)')]
        [bool]
        $failSwapOn,
        [parameter(mandatory=$False,HelpMessage='CPU Manager policy to use.)')]
        [string]
        $cpuManagerPolicy,
        [parameter(mandatory=$False,HelpMessage='Allowlist of unsafe sysctls or unsafe sysctl patterns (ending in `*`).)')]
        [string[]]
        $allowedUnsafeSysctls,
        [parameter(mandatory=$False,HelpMessage='Topology Manager policy to use.)')]
        [string]
        $topologyManagerPolicy,
        [parameter(mandatory=$False,HelpMessage='The maximum number of container log files that can be present for a container. The number must be ≥ 2.)')]
        [int]
        $containerLogMaxFiles,
        [parameter(mandatory=$False,HelpMessage='Enable CPU CFS quota enforcement for containers that specify CPU limits.)')]
        [bool]
        $cpuCfsQuota
    )

    process
    {
        return $([KubeletConfig]$PSBoundParameters)
    }
}
class AgentPoolUpgradeSettings
{
    [string] $maxSurge
}
function New-AzureNativeTypeContainerserviceAgentPoolUpgradeSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Count or percentage of additional nodes to be added during upgrade. If empty uses AKS default)')]
        [string]
        $maxSurge
    )

    process
    {
        return $([AgentPoolUpgradeSettings]$PSBoundParameters)
    }
}
function New-AzureNativeContainerserviceAgentPool
{
    [Alias('azure_native_containerservice_agentpool')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Availability zones for nodes. Must use VirtualMachineScaleSets AgentPoolType.)')]
        [string[]]
        $availabilityZones,
        [parameter(mandatory=$False,HelpMessage='VNet SubnetID specifies the VNet''s subnet identifier for nodes and maybe pods)')]
        [string]
        $vnetSubnetID,
        [parameter(mandatory=$False,HelpMessage='Maximum number of nodes for auto-scaling)')]
        [int]
        $maxCount,
        [parameter(mandatory=$False,HelpMessage='Taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.)')]
        [string[]]
        $nodeTaints,
        [parameter(mandatory=$False,HelpMessage='OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.)')]
        [int]
        $osDiskSizeGB,
        [parameter(mandatory=$False,HelpMessage='OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux.)')]
        [string]
        [ArgumentCompletions('Linux', 'Windows')]
        $osType,
        [parameter(mandatory=$False,HelpMessage='Pod SubnetID specifies the VNet''s subnet identifier for pods.)')]
        [string]
        $podSubnetID,
        [parameter(mandatory=$False,HelpMessage='GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU. Supported values are MIG1g, MIG2g, MIG3g, MIG4g and MIG7g.)')]
        [string]
        [ArgumentCompletions('MIG1g', 'MIG2g', 'MIG3g', 'MIG4g', 'MIG7g')]
        $gpuInstanceProfile,
        [parameter(mandatory=$False,HelpMessage='Whether to enable auto-scaler)')]
        [bool]
        $enableAutoScaling,
        [parameter(mandatory=$False,HelpMessage='SpotMaxPrice to be used to specify the maximum price you are willing to pay in US Dollars. Possible values are any decimal value greater than zero or -1 which indicates default price to be up-to on-demand.)')]
        [int]
        $spotMaxPrice,
        [parameter(mandatory=$False,HelpMessage='ScaleSetEvictionPolicy to be used to specify eviction policy for Spot virtual machine scale set. Default to Delete.)')]
        [string]
        [ArgumentCompletions('Delete', 'Deallocate')]
        $scaleSetEvictionPolicy,
        [parameter(mandatory=$False,HelpMessage='AgentPoolType represents types of an agent pool)')]
        [string]
        [ArgumentCompletions('VirtualMachineScaleSets', 'AvailabilitySet')]
        $type,
        [parameter(mandatory=$False,HelpMessage='LinuxOSConfig specifies the OS configuration of linux agent nodes.)')]
        [LinuxOSConfig]
        $linuxOSConfig,
        [parameter(mandatory=$False,HelpMessage='KubeletDiskType determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Currently allows one value, OS, resulting in Kubelet using the OS disk for data.)')]
        [string]
        [ArgumentCompletions('OS', 'Temporary')]
        $kubeletDiskType,
        [parameter(mandatory=$False,HelpMessage='Minimum number of nodes for auto-scaling)')]
        [int]
        $minCount,
        [parameter(mandatory=$False,HelpMessage='AgentPoolMode represents mode of an agent pool)')]
        [string]
        [ArgumentCompletions('System', 'User')]
        $mode,
        [parameter(mandatory=$False,HelpMessage='KubeletConfig specifies the configuration of kubelet on agent nodes.)')]
        [KubeletConfig]
        $kubeletConfig,
        [parameter(mandatory=$False,HelpMessage='Whether to enable EncryptionAtHost)')]
        [bool]
        $enableEncryptionAtHost,
        [parameter(mandatory=$False,HelpMessage='OsSKU to be used to specify os sku. Choose from Ubuntu(default) and CBLMariner for Linux OSType. Not applicable to Windows OSType.)')]
        [string]
        [ArgumentCompletions('Ubuntu', 'CBLMariner')]
        $osSKU,
        [parameter(mandatory=$False,HelpMessage='Agent pool tags to be persisted on the agent pool virtual machine scale set.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='OS disk type to be used for machines in a given agent pool. Allowed values are ''Ephemeral'' and ''Managed''. If unspecified, defaults to ''Ephemeral'' when the VM supports ephemeral OS and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to ''Managed''. May not be changed after creation.)')]
        [string]
        [ArgumentCompletions('Managed', 'Ephemeral')]
        $osDiskType,
        [parameter(mandatory=$False,HelpMessage='Maximum number of pods that can run on a node.)')]
        [int]
        $maxPods,
        [parameter(mandatory=$False,HelpMessage='The name of the agent pool.)')]
        [string]
        $agentPoolName,
        [parameter(mandatory=$False,HelpMessage='Agent pool node labels to be persisted across all nodes in agent pool.)')]
        [hashtable]
        $nodeLabels,
        [parameter(mandatory=$False,HelpMessage='Enable public IP for nodes)')]
        [bool]
        $enableNodePublicIP,
        [parameter(mandatory=$False,HelpMessage='ScaleSetPriority to be used to specify virtual machine scale set priority. Default to regular.)')]
        [string]
        [ArgumentCompletions('Spot', 'Regular')]
        $scaleSetPriority,
        [parameter(mandatory=$False,HelpMessage='Size of agent VMs.)')]
        [string]
        $vmSize,
        [parameter(mandatory=$False,HelpMessage='The ID for Proximity Placement Group.)')]
        [string]
        $proximityPlacementGroupID,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Whether to use FIPS enabled OS)')]
        [bool]
        $enableFIPS,
        [parameter(mandatory=$False,HelpMessage='Version of orchestrator specified when creating the managed cluster.)')]
        [string]
        $orchestratorVersion,
        [parameter(mandatory=$False,HelpMessage='Settings for upgrading the agentpool)')]
        [AgentPoolUpgradeSettings]
        $upgradeSettings,
        [parameter(mandatory=$False,HelpMessage='Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 100 (inclusive) for user pools and in the range of 1 to 100 (inclusive) for system pools. The default value is 1.)')]
        [int]
        $count,
        [parameter(mandatory=$False,HelpMessage='Public IP Prefix ID. VM nodes use IPs assigned from this Public IP Prefix.)')]
        [string]
        $nodePublicIPPrefixID,
        [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:containerservice:AgentPool")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $description
    [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
    [string] $status
}
function New-AzureNativeTypeContainerservicePrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='The private link service connection description.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The private link service connection status.)')]
        [string]
        [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
        $status
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
class PrivateEndpoint
{
    [string] $id
}
function New-AzureNativeTypeContainerservicePrivateEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource Id for private endpoint)')]
        [string]
        $id
    )

    process
    {
        return $([PrivateEndpoint]$PSBoundParameters)
    }
}
function New-AzureNativeContainerservicePrivateEndpointConnection
{
    [Alias('azure_native_containerservice_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='A collection of information about the state of the connection between service consumer and provider.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The resource of private endpoint.)')]
        [PrivateEndpoint]
        $privateEndpoint,
        [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:containerservice: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["privateLinkServiceConnectionState"] = $privateLinkServiceConnectionState
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class CreationData
{
    [string] $sourceResourceId
}
function New-AzureNativeTypeContainerserviceCreationData
{
    param (
        [parameter(mandatory=$False,HelpMessage='This is the ARM ID of the source object to be used to create the target object.)')]
        [string]
        $sourceResourceId
    )

    process
    {
        return $([CreationData]$PSBoundParameters)
    }
}
function New-AzureNativeContainerserviceManagedClusterSnapshot
{
    [Alias('azure_native_containerservice_managedclustersnapshot')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='CreationData to be used to specify the source resource ID to create this snapshot.)')]
        [CreationData]
        $creationData,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Resource tags)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The type of a snapshot. The default is NodePool.)')]
        [string]
        [ArgumentCompletions('NodePool')]
        $snapshotType,
        [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:containerservice:ManagedClusterSnapshot")

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ManagedClusterAADProfile
{
    [string] $serverAppID
    [string] $clientAppID
    [bool] $managed
    [string] $serverAppSecret
    [bool] $enableAzureRBAC
    [string[]] $adminGroupObjectIDs
    [string] $tenantID
}
function New-AzureNativeTypeContainerserviceManagedClusterAADProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The server AAD application ID.)')]
        [string]
        $serverAppID,
        [parameter(mandatory=$False,HelpMessage='The client AAD application ID.)')]
        [string]
        $clientAppID,
        [parameter(mandatory=$False,HelpMessage='Whether to enable managed AAD.)')]
        [bool]
        $managed,
        [parameter(mandatory=$False,HelpMessage='The server AAD application secret.)')]
        [string]
        $serverAppSecret,
        [parameter(mandatory=$False,HelpMessage='Whether to enable Azure RBAC for Kubernetes authorization.)')]
        [bool]
        $enableAzureRBAC,
        [parameter(mandatory=$False,HelpMessage='AAD group object IDs that will have admin role of the cluster.)')]
        [string[]]
        $adminGroupObjectIDs,
        [parameter(mandatory=$False,HelpMessage='The AAD tenant ID to use for authentication. If not specified, will use the tenant of the deployment subscription.)')]
        [string]
        $tenantID
    )

    process
    {
        return $([ManagedClusterAADProfile]$PSBoundParameters)
    }
}
class ExtendedLocation
{
    [ArgumentCompletions('EdgeZone')]
    [string] $type
    [string] $name
}
function New-AzureNativeTypeContainerserviceExtendedLocation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of the extended location.)')]
        [string]
        [ArgumentCompletions('EdgeZone')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the extended location.)')]
        [string]
        $name
    )

    process
    {
        return $([ExtendedLocation]$PSBoundParameters)
    }
}
class ManagedClusterSKU
{
    [ArgumentCompletions('Paid', 'Free')]
    [string] $tier
    [ArgumentCompletions('Basic')]
    [string] $name
}
function New-AzureNativeTypeContainerserviceManagedClusterSKU
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tier of a managed cluster SKU.)')]
        [string]
        [ArgumentCompletions('Paid', 'Free')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Name of a managed cluster SKU.)')]
        [string]
        [ArgumentCompletions('Basic')]
        $name
    )

    process
    {
        return $([ManagedClusterSKU]$PSBoundParameters)
    }
}
class ManagedClusterPropertiesIdentityProfile
{
    [string] $objectId
    [string] $clientId
    [string] $resourceId
}
function New-AzureNativeTypeContainerserviceManagedClusterPropertiesIdentityProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The object id of the user assigned identity.)')]
        [string]
        $objectId,
        [parameter(mandatory=$False,HelpMessage='The client id of the user assigned identity.)')]
        [string]
        $clientId,
        [parameter(mandatory=$False,HelpMessage='The resource id of the user assigned identity.)')]
        [string]
        $resourceId
    )

    process
    {
        return $([ManagedClusterPropertiesIdentityProfile]$PSBoundParameters)
    }
}
class ManagedClusterAddonProfile
{
    [bool] $enabled
    [object] $config
}
function New-AzureNativeTypeContainerserviceManagedClusterAddonProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Whether the add-on is enabled or not.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Key-value pairs for configuring an add-on.)')]
        [hashtable]
        $config
    )

    process
    {
        return $([ManagedClusterAddonProfile]$PSBoundParameters)
    }
}
class ManagedClusterServicePrincipalProfile
{
    [string] $clientId
    [string] $secret
}
function New-AzureNativeTypeContainerserviceManagedClusterServicePrincipalProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ID for the service principal.)')]
        [string]
        $clientId,
        [parameter(mandatory=$False,HelpMessage='The secret password associated with the service principal in plain text.)')]
        [string]
        $secret
    )

    process
    {
        return $([ManagedClusterServicePrincipalProfile]$PSBoundParameters)
    }
}
class ManagedClusterAutoUpgradeProfile
{
    [ArgumentCompletions('rapid', 'stable', 'patch', 'node-image', 'none')]
    [string] $upgradeChannel
}
function New-AzureNativeTypeContainerserviceManagedClusterAutoUpgradeProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='upgrade channel for auto upgrade.)')]
        [string]
        [ArgumentCompletions('rapid', 'stable', 'patch', 'node-image', 'none')]
        $upgradeChannel
    )

    process
    {
        return $([ManagedClusterAutoUpgradeProfile]$PSBoundParameters)
    }
}
class ManagedClusterPodIdentityException
{
    [string] $namespace
    [string] $name
    [object] $podLabels
}
function New-AzureNativeTypeContainerserviceManagedClusterPodIdentityException
{
    param (
        [parameter(mandatory=$False,HelpMessage='Namespace of the pod identity exception.)')]
        [string]
        $namespace,
        [parameter(mandatory=$False,HelpMessage='Name of the pod identity exception.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Pod labels to match.)')]
        [hashtable]
        $podLabels
    )

    process
    {
        return $([ManagedClusterPodIdentityException]$PSBoundParameters)
    }
}
class UserAssignedIdentity
{
    [string] $objectId
    [string] $clientId
    [string] $resourceId
}
function New-AzureNativeTypeContainerserviceUserAssignedIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The object id of the user assigned identity.)')]
        [string]
        $objectId,
        [parameter(mandatory=$False,HelpMessage='The client id of the user assigned identity.)')]
        [string]
        $clientId,
        [parameter(mandatory=$False,HelpMessage='The resource id of the user assigned identity.)')]
        [string]
        $resourceId
    )

    process
    {
        return $([UserAssignedIdentity]$PSBoundParameters)
    }
}
class ManagedClusterPodIdentity
{
    [string] $namespace
    [string] $name
    [string] $bindingSelector
    [UserAssignedIdentity] $identity
}
function New-AzureNativeTypeContainerserviceManagedClusterPodIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Namespace of the pod identity.)')]
        [string]
        $namespace,
        [parameter(mandatory=$False,HelpMessage='Name of the pod identity.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Binding selector to use for the AzureIdentityBinding resource.)')]
        [string]
        $bindingSelector,
        [parameter(mandatory=$False,HelpMessage='Information of the user assigned identity.)')]
        [UserAssignedIdentity]
        $identity
    )

    process
    {
        return $([ManagedClusterPodIdentity]$PSBoundParameters)
    }
}
class ManagedClusterPodIdentityProfile
{
    [ManagedClusterPodIdentityException[]] $userAssignedIdentityExceptions
    [bool] $allowNetworkPluginKubenet
    [bool] $enabled
    [ManagedClusterPodIdentity[]] $userAssignedIdentities
}
function New-AzureNativeTypeContainerserviceManagedClusterPodIdentityProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='User assigned pod identity exception settings.)')]
        $userAssignedIdentityExceptions,
        [parameter(mandatory=$False,HelpMessage='Customer consent for enabling AAD pod identity addon in cluster using Kubenet network plugin.)')]
        [bool]
        $allowNetworkPluginKubenet,
        [parameter(mandatory=$False,HelpMessage='Whether the pod identity addon is enabled.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='User assigned pod identity settings.)')]
        $userAssignedIdentities
    )

    process
    {
        return $([ManagedClusterPodIdentityProfile]$PSBoundParameters)
    }
}
class ManagedClusterIdentity
{
    [ArgumentCompletions('SystemAssigned', 'UserAssigned', 'None')]
    [object] $type
    [object] $userAssignedIdentities
}
function New-AzureNativeTypeContainerserviceManagedClusterIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of identity used for the managed cluster. Type ''SystemAssigned'' will use an implicitly created identity in master components and an auto-created user assigned identity in MC_ resource group in agent nodes. Type ''None'' will not use MSI for the managed cluster, service principal will be used instead.)')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The user identity associated with the managed cluster. This identity will be used in control plane and only one user assigned identity is allowed. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.)')]
        [object]
        $userAssignedIdentities
    )

    process
    {
        return $([ManagedClusterIdentity]$PSBoundParameters)
    }
}
class ManagedClusterHTTPProxyConfig
{
    [string[]] $noProxy
    [string] $httpProxy
    [string] $trustedCa
    [string] $httpsProxy
}
function New-AzureNativeTypeContainerserviceManagedClusterHTTPProxyConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='Endpoints that should not go through proxy.)')]
        [string[]]
        $noProxy,
        [parameter(mandatory=$False,HelpMessage='HTTP proxy server endpoint to use.)')]
        [string]
        $httpProxy,
        [parameter(mandatory=$False,HelpMessage='Alternative CA cert to use for connecting to proxy servers.)')]
        [string]
        $trustedCa,
        [parameter(mandatory=$False,HelpMessage='HTTPS proxy server endpoint to use.)')]
        [string]
        $httpsProxy
    )

    process
    {
        return $([ManagedClusterHTTPProxyConfig]$PSBoundParameters)
    }
}
class ManagedClusterAPIServerAccessProfile
{
    [string[]] $authorizedIPRanges
    [string] $privateDNSZone
    [bool] $enablePrivateCluster
}
function New-AzureNativeTypeContainerserviceManagedClusterAPIServerAccessProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Authorized IP Ranges to kubernetes API server.)')]
        [string[]]
        $authorizedIPRanges,
        [parameter(mandatory=$False,HelpMessage='Private dns zone mode for private cluster. )')]
        [string]
        $privateDNSZone,
        [parameter(mandatory=$False,HelpMessage='Whether to create the cluster as a private cluster or not.)')]
        [bool]
        $enablePrivateCluster
    )

    process
    {
        return $([ManagedClusterAPIServerAccessProfile]$PSBoundParameters)
    }
}
class ContainerServiceSshPublicKey
{
    [string] $keyData
}
function New-AzureNativeTypeContainerserviceContainerServiceSshPublicKey
{
    param (
        [parameter(mandatory=$False,HelpMessage='Certificate public key used to authenticate with VMs through SSH. The certificate must be in PEM format with or without headers.)')]
        [string]
        $keyData
    )

    process
    {
        return $([ContainerServiceSshPublicKey]$PSBoundParameters)
    }
}
class ContainerServiceSshConfiguration
{
    [ContainerServiceSshPublicKey[]] $publicKeys
}
function New-AzureNativeTypeContainerserviceContainerServiceSshConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of SSH public keys used to authenticate with Linux-based VMs. Only expect one key specified.)')]
        $publicKeys
    )

    process
    {
        return $([ContainerServiceSshConfiguration]$PSBoundParameters)
    }
}
class ContainerServiceLinuxProfile
{
    [ContainerServiceSshConfiguration] $ssh
    [string] $adminUsername
}
function New-AzureNativeTypeContainerserviceContainerServiceLinuxProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='SSH configuration for Linux-based VMs running on Azure.)')]
        [ContainerServiceSshConfiguration]
        $ssh,
        [parameter(mandatory=$False,HelpMessage='The administrator username to use for Linux VMs.)')]
        [string]
        $adminUsername
    )

    process
    {
        return $([ContainerServiceLinuxProfile]$PSBoundParameters)
    }
}
class ResourceReference
{
    [string] $id
}
function New-AzureNativeTypeContainerserviceResourceReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='The fully qualified Azure resource id.)')]
        [string]
        $id
    )

    process
    {
        return $([ResourceReference]$PSBoundParameters)
    }
}
class ManagedClusterLoadBalancerProfileOutboundIPs
{
    [ResourceReference[]] $publicIPs
}
function New-AzureNativeTypeContainerserviceManagedClusterLoadBalancerProfileOutboundIPs
{
    param (
        [parameter(mandatory=$False,HelpMessage='A list of public IP resources.)')]
        $publicIPs
    )

    process
    {
        return $([ManagedClusterLoadBalancerProfileOutboundIPs]$PSBoundParameters)
    }
}
class ManagedClusterLoadBalancerProfileOutboundIPPrefixes
{
    [ResourceReference[]] $publicIPPrefixes
}
function New-AzureNativeTypeContainerserviceManagedClusterLoadBalancerProfileOutboundIPPrefixes
{
    param (
        [parameter(mandatory=$False,HelpMessage='A list of public IP prefix resources.)')]
        $publicIPPrefixes
    )

    process
    {
        return $([ManagedClusterLoadBalancerProfileOutboundIPPrefixes]$PSBoundParameters)
    }
}
class ManagedClusterLoadBalancerProfileManagedOutboundIPs
{
    [int] $count
}
function New-AzureNativeTypeContainerserviceManagedClusterLoadBalancerProfileManagedOutboundIPs
{
    param (
        [parameter(mandatory=$False,HelpMessage='Desired number of outbound IP created/managed by Azure for the cluster load balancer. Allowed values must be in the range of 1 to 100 (inclusive). The default value is 1. )')]
        [int]
        $count
    )

    process
    {
        return $([ManagedClusterLoadBalancerProfileManagedOutboundIPs]$PSBoundParameters)
    }
}
class ManagedClusterLoadBalancerProfile
{
    [int] $idleTimeoutInMinutes
    [ManagedClusterLoadBalancerProfileOutboundIPs] $outboundIPs
    [ResourceReference[]] $effectiveOutboundIPs
    [ManagedClusterLoadBalancerProfileOutboundIPPrefixes] $outboundIPPrefixes
    [int] $allocatedOutboundPorts
    [ManagedClusterLoadBalancerProfileManagedOutboundIPs] $managedOutboundIPs
}
function New-AzureNativeTypeContainerserviceManagedClusterLoadBalancerProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Desired outbound flow idle timeout in minutes. Allowed values must be in the range of 4 to 120 (inclusive). The default value is 30 minutes.)')]
        [int]
        $idleTimeoutInMinutes,
        [parameter(mandatory=$False,HelpMessage='Desired outbound IP resources for the cluster load balancer.)')]
        [ManagedClusterLoadBalancerProfileOutboundIPs]
        $outboundIPs,
        [parameter(mandatory=$False,HelpMessage='The effective outbound IP resources of the cluster load balancer.)')]
        $effectiveOutboundIPs,
        [parameter(mandatory=$False,HelpMessage='Desired outbound IP Prefix resources for the cluster load balancer.)')]
        [ManagedClusterLoadBalancerProfileOutboundIPPrefixes]
        $outboundIPPrefixes,
        [parameter(mandatory=$False,HelpMessage='Desired number of allocated SNAT ports per VM. Allowed values must be in the range of 0 to 64000 (inclusive). The default value is 0 which results in Azure dynamically allocating ports.)')]
        [int]
        $allocatedOutboundPorts,
        [parameter(mandatory=$False,HelpMessage='Desired managed outbound IPs for the cluster load balancer.)')]
        [ManagedClusterLoadBalancerProfileManagedOutboundIPs]
        $managedOutboundIPs
    )

    process
    {
        return $([ManagedClusterLoadBalancerProfile]$PSBoundParameters)
    }
}
class ContainerServiceNetworkProfile
{
    [ArgumentCompletions('transparent', 'bridge')]
    [string] $networkMode
    [string] $dockerBridgeCidr
    [string] $podCidr
    [ArgumentCompletions('loadBalancer', 'userDefinedRouting')]
    [string] $outboundType
    [ArgumentCompletions('calico', 'azure')]
    [string] $networkPolicy
    [ArgumentCompletions('standard', 'basic')]
    [string] $loadBalancerSku
    [ArgumentCompletions('azure', 'kubenet')]
    [string] $networkPlugin
    [string] $dnsServiceIP
    [string] $serviceCidr
    [ManagedClusterLoadBalancerProfile] $loadBalancerProfile
}
function New-AzureNativeTypeContainerserviceContainerServiceNetworkProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Network mode used for building Kubernetes network.)')]
        [string]
        [ArgumentCompletions('transparent', 'bridge')]
        $networkMode,
        [parameter(mandatory=$False,HelpMessage='A CIDR notation IP range assigned to the Docker bridge network. It must not overlap with any Subnet IP ranges or the Kubernetes service address range.)')]
        [string]
        $dockerBridgeCidr,
        [parameter(mandatory=$False,HelpMessage='A CIDR notation IP range from which to assign pod IPs when kubenet is used.)')]
        [string]
        $podCidr,
        [parameter(mandatory=$False,HelpMessage='The outbound (egress) routing method.)')]
        [string]
        [ArgumentCompletions('loadBalancer', 'userDefinedRouting')]
        $outboundType,
        [parameter(mandatory=$False,HelpMessage='Network policy used for building Kubernetes network.)')]
        [string]
        [ArgumentCompletions('calico', 'azure')]
        $networkPolicy,
        [parameter(mandatory=$False,HelpMessage='The load balancer sku for the managed cluster.)')]
        [string]
        [ArgumentCompletions('standard', 'basic')]
        $loadBalancerSku,
        [parameter(mandatory=$False,HelpMessage='Network plugin used for building Kubernetes network.)')]
        [string]
        [ArgumentCompletions('azure', 'kubenet')]
        $networkPlugin,
        [parameter(mandatory=$False,HelpMessage='An IP address assigned to the Kubernetes DNS service. It must be within the Kubernetes service address range specified in serviceCidr.)')]
        [string]
        $dnsServiceIP,
        [parameter(mandatory=$False,HelpMessage='A CIDR notation IP range from which to assign service cluster IPs. It must not overlap with any Subnet IP ranges.)')]
        [string]
        $serviceCidr,
        [parameter(mandatory=$False,HelpMessage='Profile of the cluster load balancer.)')]
        [ManagedClusterLoadBalancerProfile]
        $loadBalancerProfile
    )

    process
    {
        return $([ContainerServiceNetworkProfile]$PSBoundParameters)
    }
}
class ManagedClusterWindowsProfile
{
    [string] $adminUsername
    [bool] $enableCSIProxy
    [ArgumentCompletions('None', 'Windows_Server')]
    [string] $licenseType
    [string] $adminPassword
}
function New-AzureNativeTypeContainerserviceManagedClusterWindowsProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the name of the administrator account. <br><br> **restriction:** Cannot end in "." <br><br> **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5". <br><br> **Minimum-length:** 1 character <br><br> **Max-length:** 20 characters)')]
        [string]
        $adminUsername,
        [parameter(mandatory=$False,HelpMessage='Whether to enable CSI proxy.)')]
        [bool]
        $enableCSIProxy,
        [parameter(mandatory=$False,HelpMessage='The licenseType to use for Windows VMs. Windows_Server is used to enable Azure Hybrid User Benefits for Windows VMs.)')]
        [string]
        [ArgumentCompletions('None', 'Windows_Server')]
        $licenseType,
        [parameter(mandatory=$False,HelpMessage='Specifies the password of the administrator account. <br><br> **Minimum-length:** 8 characters <br><br> **Max-length:** 123 characters <br><br> **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has lower characters <br>Has upper characters <br> Has a digit <br> Has a special character (Regex match [\W_]) <br><br> **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!")')]
        [string]
        $adminPassword
    )

    process
    {
        return $([ManagedClusterWindowsProfile]$PSBoundParameters)
    }
}
class ManagedClusterPropertiesAutoScalerProfile
{
    [string] $scaleDownDelayAfterDelete
    [string] $maxNodeProvisionTime
    [string] $maxGracefulTerminationSec
    [string] $scaleDownUnneededTime
    [string] $maxTotalUnreadyPercentage
    [string] $skipNodesWithSystemPods
    [string] $balanceSimilarNodeGroups
    [string] $scaleDownDelayAfterAdd
    [string] $okTotalUnreadyCount
    [string] $maxEmptyBulkDelete
    [string] $newPodScaleUpDelay
    [ArgumentCompletions('least-waste', 'most-pods', 'priority', 'random')]
    [string] $expander
    [string] $scaleDownDelayAfterFailure
    [string] $skipNodesWithLocalStorage
    [string] $scanInterval
    [string] $scaleDownUtilizationThreshold
    [string] $scaleDownUnreadyTime
}
function New-AzureNativeTypeContainerserviceManagedClusterPropertiesAutoScalerProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scaleDownDelayAfterDelete,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $maxNodeProvisionTime,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $maxGracefulTerminationSec,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scaleDownUnneededTime,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $maxTotalUnreadyPercentage,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $skipNodesWithSystemPods,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $balanceSimilarNodeGroups,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scaleDownDelayAfterAdd,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $okTotalUnreadyCount,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $maxEmptyBulkDelete,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $newPodScaleUpDelay,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        [ArgumentCompletions('least-waste', 'most-pods', 'priority', 'random')]
        $expander,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scaleDownDelayAfterFailure,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $skipNodesWithLocalStorage,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scanInterval,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scaleDownUtilizationThreshold,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $scaleDownUnreadyTime
    )

    process
    {
        return $([ManagedClusterPropertiesAutoScalerProfile]$PSBoundParameters)
    }
}
function New-AzureNativeContainerserviceManagedCluster
{
    [Alias('azure_native_containerservice_managedcluster')]
    param (
        [parameter(mandatory=$False,HelpMessage='Profile of Azure Active Directory configuration.)')]
        [ManagedClusterAADProfile]
        $aadProfile,
        [parameter(mandatory=$False,HelpMessage='If set to true, getting static credential will be disabled for this cluster. Expected to only be used for AAD clusters.)')]
        [bool]
        $disableLocalAccounts,
        [parameter(mandatory=$False,HelpMessage='The extended location of the Virtual Machine.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The managed cluster SKU.)')]
        [ManagedClusterSKU]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Identities associated with the cluster.)')]
        [ManagedClusterPropertiesIdentityProfile]
        $identityProfile,
        [parameter(mandatory=$False,HelpMessage='Name of the resource group containing agent pool nodes.)')]
        [string]
        $nodeResourceGroup,
        [parameter(mandatory=$False,HelpMessage='Profile of managed cluster add-on.)')]
        [ManagedClusterAddonProfile]
        $addonProfiles,
        [parameter(mandatory=$False,HelpMessage='Version of Kubernetes specified when creating the managed cluster.)')]
        [string]
        $kubernetesVersion,
        [parameter(mandatory=$False,HelpMessage='Private link resources associated with the cluster.)')]
        $privateLinkResources,
        [parameter(mandatory=$False,HelpMessage='Properties of the agent pool.)')]
        $agentPoolProfiles,
        [parameter(mandatory=$False,HelpMessage='(DEPRECATING) Whether to enable Kubernetes pod security policy (preview). This feature is set for removal on October 15th, 2020. Learn more at aka.ms/aks/azpodpolicy.)')]
        [bool]
        $enablePodSecurityPolicy,
        [parameter(mandatory=$False,HelpMessage='Information about a service principal identity for the cluster to use for manipulating Azure APIs.)')]
        [ManagedClusterServicePrincipalProfile]
        $servicePrincipalProfile,
        [parameter(mandatory=$False,HelpMessage='Profile of auto upgrade configuration.)')]
        [ManagedClusterAutoUpgradeProfile]
        $autoUpgradeProfile,
        [parameter(mandatory=$False,HelpMessage='Resource location)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Profile of managed cluster pod identity.)')]
        [ManagedClusterPodIdentityProfile]
        $podIdentityProfile,
        [parameter(mandatory=$False,HelpMessage='The identity of the managed cluster, if configured.)')]
        [ManagedClusterIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='ResourceId of the disk encryption set to use for enabling encryption at rest.)')]
        [string]
        $diskEncryptionSetID,
        [parameter(mandatory=$False,HelpMessage='Configurations for provisioning the cluster with HTTP proxy servers.)')]
        [ManagedClusterHTTPProxyConfig]
        $httpProxyConfig,
        [parameter(mandatory=$False,HelpMessage='Access profile for managed cluster API server.)')]
        [ManagedClusterAPIServerAccessProfile]
        $apiServerAccessProfile,
        [parameter(mandatory=$False,HelpMessage='FQDN subdomain specified when creating private cluster with custom private dns zone.)')]
        [string]
        $fqdnSubdomain,
        [parameter(mandatory=$False,HelpMessage='Profile for Linux VMs in the container service cluster.)')]
        [ContainerServiceLinuxProfile]
        $linuxProfile,
        [parameter(mandatory=$False,HelpMessage='Profile of network configuration.)')]
        [ContainerServiceNetworkProfile]
        $networkProfile,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Profile for Windows VMs in the container service cluster.)')]
        [ManagedClusterWindowsProfile]
        $windowsProfile,
        [parameter(mandatory=$False,HelpMessage='Parameters to be applied to the cluster-autoscaler when enabled)')]
        [ManagedClusterPropertiesAutoScalerProfile]
        $autoScalerProfile,
        [parameter(mandatory=$False,HelpMessage='DNS prefix specified when creating the managed cluster.)')]
        [string]
        $dnsPrefix,
        [parameter(mandatory=$False,HelpMessage='Whether to enable Kubernetes Role-Based Access Control.)')]
        [bool]
        $enableRBAC,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PurchasePlan
{
    [string] $product
    [string] $name
    [string] $publisher
    [string] $promotionCode
}
function New-AzureNativeTypeContainerservicePurchasePlan
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element.)')]
        [string]
        $product,
        [parameter(mandatory=$False,HelpMessage='The plan ID.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The plan ID.)')]
        [string]
        $publisher,
        [parameter(mandatory=$False,HelpMessage='The promotion code.)')]
        [string]
        $promotionCode
    )

    process
    {
        return $([PurchasePlan]$PSBoundParameters)
    }
}
class OpenShiftManagedClusterAADIdentityProvider
{
    [string] $customerAdminGroupId
    [string] $kind
    [string] $clientId
    [string] $tenantId
    [string] $secret
}
function New-AzureNativeTypeContainerserviceOpenShiftManagedClusterAADIdentityProvider
{
    param (
        [parameter(mandatory=$False,HelpMessage='The groupId to be granted cluster admin role.)')]
        [string]
        $customerAdminGroupId,
        [parameter(mandatory=$False,HelpMessage='The kind of the provider.
Expected value is ''AADIdentityProvider''.)'
)]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='The clientId password associated with the provider.)')]
        [string]
        $clientId,
        [parameter(mandatory=$False,HelpMessage='The tenantId associated with the provider.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='The secret password associated with the provider.)')]
        [string]
        $secret
    )

    process
    {
        return $([OpenShiftManagedClusterAADIdentityProvider]$PSBoundParameters)
    }
}
class OpenShiftManagedClusterIdentityProvider
{
    [OpenShiftManagedClusterAADIdentityProvider] $provider
    [string] $name
}
function New-AzureNativeTypeContainerserviceOpenShiftManagedClusterIdentityProvider
{
    param (
        [parameter(mandatory=$False,HelpMessage='Configuration of the provider.)')]
        [OpenShiftManagedClusterAADIdentityProvider]
        $provider,
        [parameter(mandatory=$False,HelpMessage='Name of the provider.)')]
        [string]
        $name
    )

    process
    {
        return $([OpenShiftManagedClusterIdentityProvider]$PSBoundParameters)
    }
}
class OpenShiftManagedClusterAuthProfile
{
    [OpenShiftManagedClusterIdentityProvider[]] $identityProviders
}
function New-AzureNativeTypeContainerserviceOpenShiftManagedClusterAuthProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Type of authentication profile to use.)')]
        $identityProviders
    )

    process
    {
        return $([OpenShiftManagedClusterAuthProfile]$PSBoundParameters)
    }
}
class NetworkProfile
{
    [string] $vnetCidr
    [string] $peerVnetId
    [string] $vnetId
}
function New-AzureNativeTypeContainerserviceNetworkProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='CIDR for the OpenShift Vnet.)')]
        [string]
        $vnetCidr,
        [parameter(mandatory=$False,HelpMessage='CIDR of the Vnet to peer.)')]
        [string]
        $peerVnetId,
        [parameter(mandatory=$False,HelpMessage='ID of the Vnet created for OSA cluster.)')]
        [string]
        $vnetId
    )

    process
    {
        return $([NetworkProfile]$PSBoundParameters)
    }
}
class OpenShiftManagedClusterMasterPoolProfile
{
    [string] $name
    [ArgumentCompletions('Linux', 'Windows')]
    [string] $osType
    [string] $subnetCidr
    [ArgumentCompletions('Standard_D2s_v3', 'Standard_D4s_v3', 'Standard_D8s_v3', 'Standard_D16s_v3', 'Standard_D32s_v3', 'Standard_D64s_v3', 'Standard_DS4_v2', 'Standard_DS5_v2', 'Standard_F8s_v2', 'Standard_F16s_v2', 'Standard_F32s_v2', 'Standard_F64s_v2', 'Standard_F72s_v2', 'Standard_F8s', 'Standard_F16s', 'Standard_E4s_v3', 'Standard_E8s_v3', 'Standard_E16s_v3', 'Standard_E20s_v3', 'Standard_E32s_v3', 'Standard_E64s_v3', 'Standard_GS2', 'Standard_GS3', 'Standard_GS4', 'Standard_GS5', 'Standard_DS12_v2', 'Standard_DS13_v2', 'Standard_DS14_v2', 'Standard_DS15_v2', 'Standard_L4s', 'Standard_L8s', 'Standard_L16s', 'Standard_L32s')]
    [string] $vmSize
    [int] $count
}
function New-AzureNativeTypeContainerserviceOpenShiftManagedClusterMasterPoolProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Unique name of the master pool profile in the context of the subscription and resource group.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux.)')]
        [string]
        [ArgumentCompletions('Linux', 'Windows')]
        $osType,
        [parameter(mandatory=$False,HelpMessage='Subnet CIDR for the peering.)')]
        [string]
        $subnetCidr,
        [parameter(mandatory=$False,HelpMessage='Size of agent VMs.)')]
        [string]
        [ArgumentCompletions('Standard_D2s_v3', 'Standard_D4s_v3', 'Standard_D8s_v3', 'Standard_D16s_v3', 'Standard_D32s_v3', 'Standard_D64s_v3', 'Standard_DS4_v2', 'Standard_DS5_v2', 'Standard_F8s_v2', 'Standard_F16s_v2', 'Standard_F32s_v2', 'Standard_F64s_v2', 'Standard_F72s_v2', 'Standard_F8s', 'Standard_F16s', 'Standard_E4s_v3', 'Standard_E8s_v3', 'Standard_E16s_v3', 'Standard_E20s_v3', 'Standard_E32s_v3', 'Standard_E64s_v3', 'Standard_GS2', 'Standard_GS3', 'Standard_GS4', 'Standard_GS5', 'Standard_DS12_v2', 'Standard_DS13_v2', 'Standard_DS14_v2', 'Standard_DS15_v2', 'Standard_L4s', 'Standard_L8s', 'Standard_L16s', 'Standard_L32s')]
        $vmSize,
        [parameter(mandatory=$False,HelpMessage='Number of masters (VMs) to host docker containers. The default value is 3.)')]
        [int]
        $count
    )

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeContainerserviceSnapshot
{
    [Alias('azure_native_containerservice_snapshot')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='CreationData to be used to specify the source agent pool resource ID to create this snapshot.)')]
        [CreationData]
        $creationData,
        [parameter(mandatory=$False,HelpMessage='The name of the managed cluster resource.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='Resource tags)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The type of a snapshot. The default is NodePool.)')]
        [string]
        [ArgumentCompletions('NodePool')]
        $snapshotType,
        [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:containerservice:Snapshot")

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

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

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

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

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

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