pspulumiyaml.azurenative.hybridnetwork.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionHybridnetworkListVendorSkusCredential
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName,
        [parameter(mandatory=$False,HelpMessage='The name of the sku.)')]
        [string]
        $skuName
    )

    process
    {
        $arguments = @{}
        $arguments["skuName"] = $skuName
        $arguments["vendorName"] = $vendorName

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:listVendorSkusCredential -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHybridnetworkGetVendor
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:getVendor -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHybridnetworkListDeviceRegistrationKey
{
    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 device resource.)')]
        [string]
        $deviceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:listDeviceRegistrationKey -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHybridnetworkGetDevice
{
    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 device resource.)')]
        [string]
        $deviceName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:getDevice -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHybridnetworkGetVendorSkuPreview
{
    param (
        [parameter(mandatory=$False,HelpMessage='Preview subscription ID.)')]
        [string]
        $previewSubscription,
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName,
        [parameter(mandatory=$False,HelpMessage='The name of the vendor sku.)')]
        [string]
        $skuName
    )

    process
    {
        $arguments = @{}
        $arguments["previewSubscription"] = $previewSubscription
        $arguments["skuName"] = $skuName
        $arguments["vendorName"] = $vendorName

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:getVendorSkuPreview -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHybridnetworkGetVendorSkus
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName,
        [parameter(mandatory=$False,HelpMessage='The name of the sku.)')]
        [string]
        $skuName
    )

    process
    {
        $arguments = @{}
        $arguments["skuName"] = $skuName
        $arguments["vendorName"] = $vendorName

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:getVendorSkus -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionHybridnetworkGetNetworkFunction
{
    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 network function resource.)')]
        [string]
        $networkFunctionName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:hybridnetwork:getNetworkFunction -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function New-AzureNativeHybridnetworkVendor
{
    [Alias('azure_native_hybridnetwork_vendor')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName,
        [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:hybridnetwork:Vendor")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeHybridnetworkDevice
{
    [Alias('azure_native_hybridnetwork_device')]
    param (
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource name for the device resource.)')]
        [string]
        $deviceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The type of the device.)')]
        [string]
        [ArgumentCompletions('Unknown', 'AzureStackEdge')]
        $deviceType,
        [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:hybridnetwork:Device")

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class SubResource
{
    [string] $id
}
function New-AzureNativeTypeHybridnetworkSubResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([SubResource]$PSBoundParameters)
    }
}
function New-AzureNativeHybridnetworkNetworkFunction
{
    [Alias('azure_native_hybridnetwork_networkfunction')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The network function configurations from the user.)')]
        $networkFunctionUserConfigurations,
        [parameter(mandatory=$False,HelpMessage='The sku name for the network function.)')]
        [string]
        $skuName,
        [parameter(mandatory=$False,HelpMessage='Resource name for the network function resource.)')]
        [string]
        $networkFunctionName,
        [parameter(mandatory=$False,HelpMessage='The vendor name for the network function.)')]
        [string]
        $vendorName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The reference to the device resource.)')]
        [SubResource]
        $device,
        [parameter(mandatory=$False,HelpMessage='The parameters for the managed application.)')]
        $managedApplicationParameters,
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives)')]
        [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:hybridnetwork:NetworkFunction")

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeHybridnetworkVendorSkuPreview
{
    [Alias('azure_native_hybridnetwork_vendorskupreview')]
    param (
        [parameter(mandatory=$False,HelpMessage='Preview subscription ID.)')]
        [string]
        $previewSubscription,
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName,
        [parameter(mandatory=$False,HelpMessage='The name of the vendor sku.)')]
        [string]
        $skuName,
        [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:hybridnetwork:VendorSkuPreview")

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class DataDisk
{
    [ArgumentCompletions('Unknown', 'Empty')]
    [string] $createOption
    [string] $name
    [int] $diskSizeGB
}
function New-AzureNativeTypeHybridnetworkDataDisk
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies how the virtual machine should be created.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Empty')]
        $createOption,
        [parameter(mandatory=$False,HelpMessage='The name of data disk.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Specifies the size of an empty disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.)')]
        [int]
        $diskSizeGB
    )

    process
    {
        return $([DataDisk]$PSBoundParameters)
    }
}
class VirtualHardDisk
{
    [string] $uri
}
function New-AzureNativeTypeHybridnetworkVirtualHardDisk
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the virtual hard disk''s uri.)')]
        [string]
        $uri
    )

    process
    {
        return $([VirtualHardDisk]$PSBoundParameters)
    }
}
class OsDisk
{
    [int] $diskSizeGB
    [string] $name
    [VirtualHardDisk] $vhd
    [ArgumentCompletions('Unknown', 'Windows', 'Linux')]
    [string] $osType
}
function New-AzureNativeTypeHybridnetworkOsDisk
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the size of os disk in gigabytes. This is the fully expanded disk size needed of the VHD image on the ASE. This disk size should be greater than the size of the VHD provided in vhdUri.)')]
        [int]
        $diskSizeGB,
        [parameter(mandatory=$False,HelpMessage='The VHD name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The virtual hard disk.)')]
        [VirtualHardDisk]
        $vhd,
        [parameter(mandatory=$False,HelpMessage='The OS type.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Windows', 'Linux')]
        $osType
    )

    process
    {
        return $([OsDisk]$PSBoundParameters)
    }
}
class ImageReference
{
    [string] $offer
    [string] $version
    [string] $publisher
    [string] $exactVersion
    [string] $sku
}
function New-AzureNativeTypeHybridnetworkImageReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the offer of the image used to create the virtual machine.)')]
        [string]
        $offer,
        [parameter(mandatory=$False,HelpMessage='Specifies the version of the image used to create the virtual machine. The allowed formats are Major.Minor.Build or ''latest''. Major, Minor, and Build are decimal numbers. Specify ''latest'' to use the latest version of an image available at deploy time. Even if you use ''latest'', the VM image will not automatically update after deploy time even if a new version becomes available.)')]
        [string]
        $version,
        [parameter(mandatory=$False,HelpMessage='The image publisher.)')]
        [string]
        $publisher,
        [parameter(mandatory=$False,HelpMessage='Specifies in decimal numbers, the exact version of image used to create the virtual machine.)')]
        [string]
        $exactVersion,
        [parameter(mandatory=$False,HelpMessage='The image SKU.)')]
        [string]
        $sku
    )

    process
    {
        return $([ImageReference]$PSBoundParameters)
    }
}
class StorageProfile
{
    [DataDisk[]] $dataDisks
    [OsDisk] $osDisk
    [ImageReference] $imageReference
}
function New-AzureNativeTypeHybridnetworkStorageProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the parameters that are used to add a data disk to a virtual machine.)')]
        $dataDisks,
        [parameter(mandatory=$False,HelpMessage='Specifies information about the operating system disk used by the virtual machine.)')]
        [OsDisk]
        $osDisk,
        [parameter(mandatory=$False,HelpMessage='The image reference properties.)')]
        [ImageReference]
        $imageReference
    )

    process
    {
        return $([StorageProfile]$PSBoundParameters)
    }
}
class CustomProfile
{
    [string] $metadataConfigurationPath
}
function New-AzureNativeTypeHybridnetworkCustomProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Path for metadata configuration.)')]
        [string]
        $metadataConfigurationPath
    )

    process
    {
        return $([CustomProfile]$PSBoundParameters)
    }
}
class NetworkInterfaceIPConfiguration
{
    [string] $gateway
    [string] $ipAddress
    [ArgumentCompletions('Unknown', 'IPv4')]
    [string] $ipVersion
    [string[]] $dnsServers
    [ArgumentCompletions('Unknown', 'Static', 'Dynamic')]
    [string] $ipAllocationMethod
    [string] $subnet
}
function New-AzureNativeTypeHybridnetworkNetworkInterfaceIPConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The value of the gateway.)')]
        [string]
        $gateway,
        [parameter(mandatory=$False,HelpMessage='The value of the IP address.)')]
        [string]
        $ipAddress,
        [parameter(mandatory=$False,HelpMessage='IP address version.)')]
        [string]
        [ArgumentCompletions('Unknown', 'IPv4')]
        $ipVersion,
        [parameter(mandatory=$False,HelpMessage='The list of DNS servers IP addresses.)')]
        [string[]]
        $dnsServers,
        [parameter(mandatory=$False,HelpMessage='IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Static', 'Dynamic')]
        $ipAllocationMethod,
        [parameter(mandatory=$False,HelpMessage='The value of the subnet.)')]
        [string]
        $subnet
    )

    process
    {
        return $([NetworkInterfaceIPConfiguration]$PSBoundParameters)
    }
}
class NetworkInterface
{
    [NetworkInterfaceIPConfiguration[]] $ipConfigurations
    [string] $networkInterfaceName
    [ArgumentCompletions('Unknown', 'Management', 'Wan', 'Lan')]
    [string] $vmSwitchType
    [string] $macAddress
}
function New-AzureNativeTypeHybridnetworkNetworkInterface
{
    param (
        [parameter(mandatory=$False,HelpMessage='A list of IP configurations of the network interface.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The name of the network interface.)')]
        [string]
        $networkInterfaceName,
        [parameter(mandatory=$False,HelpMessage='The type of the VM switch.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Management', 'Wan', 'Lan')]
        $vmSwitchType,
        [parameter(mandatory=$False,HelpMessage='The MAC address of the network interface.)')]
        [string]
        $macAddress
    )

    process
    {
        return $([NetworkInterface]$PSBoundParameters)
    }
}
class SshPublicKey
{
    [string] $path
    [string] $keyData
}
function New-AzureNativeTypeHybridnetworkSshPublicKey
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the full path on the created VM where ssh public key is stored. If the file already exists, the specified key is appended to the file. Example: /home/user/.ssh/authorized_keys)')]
        [string]
        $path,
        [parameter(mandatory=$False,HelpMessage='SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. <br><br> For creating ssh keys, see [Create SSH keys on Linux and Mac for Linux VMs in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).)')]
        [string]
        $keyData
    )

    process
    {
        return $([SshPublicKey]$PSBoundParameters)
    }
}
class SshConfiguration
{
    [SshPublicKey[]] $publicKeys
}
function New-AzureNativeTypeHybridnetworkSshConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of SSH public keys used to authenticate with linux based VMs.)')]
        $publicKeys
    )

    process
    {
        return $([SshConfiguration]$PSBoundParameters)
    }
}
class LinuxConfiguration
{
    [SshConfiguration] $ssh
}
function New-AzureNativeTypeHybridnetworkLinuxConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the ssh key configuration for a Linux OS.)')]
        [SshConfiguration]
        $ssh
    )

    process
    {
        return $([LinuxConfiguration]$PSBoundParameters)
    }
}
class OsProfile
{
    [string] $adminUsername
    [string] $customData
    [LinuxConfiguration] $linuxConfiguration
    [bool] $customDataRequired
}
function New-AzureNativeTypeHybridnetworkOsProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the name of the administrator account. <br><br> **Windows-only 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 (Linux):** 1 character <br><br> **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20 characters <br><br><li> For root access to the Linux VM, see [Using root privileges on Linux virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li> For a list of built-in system users on Linux that should not be used in this field, see [Selecting User Names for Linux on Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).)')]
        [string]
        $adminUsername,
        [parameter(mandatory=$False,HelpMessage='Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the virtual machine. The maximum length of the binary array is 65535 bytes. <br><br> **Note: Do not pass any secrets or passwords in customData property** <br><br> This property cannot be updated after the VM is created. <br><br> customData is passed to the VM to be saved as a file. For more information see [Custom Data on Azure VMs](https://azure.microsoft.com/en-us/blog/custom-data-and-cloud-init-on-windows-azure/) <br><br> For using cloud-init for your Linux VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json))')]
        [string]
        $customData,
        [parameter(mandatory=$False,HelpMessage='Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).)')]
        [LinuxConfiguration]
        $linuxConfiguration,
        [parameter(mandatory=$False,HelpMessage='Indicates if custom data is required to deploy this role.)')]
        [bool]
        $customDataRequired
    )

    process
    {
        return $([OsProfile]$PSBoundParameters)
    }
}
class NetworkFunctionRoleConfiguration
{
    [object] $userDataTemplate
    [ArgumentCompletions('Unknown', 'Standard_D1_v2', 'Standard_D2_v2', 'Standard_D3_v2', 'Standard_D4_v2', 'Standard_D5_v2', 'Standard_D11_v2', 'Standard_D12_v2', 'Standard_D13_v2', 'Standard_DS1_v2', 'Standard_DS2_v2', 'Standard_DS3_v2', 'Standard_DS4_v2', 'Standard_DS5_v2', 'Standard_DS11_v2', 'Standard_DS12_v2', 'Standard_DS13_v2', 'Standard_F1', 'Standard_F2', 'Standard_F4', 'Standard_F8', 'Standard_F16', 'Standard_F1s', 'Standard_F2s', 'Standard_F4s', 'Standard_F8s', 'Standard_F16s')]
    [string] $virtualMachineSize
    [StorageProfile] $storageProfile
    [object] $userDataParameters
    [string] $roleName
    [CustomProfile] $customProfile
    [ArgumentCompletions('Unknown', 'VirtualMachine')]
    [string] $roleType
    [NetworkInterface[]] $networkInterfaces
    [OsProfile] $osProfile
}
function New-AzureNativeTypeHybridnetworkNetworkFunctionRoleConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The user data template for customers. This is a json schema template describing the format and data type of user data parameters.)')]
        $userDataTemplate,
        [parameter(mandatory=$False,HelpMessage='The size of the virtual machine.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Standard_D1_v2', 'Standard_D2_v2', 'Standard_D3_v2', 'Standard_D4_v2', 'Standard_D5_v2', 'Standard_D11_v2', 'Standard_D12_v2', 'Standard_D13_v2', 'Standard_DS1_v2', 'Standard_DS2_v2', 'Standard_DS3_v2', 'Standard_DS4_v2', 'Standard_DS5_v2', 'Standard_DS11_v2', 'Standard_DS12_v2', 'Standard_DS13_v2', 'Standard_F1', 'Standard_F2', 'Standard_F4', 'Standard_F8', 'Standard_F16', 'Standard_F1s', 'Standard_F2s', 'Standard_F4s', 'Standard_F8s', 'Standard_F16s')]
        $virtualMachineSize,
        [parameter(mandatory=$False,HelpMessage='Specifies the storage settings for the virtual machine disks.)')]
        [StorageProfile]
        $storageProfile,
        [parameter(mandatory=$False,HelpMessage='The user parameters for customers. The format of user data parameters has to be matched with the provided user data template.)')]
        $userDataParameters,
        [parameter(mandatory=$False,HelpMessage='The name of the network function role.)')]
        [string]
        $roleName,
        [parameter(mandatory=$False,HelpMessage='Specifies the custom settings for the virtual machine.)')]
        [CustomProfile]
        $customProfile,
        [parameter(mandatory=$False,HelpMessage='Role type.)')]
        [string]
        [ArgumentCompletions('Unknown', 'VirtualMachine')]
        $roleType,
        [parameter(mandatory=$False,HelpMessage='The network interface configurations.)')]
        $networkInterfaces,
        [parameter(mandatory=$False,HelpMessage='Specifies the operating system settings for the role instance. This value can be updated during the deployment of network function.)')]
        [OsProfile]
        $osProfile
    )

    process
    {
        return $([NetworkFunctionRoleConfiguration]$PSBoundParameters)
    }
}
class NetworkFunctionTemplate
{
    [NetworkFunctionRoleConfiguration[]] $networkFunctionRoleConfigurations
}
function New-AzureNativeTypeHybridnetworkNetworkFunctionTemplate
{
    param (
        [parameter(mandatory=$False,HelpMessage='An array of network function role definitions.)')]
        $networkFunctionRoleConfigurations
    )

    process
    {
        return $([NetworkFunctionTemplate]$PSBoundParameters)
    }
}
function New-AzureNativeHybridnetworkVendorSkus
{
    [Alias('azure_native_hybridnetwork_vendorskus')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vendor.)')]
        [string]
        $vendorName,
        [parameter(mandatory=$False,HelpMessage='The name of the sku.)')]
        [string]
        $skuName,
        [parameter(mandatory=$False,HelpMessage='The template definition of the network function.)')]
        [NetworkFunctionTemplate]
        $networkFunctionTemplate,
        [parameter(mandatory=$False,HelpMessage='Indicates if the vendor sku is in preview mode.)')]
        [bool]
        $preview,
        [parameter(mandatory=$False,HelpMessage='The sku deployment mode.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Azure', 'PrivateEdgeZone')]
        $deploymentMode,
        [parameter(mandatory=$False,HelpMessage='The template for the managed application deployment.)')]
        $managedApplicationTemplate,
        [parameter(mandatory=$False,HelpMessage='The sku type.)')]
        [string]
        [ArgumentCompletions('Unknown', 'EvolvedPacketCore', 'SDWAN', 'Firewall')]
        $skuType,
        [parameter(mandatory=$False,HelpMessage='The parameters for the managed application to be supplied by the vendor.)')]
        $managedApplicationParameters,
        [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:hybridnetwork:VendorSkus")

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

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

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

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

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

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

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

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

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