pspulumiyaml.azurenative.consumption.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionConsumptionGetBudget
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope associated with budget operations. This includes ''/subscriptions/{subscriptionId}/'' for subscription scope, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''/providers/Microsoft.Management/managementGroups/{managementGroupId}'' for Management Group scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for billingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for invoiceSection scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Budget Name.)')]
        [string]
        $budgetName
    )

    process
    {
        $arguments = @{}
        $arguments["budgetName"] = $budgetName
        $arguments["scope"] = $scope

        $functionObject = Invoke-PulumiFunction -Name azure-native:consumption:getBudget -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class Notification
{
    [string[]] $contactGroups
    [ArgumentCompletions('en-us', 'ja-jp', 'zh-cn', 'de-de', 'es-es', 'fr-fr', 'it-it', 'ko-kr', 'pt-br', 'ru-ru', 'zh-tw', 'cs-cz', 'pl-pl', 'tr-tr', 'da-dk', 'en-gb', 'hu-hu', 'nb-no', 'nl-nl', 'pt-pt', 'sv-se')]
    [string] $locale
    [ArgumentCompletions('Actual')]
    [string] $thresholdType
    [ArgumentCompletions('EqualTo', 'GreaterThan', 'GreaterThanOrEqualTo')]
    [string] $operator
    [string[]] $contactEmails
    [bool] $enabled
    [string[]] $contactRoles
    [int] $threshold
}
function New-AzureNativeTypeConsumptionNotification
{
    param (
        [parameter(mandatory=$False,HelpMessage='Action groups to send the budget notification to when the threshold is exceeded. Must be provided as a fully qualified Azure resource id. Only supported at Subscription or Resource Group scopes.)')]
        [string[]]
        $contactGroups,
        [parameter(mandatory=$False,HelpMessage='Language in which the recipient will receive the notification)')]
        [string]
        [ArgumentCompletions('en-us', 'ja-jp', 'zh-cn', 'de-de', 'es-es', 'fr-fr', 'it-it', 'ko-kr', 'pt-br', 'ru-ru', 'zh-tw', 'cs-cz', 'pl-pl', 'tr-tr', 'da-dk', 'en-gb', 'hu-hu', 'nb-no', 'nl-nl', 'pt-pt', 'sv-se')]
        $locale,
        [parameter(mandatory=$False,HelpMessage='The type of threshold)')]
        [string]
        [ArgumentCompletions('Actual')]
        $thresholdType,
        [parameter(mandatory=$False,HelpMessage='The comparison operator.)')]
        [string]
        [ArgumentCompletions('EqualTo', 'GreaterThan', 'GreaterThanOrEqualTo')]
        $operator,
        [parameter(mandatory=$False,HelpMessage='Email addresses to send the budget notification to when the threshold is exceeded. Must have at least one contact email or contact group specified at the Subscription or Resource Group scopes. All other scopes must have at least one contact email specified.)')]
        [string[]]
        $contactEmails,
        [parameter(mandatory=$False,HelpMessage='The notification is enabled or not.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Contact roles to send the budget notification to when the threshold is exceeded.)')]
        [string[]]
        $contactRoles,
        [parameter(mandatory=$False,HelpMessage='Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000.)')]
        [int]
        $threshold
    )

    process
    {
        return $([Notification]$PSBoundParameters)
    }
}
class BudgetTimePeriod
{
    [string] $endDate
    [string] $startDate
}
function New-AzureNativeTypeConsumptionBudgetTimePeriod
{
    param (
        [parameter(mandatory=$False,HelpMessage='The end date for the budget. If not provided, we default this to 10 years from the start date.)')]
        [string]
        $endDate,
        [parameter(mandatory=$False,HelpMessage='The start date for the budget.)')]
        [string]
        $startDate
    )

    process
    {
        return $([BudgetTimePeriod]$PSBoundParameters)
    }
}
class BudgetComparisonExpression
{
    [string] $name
    [string[]] $values
    [ArgumentCompletions('In')]
    [string] $operator
}
function New-AzureNativeTypeConsumptionBudgetComparisonExpression
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the column to use in comparison.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Array of values to use for comparison)')]
        [string[]]
        $values,
        [parameter(mandatory=$False,HelpMessage='The operator to use for comparison.)')]
        [string]
        [ArgumentCompletions('In')]
        $operator
    )

    process
    {
        return $([BudgetComparisonExpression]$PSBoundParameters)
    }
}
class BudgetFilterProperties
{
    [BudgetComparisonExpression] $tags
    [BudgetComparisonExpression] $dimensions
}
function New-AzureNativeTypeConsumptionBudgetFilterProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a tag)')]
        [BudgetComparisonExpression]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a dimension)')]
        [BudgetComparisonExpression]
        $dimensions
    )

    process
    {
        return $([BudgetFilterProperties]$PSBoundParameters)
    }
}
class BudgetFilter
{
    [BudgetFilterProperties] $not
    [BudgetFilterProperties[]] $and
    [BudgetComparisonExpression] $dimensions
    [BudgetComparisonExpression] $tags
}
function New-AzureNativeTypeConsumptionBudgetFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='The logical "NOT" expression.)')]
        [BudgetFilterProperties]
        $not,
        [parameter(mandatory=$False,HelpMessage='The logical "AND" expression. Must have at least 2 items.)')]
        $and,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a dimension)')]
        [BudgetComparisonExpression]
        $dimensions,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a tag)')]
        [BudgetComparisonExpression]
        $tags
    )

    process
    {
        return $([BudgetFilter]$PSBoundParameters)
    }
}
function New-AzureNativeConsumptionBudget
{
    [Alias('azure_native_consumption_budget')]
    param (
        [parameter(mandatory=$False,HelpMessage='Dictionary of notifications associated with the budget. Budget can have up to five notifications.)')]
        [Notification]
        $notifications,
        [parameter(mandatory=$False,HelpMessage='The category of the budget, whether the budget tracks cost or usage.)')]
        [string]
        [ArgumentCompletions('Cost')]
        $category,
        [parameter(mandatory=$False,HelpMessage='The time covered by a budget. Tracking of the amount will be reset based on the time grain. BillingMonth, BillingQuarter, and BillingAnnual are only supported by WD customers)')]
        [string]
        [ArgumentCompletions('Monthly', 'Quarterly', 'Annually', 'BillingMonth', 'BillingQuarter', 'BillingAnnual')]
        $timeGrain,
        [parameter(mandatory=$False,HelpMessage='The scope associated with budget operations. This includes ''/subscriptions/{subscriptionId}/'' for subscription scope, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''/providers/Microsoft.Management/managementGroups/{managementGroupId}'' for Management Group scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for billingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for invoiceSection scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Has start and end date of the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than twelve months. Past start date should be selected within the timegrain period. There are no restrictions on the end date.)')]
        [BudgetTimePeriod]
        $timePeriod,
        [parameter(mandatory=$False,HelpMessage='Budget Name.)')]
        [string]
        $budgetName,
        [parameter(mandatory=$False,HelpMessage='May be used to filter budgets by user-specified dimensions and/or tags.)')]
        [BudgetFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The total amount of cost to track with the budget)')]
        [int]
        $amount,
        [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:consumption:Budget")

        $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["amount"] = $amount
        $resource.properties["category"] = $category
        $resource.properties["scope"] = $scope
        $resource.properties["timeGrain"] = $timeGrain
        $resource.properties["timePeriod"] = $timePeriod

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

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

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

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

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