pspulumiyaml.azurenative.devices.psm1

using module pspulumiyaml
function Invoke-AzureNativeFunctionDevicesGetIotDpsResourcePrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the provisioning service.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the provisioning service.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getIotDpsResourcePrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesGetDpsCertificate
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the provisioning service the certificate is associated with.)')]
        [string]
        $provisioningServiceName,
        [parameter(mandatory=$False,HelpMessage='Name of the certificate to retrieve.)')]
        [string]
        $certificateName,
        [parameter(mandatory=$False,HelpMessage='Resource group identifier.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["certificateName"] = $certificateName
        $arguments["provisioningServiceName"] = $provisioningServiceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getDpsCertificate -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesListIotHubResourceKeysForKeyName
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The name of the shared access policy.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:listIotHubResourceKeysForKeyName -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesListIotDpsResourceKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='resource group name)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The provisioning service name to get the shared access keys for.)')]
        [string]
        $provisioningServiceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:listIotDpsResourceKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesListIotHubResourceKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:listIotHubResourceKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesListIotDpsResourceKeysForKeyName
{
    param (
        [parameter(mandatory=$False,HelpMessage='Logical key name to get key-values for.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='Name of the provisioning service.)')]
        [string]
        $provisioningServiceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the provisioning service.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:listIotDpsResourceKeysForKeyName -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesGetIotDpsResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource group name.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the provisioning service to retrieve.)')]
        [string]
        $provisioningServiceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getIotDpsResource -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesGetIotHubResourceEventHubConsumerGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Event Hub-compatible endpoint in the IoT hub.)')]
        [string]
        $eventHubEndpointName,
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The name of the consumer group to retrieve.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getIotHubResourceEventHubConsumerGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesGetCertificate
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The name of the certificate)')]
        [string]
        $certificateName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getCertificate -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevicesGetIotHubResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devices:getIotHubResource -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class EventHubConsumerGroupName
{
    [string] $name
}
function New-AzureNativeTypeDevicesEventHubConsumerGroupName
{
    param (
        [parameter(mandatory=$False,HelpMessage='EventHub consumer group name)')]
        [string]
        $name
    )

    process
    {
        return $([EventHubConsumerGroupName]$PSBoundParameters)
    }
}
function New-AzureNativeDevicesIotHubResourceEventHubConsumerGroup
{
    [Alias('azure_native_devices_iothubresourceeventhubconsumergroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Event Hub-compatible endpoint in the IoT hub.)')]
        [string]
        $eventHubEndpointName,
        [parameter(mandatory=$False,HelpMessage='The EventHub consumer group name.)')]
        [EventHubConsumerGroupName]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The name of the consumer group to add.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["eventHubEndpointName"] = $eventHubEndpointName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevicesDpsCertificate
{
    [Alias('azure_native_devices_dpscertificate')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the provisioning service.)')]
        [string]
        $provisioningServiceName,
        [parameter(mandatory=$False,HelpMessage='True indicates that the certificate will be created in verified state and proof of possession will not be required.)')]
        [bool]
        $isVerified,
        [parameter(mandatory=$False,HelpMessage='The name of the certificate create or update.)')]
        [string]
        $certificateName,
        [parameter(mandatory=$False,HelpMessage='Base-64 representation of the X509 leaf certificate .cer file or just .pem file content.)')]
        [string]
        $certificate,
        [parameter(mandatory=$False,HelpMessage='Resource group identifier.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["provisioningServiceName"] = $provisioningServiceName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $actionsRequired
    [string] $description
    [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
    [string] $status
}
function New-AzureNativeTypeDevicesPrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='Actions required for a private endpoint connection)')]
        [string]
        $actionsRequired,
        [parameter(mandatory=$False,HelpMessage='The description for the current state of a private endpoint connection)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The status of a private endpoint connection)')]
        [string]
        [ValidateSet('Pending', 'Approved', 'Rejected', 'Disconnected')]
        $status
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
class PrivateEndpointConnectionProperties
{
    [PrivateLinkServiceConnectionState] $privateLinkServiceConnectionState
}
function New-AzureNativeTypeDevicesPrivateEndpointConnectionProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The current state of a private endpoint connection)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState
    )

    process
    {
        return $([PrivateEndpointConnectionProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevicesIotDpsResourcePrivateEndpointConnection
{
    [Alias('azure_native_devices_iotdpsresourceprivateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the provisioning service.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The properties of a private endpoint connection)')]
        [PrivateEndpointConnectionProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the provisioning service.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevicesPrivateEndpointConnection
{
    [Alias('azure_native_devices_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The properties of a private endpoint connection)')]
        [PrivateEndpointConnectionProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class CertificateProperties
{
    [string] $certificate
}
function New-AzureNativeTypeDevicesCertificateProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The certificate content)')]
        [string]
        $certificate
    )

    process
    {
        return $([CertificateProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevicesCertificate
{
    [Alias('azure_native_devices_certificate')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='The description of an X509 CA Certificate.)')]
        [CertificateProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the certificate)')]
        [string]
        $certificateName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["resourceName"] = $resourceName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateEndpointConnection
{
    [PrivateEndpointConnectionProperties] $properties
}
function New-AzureNativeTypeDevicesPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The properties of a private endpoint connection)')]
        [PrivateEndpointConnectionProperties]
        $properties
    )

    process
    {
        return $([PrivateEndpointConnection]$PSBoundParameters)
    }
}
class TargetIpFilterRule
{
    [ArgumentCompletions('all', 'serviceApi', 'deviceApi')]
    [object] $target
    [ArgumentCompletions('Accept', 'Reject')]
    [object] $action
    [string] $ipMask
    [string] $filterName
}
function New-AzureNativeTypeDevicesTargetIpFilterRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Target for requests captured by this rule.)')]
        $target,
        [parameter(mandatory=$False,HelpMessage='The desired action for requests captured by this rule.)')]
        $action,
        [parameter(mandatory=$False,HelpMessage='A string that contains the IP address range in CIDR notation for the rule.)')]
        [string]
        $ipMask,
        [parameter(mandatory=$False,HelpMessage='The name of the IP filter rule.)')]
        [string]
        $filterName
    )

    process
    {
        return $([TargetIpFilterRule]$PSBoundParameters)
    }
}
class SharedAccessSignatureAuthorizationRuleAccessRightsDescription
{
    [string] $keyName
    [ArgumentCompletions('ServiceConfig', 'EnrollmentRead', 'EnrollmentWrite', 'DeviceConnect', 'RegistrationStatusRead', 'RegistrationStatusWrite')]
    [string] $rights
    [string] $secondaryKey
    [string] $primaryKey
}
function New-AzureNativeTypeDevicesSharedAccessSignatureAuthorizationRuleAccessRightsDescription
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the key.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='Rights that this key has.)')]
        [string]
        [ValidateSet('ServiceConfig', 'EnrollmentRead', 'EnrollmentWrite', 'DeviceConnect', 'RegistrationStatusRead', 'RegistrationStatusWrite')]
        $rights,
        [parameter(mandatory=$False,HelpMessage='Secondary SAS key value.)')]
        [string]
        $secondaryKey,
        [parameter(mandatory=$False,HelpMessage='Primary SAS key value.)')]
        [string]
        $primaryKey
    )

    process
    {
        return $([SharedAccessSignatureAuthorizationRuleAccessRightsDescription]$PSBoundParameters)
    }
}
class IotHubDefinitionDescription
{
    [string] $location
    [string] $connectionString
    [int] $allocationWeight
    [bool] $applyAllocationPolicy
}
function New-AzureNativeTypeDevicesIotHubDefinitionDescription
{
    param (
        [parameter(mandatory=$False,HelpMessage='ARM region of the IoT hub.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Connection string of the IoT hub.)')]
        [string]
        $connectionString,
        [parameter(mandatory=$False,HelpMessage='weight to apply for a given iot h.)')]
        [int]
        $allocationWeight,
        [parameter(mandatory=$False,HelpMessage='flag for applying allocationPolicy or not for a given iot hub.)')]
        [bool]
        $applyAllocationPolicy
    )

    process
    {
        return $([IotHubDefinitionDescription]$PSBoundParameters)
    }
}
class IotDpsPropertiesDescription
{
    [string] $provisioningState
    [ArgumentCompletions('Hashed', 'GeoLatency', 'Static')]
    [string] $allocationPolicy
    [ArgumentCompletions('Activating', 'Active', 'Deleting', 'Deleted', 'ActivationFailed', 'DeletionFailed', 'Transitioning', 'Suspending', 'Suspended', 'Resuming', 'FailingOver', 'FailoverFailed')]
    [string] $state
    [PrivateEndpointConnection[]] $privateEndpointConnections
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $publicNetworkAccess
    [TargetIpFilterRule[]] $ipFilterRules
    [SharedAccessSignatureAuthorizationRuleAccessRightsDescription[]] $authorizationPolicies
    [IotHubDefinitionDescription[]] $iotHubs
}
function New-AzureNativeTypeDevicesIotDpsPropertiesDescription
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ARM provisioning state of the provisioning service.)')]
        [string]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='Allocation policy to be used by this provisioning service.)')]
        [string]
        [ValidateSet('Hashed', 'GeoLatency', 'Static')]
        $allocationPolicy,
        [parameter(mandatory=$False,HelpMessage='Current state of the provisioning service.)')]
        [string]
        [ValidateSet('Activating', 'Active', 'Deleting', 'Deleted', 'ActivationFailed', 'DeletionFailed', 'Transitioning', 'Suspending', 'Suspended', 'Resuming', 'FailingOver', 'FailoverFailed')]
        $state,
        [parameter(mandatory=$False,HelpMessage='Private endpoint connections created on this IotHub)')]
        $privateEndpointConnections,
        [parameter(mandatory=$False,HelpMessage='Whether requests from Public Network are allowed)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $publicNetworkAccess,
        [parameter(mandatory=$False,HelpMessage='The IP filter rules.)')]
        $ipFilterRules,
        [parameter(mandatory=$False,HelpMessage='List of authorization keys for a provisioning service.)')]
        $authorizationPolicies,
        [parameter(mandatory=$False,HelpMessage='List of IoT hubs associated with this provisioning service.)')]
        $iotHubs
    )

    process
    {
        return $([IotDpsPropertiesDescription]$PSBoundParameters)
    }
}
class IotDpsSkuInfo
{
    [int] $capacity
    [ArgumentCompletions('S1')]
    [string] $name
}
function New-AzureNativeTypeDevicesIotDpsSkuInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of units to provision)')]
        [int]
        $capacity,
        [parameter(mandatory=$False,HelpMessage='Sku name.)')]
        [string]
        [ValidateSet('S1')]
        $name
    )

    process
    {
        return $([IotDpsSkuInfo]$PSBoundParameters)
    }
}
function New-AzureNativeDevicesIotDpsResource
{
    [Alias('azure_native_devices_iotdpsresource')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of provisioning service to create or update.)')]
        [string]
        $provisioningServiceName,
        [parameter(mandatory=$False,HelpMessage='The resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Service specific properties for a provisioning service)')]
        [IotDpsPropertiesDescription]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Resource group identifier.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Sku info for a provisioning Service.)')]
        [IotDpsSkuInfo]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["sku"] = $sku

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class IpFilterRule
{
    [ArgumentCompletions('Accept', 'Reject')]
    [object] $action
    [string] $ipMask
    [string] $filterName
}
function New-AzureNativeTypeDevicesIpFilterRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The desired action for requests captured by this rule.)')]
        $action,
        [parameter(mandatory=$False,HelpMessage='A string that contains the IP address range in CIDR notation for the rule.)')]
        [string]
        $ipMask,
        [parameter(mandatory=$False,HelpMessage='The name of the IP filter rule.)')]
        [string]
        $filterName
    )

    process
    {
        return $([IpFilterRule]$PSBoundParameters)
    }
}
class FeedbackProperties
{
    [int] $maxDeliveryCount
    [string] $lockDurationAsIso8601
    [string] $ttlAsIso8601
}
function New-AzureNativeTypeDevicesFeedbackProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of times the IoT hub attempts to deliver a message on the feedback queue. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.)')]
        [int]
        $maxDeliveryCount,
        [parameter(mandatory=$False,HelpMessage='The lock duration for the feedback queue. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.)')]
        [string]
        $lockDurationAsIso8601,
        [parameter(mandatory=$False,HelpMessage='The period of time for which a message is available to consume before it is expired by the IoT hub. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.)')]
        [string]
        $ttlAsIso8601
    )

    process
    {
        return $([FeedbackProperties]$PSBoundParameters)
    }
}
class CloudToDeviceProperties
{
    [int] $maxDeliveryCount
    [FeedbackProperties] $feedback
    [string] $defaultTtlAsIso8601
}
function New-AzureNativeTypeDevicesCloudToDeviceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The max delivery count for cloud-to-device messages in the device queue. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.)')]
        [int]
        $maxDeliveryCount,
        [parameter(mandatory=$False,HelpMessage='The properties of the feedback queue for cloud-to-device messages.)')]
        [FeedbackProperties]
        $feedback,
        [parameter(mandatory=$False,HelpMessage='The default time to live for cloud-to-device messages in the device queue. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.)')]
        [string]
        $defaultTtlAsIso8601
    )

    process
    {
        return $([CloudToDeviceProperties]$PSBoundParameters)
    }
}
class NetworkRuleSetIpRule
{
    [ArgumentCompletions('Allow')]
    [string] $action
    [string] $ipMask
    [string] $filterName
}
function New-AzureNativeTypeDevicesNetworkRuleSetIpRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='IP Filter Action)')]
        [string]
        [ValidateSet('Allow')]
        $action,
        [parameter(mandatory=$False,HelpMessage='A string that contains the IP address range in CIDR notation for the rule.)')]
        [string]
        $ipMask,
        [parameter(mandatory=$False,HelpMessage='Name of the IP filter rule.)')]
        [string]
        $filterName
    )

    process
    {
        return $([NetworkRuleSetIpRule]$PSBoundParameters)
    }
}
class NetworkRuleSetProperties
{
    [NetworkRuleSetIpRule[]] $ipRules
    [ArgumentCompletions('Deny', 'Allow')]
    [string] $defaultAction
    [bool] $applyToBuiltInEventHubEndpoint
}
function New-AzureNativeTypeDevicesNetworkRuleSetProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of IP Rules)')]
        $ipRules,
        [parameter(mandatory=$False,HelpMessage='Default Action for Network Rule Set)')]
        [string]
        [ValidateSet('Deny', 'Allow')]
        $defaultAction,
        [parameter(mandatory=$False,HelpMessage='If True, then Network Rule Set is also applied to BuiltIn EventHub EndPoint of IotHub)')]
        [bool]
        $applyToBuiltInEventHubEndpoint
    )

    process
    {
        return $([NetworkRuleSetProperties]$PSBoundParameters)
    }
}
class EnrichmentProperties
{
    [string] $value
    [string] $key
    [string[]] $endpointNames
}
function New-AzureNativeTypeDevicesEnrichmentProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The value for the enrichment property.)')]
        [string]
        $value,
        [parameter(mandatory=$False,HelpMessage='The key or name for the enrichment property.)')]
        [string]
        $key,
        [parameter(mandatory=$False,HelpMessage='The list of endpoints for which the enrichment is applied to the message.)')]
        [string[]]
        $endpointNames
    )

    process
    {
        return $([EnrichmentProperties]$PSBoundParameters)
    }
}
class RouteProperties
{
    [string] $name
    [string] $condition
    [bool] $isEnabled
    [string[]] $endpointNames
    [ArgumentCompletions('Invalid', 'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents', 'DeviceJobLifecycleEvents')]
    [string] $source
}
function New-AzureNativeTypeDevicesRouteProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the route. The name can only include alphanumeric characters, periods, underscores, hyphens, has a maximum length of 64 characters, and must be unique.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The condition that is evaluated to apply the routing rule. If no condition is provided, it evaluates to true by default. For grammar, see: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language)')]
        [string]
        $condition,
        [parameter(mandatory=$False,HelpMessage='Used to specify whether a route is enabled.)')]
        [bool]
        $isEnabled,
        [parameter(mandatory=$False,HelpMessage='The list of endpoints to which messages that satisfy the condition are routed. Currently only one endpoint is allowed.)')]
        [string[]]
        $endpointNames,
        [parameter(mandatory=$False,HelpMessage='The source that the routing rule is to be applied to, such as DeviceMessages.)')]
        [string]
        [ValidateSet('Invalid', 'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents', 'DeviceJobLifecycleEvents')]
        $source
    )

    process
    {
        return $([RouteProperties]$PSBoundParameters)
    }
}
class RoutingStorageContainerProperties
{
    [string] $resourceGroup
    [string] $id
    [int] $maxChunkSizeInBytes
    [string] $endpointUri
    [string] $name
    [string] $containerName
    [ArgumentCompletions('keyBased', 'identityBased')]
    [string] $authenticationType
    [int] $batchFrequencyInSeconds
    [string] $fileNameFormat
    [string] $encoding
    [string] $subscriptionId
    [string] $connectionString
}
function New-AzureNativeTypeDevicesRoutingStorageContainerProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group of the storage account.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Id of the storage container endpoint)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Maximum number of bytes for each blob written to storage. Value should be between 10485760(10MB) and 524288000(500MB). Default value is 314572800(300MB).)')]
        [int]
        $maxChunkSizeInBytes,
        [parameter(mandatory=$False,HelpMessage='The url of the storage endpoint. It must include the protocol https://)')]
        [string]
        $endpointUri,
        [parameter(mandatory=$False,HelpMessage='The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores, hyphens and has a maximum length of 64 characters. The following names are reserved: events, fileNotifications, $default. Endpoint names must be unique across endpoint types.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of storage container in the storage account.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='Method used to authenticate against the storage endpoint)')]
        [string]
        [ValidateSet('keyBased', 'identityBased')]
        $authenticationType,
        [parameter(mandatory=$False,HelpMessage='Time interval at which blobs are written to storage. Value should be between 60 and 720 seconds. Default value is 300 seconds.)')]
        [int]
        $batchFrequencyInSeconds,
        [parameter(mandatory=$False,HelpMessage='File name format for the blob. Default format is {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All parameters are mandatory but can be reordered.)')]
        [string]
        $fileNameFormat,
        [parameter(mandatory=$False,HelpMessage='Encoding that is used to serialize messages to blobs. Supported values are ''avro'', ''avrodeflate'', and ''JSON''. Default value is ''avro''.)')]
        [string]
        $encoding,
        [parameter(mandatory=$False,HelpMessage='The subscription identifier of the storage account.)')]
        [string]
        $subscriptionId,
        [parameter(mandatory=$False,HelpMessage='The connection string of the storage account.)')]
        [string]
        $connectionString
    )

    process
    {
        return $([RoutingStorageContainerProperties]$PSBoundParameters)
    }
}
class RoutingServiceBusQueueEndpointProperties
{
    [string] $endpointUri
    [string] $resourceGroup
    [string] $id
    [string] $name
    [ArgumentCompletions('keyBased', 'identityBased')]
    [string] $authenticationType
    [string] $subscriptionId
    [string] $connectionString
    [string] $entityPath
}
function New-AzureNativeTypeDevicesRoutingServiceBusQueueEndpointProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The url of the service bus queue endpoint. It must include the protocol sb://)')]
        [string]
        $endpointUri,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group of the service bus queue endpoint.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Id of the service bus queue endpoint)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores, hyphens and has a maximum length of 64 characters. The following names are reserved: events, fileNotifications, $default. Endpoint names must be unique across endpoint types. The name need not be the same as the actual queue name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Method used to authenticate against the service bus queue endpoint)')]
        [string]
        [ValidateSet('keyBased', 'identityBased')]
        $authenticationType,
        [parameter(mandatory=$False,HelpMessage='The subscription identifier of the service bus queue endpoint.)')]
        [string]
        $subscriptionId,
        [parameter(mandatory=$False,HelpMessage='The connection string of the service bus queue endpoint.)')]
        [string]
        $connectionString,
        [parameter(mandatory=$False,HelpMessage='Queue name on the service bus namespace)')]
        [string]
        $entityPath
    )

    process
    {
        return $([RoutingServiceBusQueueEndpointProperties]$PSBoundParameters)
    }
}
class RoutingEventHubProperties
{
    [string] $endpointUri
    [string] $resourceGroup
    [string] $id
    [string] $name
    [ArgumentCompletions('keyBased', 'identityBased')]
    [string] $authenticationType
    [string] $subscriptionId
    [string] $connectionString
    [string] $entityPath
}
function New-AzureNativeTypeDevicesRoutingEventHubProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The url of the event hub endpoint. It must include the protocol sb://)')]
        [string]
        $endpointUri,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group of the event hub endpoint.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Id of the event hub endpoint)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores, hyphens and has a maximum length of 64 characters. The following names are reserved: events, fileNotifications, $default. Endpoint names must be unique across endpoint types.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Method used to authenticate against the event hub endpoint)')]
        [string]
        [ValidateSet('keyBased', 'identityBased')]
        $authenticationType,
        [parameter(mandatory=$False,HelpMessage='The subscription identifier of the event hub endpoint.)')]
        [string]
        $subscriptionId,
        [parameter(mandatory=$False,HelpMessage='The connection string of the event hub endpoint. )')]
        [string]
        $connectionString,
        [parameter(mandatory=$False,HelpMessage='Event hub name on the event hub namespace)')]
        [string]
        $entityPath
    )

    process
    {
        return $([RoutingEventHubProperties]$PSBoundParameters)
    }
}
class RoutingServiceBusTopicEndpointProperties
{
    [string] $endpointUri
    [string] $resourceGroup
    [string] $id
    [string] $name
    [ArgumentCompletions('keyBased', 'identityBased')]
    [string] $authenticationType
    [string] $subscriptionId
    [string] $connectionString
    [string] $entityPath
}
function New-AzureNativeTypeDevicesRoutingServiceBusTopicEndpointProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The url of the service bus topic endpoint. It must include the protocol sb://)')]
        [string]
        $endpointUri,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group of the service bus topic endpoint.)')]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Id of the service bus topic endpoint)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores, hyphens and has a maximum length of 64 characters. The following names are reserved: events, fileNotifications, $default. Endpoint names must be unique across endpoint types. The name need not be the same as the actual topic name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Method used to authenticate against the service bus topic endpoint)')]
        [string]
        [ValidateSet('keyBased', 'identityBased')]
        $authenticationType,
        [parameter(mandatory=$False,HelpMessage='The subscription identifier of the service bus topic endpoint.)')]
        [string]
        $subscriptionId,
        [parameter(mandatory=$False,HelpMessage='The connection string of the service bus topic endpoint.)')]
        [string]
        $connectionString,
        [parameter(mandatory=$False,HelpMessage='Queue name on the service bus topic)')]
        [string]
        $entityPath
    )

    process
    {
        return $([RoutingServiceBusTopicEndpointProperties]$PSBoundParameters)
    }
}
class RoutingEndpoints
{
    [RoutingStorageContainerProperties[]] $storageContainers
    [RoutingServiceBusQueueEndpointProperties[]] $serviceBusQueues
    [RoutingEventHubProperties[]] $eventHubs
    [RoutingServiceBusTopicEndpointProperties[]] $serviceBusTopics
}
function New-AzureNativeTypeDevicesRoutingEndpoints
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of storage container endpoints that IoT hub routes messages to, based on the routing rules.)')]
        $storageContainers,
        [parameter(mandatory=$False,HelpMessage='The list of Service Bus queue endpoints that IoT hub routes the messages to, based on the routing rules.)')]
        $serviceBusQueues,
        [parameter(mandatory=$False,HelpMessage='The list of Event Hubs endpoints that IoT hub routes messages to, based on the routing rules. This list does not include the built-in Event Hubs endpoint.)')]
        $eventHubs,
        [parameter(mandatory=$False,HelpMessage='The list of Service Bus topic endpoints that the IoT hub routes the messages to, based on the routing rules.)')]
        $serviceBusTopics
    )

    process
    {
        return $([RoutingEndpoints]$PSBoundParameters)
    }
}
class FallbackRouteProperties
{
    [string] $name
    [string] $condition
    [bool] $isEnabled
    [string[]] $endpointNames
    [ArgumentCompletions('Invalid', 'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents', 'DeviceJobLifecycleEvents')]
    [string] $source
}
function New-AzureNativeTypeDevicesFallbackRouteProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the route. The name can only include alphanumeric characters, periods, underscores, hyphens, has a maximum length of 64 characters, and must be unique.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The condition which is evaluated in order to apply the fallback route. If the condition is not provided it will evaluate to true by default. For grammar, See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language)')]
        [string]
        $condition,
        [parameter(mandatory=$False,HelpMessage='Used to specify whether the fallback route is enabled.)')]
        [bool]
        $isEnabled,
        [parameter(mandatory=$False,HelpMessage='The list of endpoints to which the messages that satisfy the condition are routed to. Currently only 1 endpoint is allowed.)')]
        [string[]]
        $endpointNames,
        [parameter(mandatory=$False,HelpMessage='The source to which the routing rule is to be applied to. For example, DeviceMessages)')]
        [string]
        [ValidateSet('Invalid', 'DeviceMessages', 'TwinChangeEvents', 'DeviceLifecycleEvents', 'DeviceJobLifecycleEvents')]
        $source
    )

    process
    {
        return $([FallbackRouteProperties]$PSBoundParameters)
    }
}
class RoutingProperties
{
    [EnrichmentProperties[]] $enrichments
    [RouteProperties[]] $routes
    [RoutingEndpoints] $endpoints
    [FallbackRouteProperties] $fallbackRoute
}
function New-AzureNativeTypeDevicesRoutingProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of user-provided enrichments that the IoT hub applies to messages to be delivered to built-in and custom endpoints. See: https://aka.ms/telemetryoneventgrid)')]
        $enrichments,
        [parameter(mandatory=$False,HelpMessage='The list of user-provided routing rules that the IoT hub uses to route messages to built-in and custom endpoints. A maximum of 100 routing rules are allowed for paid hubs and a maximum of 5 routing rules are allowed for free hubs.)')]
        $routes,
        [parameter(mandatory=$False,HelpMessage='The properties related to the custom endpoints to which your IoT hub routes messages based on the routing rules. A maximum of 10 custom endpoints are allowed across all endpoint types for paid hubs and only 1 custom endpoint is allowed across all endpoint types for free hubs.)')]
        [RoutingEndpoints]
        $endpoints,
        [parameter(mandatory=$False,HelpMessage='The properties of the route that is used as a fall-back route when none of the conditions specified in the ''routes'' section are met. This is an optional parameter. When this property is not set, the messages which do not meet any of the conditions specified in the ''routes'' section get routed to the built-in eventhub endpoint.)')]
        [FallbackRouteProperties]
        $fallbackRoute
    )

    process
    {
        return $([RoutingProperties]$PSBoundParameters)
    }
}
class SharedAccessSignatureAuthorizationRule
{
    [string] $keyName
    [ArgumentCompletions('RegistryRead', 'RegistryWrite', 'ServiceConnect', 'DeviceConnect', 'RegistryRead, RegistryWrite', 'RegistryRead, ServiceConnect', 'RegistryRead, DeviceConnect', 'RegistryWrite, ServiceConnect', 'RegistryWrite, DeviceConnect', 'ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite, ServiceConnect', 'RegistryRead, RegistryWrite, DeviceConnect', 'RegistryRead, ServiceConnect, DeviceConnect', 'RegistryWrite, ServiceConnect, DeviceConnect', 'RegistryRead, RegistryWrite, ServiceConnect, DeviceConnect')]
    [object] $rights
    [string] $secondaryKey
    [string] $primaryKey
}
function New-AzureNativeTypeDevicesSharedAccessSignatureAuthorizationRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the shared access policy.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='The permissions assigned to the shared access policy.)')]
        $rights,
        [parameter(mandatory=$False,HelpMessage='The secondary key.)')]
        [string]
        $secondaryKey,
        [parameter(mandatory=$False,HelpMessage='The primary key.)')]
        [string]
        $primaryKey
    )

    process
    {
        return $([SharedAccessSignatureAuthorizationRule]$PSBoundParameters)
    }
}
class IotHubProperties
{
    [object] $messagingEndpoints
    [IpFilterRule[]] $ipFilterRules
    [ArgumentCompletions('None', 'DeviceManagement')]
    [string] $features
    [PrivateEndpointConnection[]] $privateEndpointConnections
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $publicNetworkAccess
    [string] $minTlsVersion
    [bool] $enableFileUploadNotifications
    [CloudToDeviceProperties] $cloudToDevice
    [NetworkRuleSetProperties] $networkRuleSets
    [object] $storageEndpoints
    [string] $comments
    [RoutingProperties] $routing
    [object] $eventHubEndpoints
    [SharedAccessSignatureAuthorizationRule[]] $authorizationPolicies
}
class MessagingEndpointProperties
{
    [int] $maxDeliveryCount
    [string] $lockDurationAsIso8601
    [string] $ttlAsIso8601
}
function New-AzureNativeTypeDevicesMessagingEndpointProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of times the IoT hub attempts to deliver a message. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.)')]
        [int]
        $maxDeliveryCount,
        [parameter(mandatory=$False,HelpMessage='The lock duration. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.)')]
        [string]
        $lockDurationAsIso8601,
        [parameter(mandatory=$False,HelpMessage='The period of time for which a message is available to consume before it is expired by the IoT hub. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.)')]
        [string]
        $ttlAsIso8601
    )

    process
    {
        return $([MessagingEndpointProperties]$PSBoundParameters)
    }
}
class StorageEndpointProperties
{
    [ArgumentCompletions('keyBased', 'identityBased')]
    [string] $authenticationType
    [string] $containerName
    [string] $connectionString
    [string] $sasTtlAsIso8601
}
function New-AzureNativeTypeDevicesStorageEndpointProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies authentication type being used for connecting to the storage account.)')]
        [string]
        [ValidateSet('keyBased', 'identityBased')]
        $authenticationType,
        [parameter(mandatory=$False,HelpMessage='The name of the root container where you upload files. The container need not exist but should be creatable using the connectionString specified.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The connection string for the Azure Storage account to which files are uploaded.)')]
        [string]
        $connectionString,
        [parameter(mandatory=$False,HelpMessage='The period of time for which the SAS URI generated by IoT Hub for file upload is valid. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.)')]
        [string]
        $sasTtlAsIso8601
    )

    process
    {
        return $([StorageEndpointProperties]$PSBoundParameters)
    }
}
class EventHubProperties
{
    [int] $retentionTimeInDays
    [int] $partitionCount
}
function New-AzureNativeTypeDevicesEventHubProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The retention time for device-to-cloud messages in days. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages)')]
        [int]
        $retentionTimeInDays,
        [parameter(mandatory=$False,HelpMessage='The number of partitions for receiving device-to-cloud messages in the Event Hub-compatible endpoint. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.)')]
        [int]
        $partitionCount
    )

    process
    {
        return $([EventHubProperties]$PSBoundParameters)
    }
}
function New-AzureNativeTypeDevicesIotHubProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The messaging endpoint properties for the file upload notification queue.)')]
        [MessagingEndpointProperties]
        $messagingEndpoints,
        [parameter(mandatory=$False,HelpMessage='The IP filter rules.)')]
        $ipFilterRules,
        [parameter(mandatory=$False,HelpMessage='The capabilities and features enabled for the IoT hub.)')]
        [string]
        [ValidateSet('None', 'DeviceManagement')]
        $features,
        [parameter(mandatory=$False,HelpMessage='Private endpoint connections created on this IotHub)')]
        $privateEndpointConnections,
        [parameter(mandatory=$False,HelpMessage='Whether requests from Public Network are allowed)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $publicNetworkAccess,
        [parameter(mandatory=$False,HelpMessage='Specifies the minimum TLS version to support for this hub. Can be set to "1.2" to have clients that use a TLS version below 1.2 to be rejected.)')]
        [string]
        $minTlsVersion,
        [parameter(mandatory=$False,HelpMessage='If True, file upload notifications are enabled.)')]
        [bool]
        $enableFileUploadNotifications,
        [parameter(mandatory=$False,HelpMessage='The IoT hub cloud-to-device messaging properties.)')]
        [CloudToDeviceProperties]
        $cloudToDevice,
        [parameter(mandatory=$False,HelpMessage='Network Rule Set Properties of IotHub)')]
        [NetworkRuleSetProperties]
        $networkRuleSets,
        [parameter(mandatory=$False,HelpMessage='The list of Azure Storage endpoints where you can upload files. Currently you can configure only one Azure Storage account and that MUST have its key as $default. Specifying more than one storage account causes an error to be thrown. Not specifying a value for this property when the enableFileUploadNotifications property is set to True, causes an error to be thrown.)')]
        [StorageEndpointProperties]
        $storageEndpoints,
        [parameter(mandatory=$False,HelpMessage='IoT hub comments.)')]
        [string]
        $comments,
        [parameter(mandatory=$False,HelpMessage='The routing related properties of the IoT hub. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging)')]
        [RoutingProperties]
        $routing,
        [parameter(mandatory=$False,HelpMessage='The Event Hub-compatible endpoint properties. The only possible keys to this dictionary is events. This key has to be present in the dictionary while making create or update calls for the IoT hub.)')]
        [EventHubProperties]
        $eventHubEndpoints,
        [parameter(mandatory=$False,HelpMessage='The shared access policies you can use to secure a connection to the IoT hub.)')]
        $authorizationPolicies
    )

    process
    {
        return $([IotHubProperties]$PSBoundParameters)
    }
}
class IotHubSkuInfo
{
    [int] $capacity
    [ArgumentCompletions('F1', 'S1', 'S2', 'S3', 'B1', 'B2', 'B3')]
    [string] $name
}
function New-AzureNativeTypeDevicesIotHubSkuInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of provisioned IoT Hub units. See: https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.)')]
        [int]
        $capacity,
        [parameter(mandatory=$False,HelpMessage='The name of the SKU.)')]
        [string]
        [ValidateSet('F1', 'S1', 'S2', 'S3', 'B1', 'B2', 'B3')]
        $name
    )

    process
    {
        return $([IotHubSkuInfo]$PSBoundParameters)
    }
}
function New-AzureNativeDevicesIotHubResource
{
    [Alias('azure_native_devices_iothubresource')]
    param (
        [parameter(mandatory=$False,HelpMessage='The resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the IoT hub.)')]
        [string]
        $resourceName,
        [parameter(mandatory=$False,HelpMessage='IotHub properties)')]
        [IotHubProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group that contains the IoT hub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='IotHub SKU info)')]
        [IotHubSkuInfo]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["sku"] = $sku

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

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

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

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

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