All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.gcp.billing.kotlin.BudgetArgs.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 8.10.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.gcp.billing.kotlin

import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.gcp.billing.BudgetArgs.builder
import com.pulumi.gcp.billing.kotlin.inputs.BudgetAllUpdatesRuleArgs
import com.pulumi.gcp.billing.kotlin.inputs.BudgetAllUpdatesRuleArgsBuilder
import com.pulumi.gcp.billing.kotlin.inputs.BudgetAmountArgs
import com.pulumi.gcp.billing.kotlin.inputs.BudgetAmountArgsBuilder
import com.pulumi.gcp.billing.kotlin.inputs.BudgetBudgetFilterArgs
import com.pulumi.gcp.billing.kotlin.inputs.BudgetBudgetFilterArgsBuilder
import com.pulumi.gcp.billing.kotlin.inputs.BudgetThresholdRuleArgs
import com.pulumi.gcp.billing.kotlin.inputs.BudgetThresholdRuleArgsBuilder
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmName

/**
 * Budget configuration for a billing account.
 * To get more information about Budget, see:
 * * [API documentation](https://cloud.google.com/billing/docs/reference/budget/rest/v1/billingAccounts.budgets)
 * * How-to Guides
 *     * [Creating a budget](https://cloud.google.com/billing/docs/how-to/budgets)
 * > **Warning:** If you are using User ADCs (Application Default Credentials) with this resource,
 * you must specify a `billing_project` and set `user_project_override` to true
 * in the provider configuration. Otherwise the Billing Budgets API will return a 403 error.
 * Your account must have the `serviceusage.services.use` permission on the
 * `billing_project` you defined.
 * ## Example Usage
 * ### Billing Budget Basic
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const account = gcp.organizations.getBillingAccount({
 *     billingAccount: "000000-0000000-0000000-000000",
 * });
 * const budget = new gcp.billing.Budget("budget", {
 *     billingAccount: account.then(account => account.id),
 *     displayName: "Example Billing Budget",
 *     amount: {
 *         specifiedAmount: {
 *             currencyCode: "USD",
 *             units: "100000",
 *         },
 *     },
 *     thresholdRules: [{
 *         thresholdPercent: 0.5,
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
 * budget = gcp.billing.Budget("budget",
 *     billing_account=account.id,
 *     display_name="Example Billing Budget",
 *     amount=gcp.billing.BudgetAmountArgs(
 *         specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(
 *             currency_code="USD",
 *             units="100000",
 *         ),
 *     ),
 *     threshold_rules=[gcp.billing.BudgetThresholdRuleArgs(
 *         threshold_percent=0.5,
 *     )])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var account = Gcp.Organizations.GetBillingAccount.Invoke(new()
 *     {
 *         BillingAccount = "000000-0000000-0000000-000000",
 *     });
 *     var budget = new Gcp.Billing.Budget("budget", new()
 *     {
 *         BillingAccount = account.Apply(getBillingAccountResult => getBillingAccountResult.Id),
 *         DisplayName = "Example Billing Budget",
 *         Amount = new Gcp.Billing.Inputs.BudgetAmountArgs
 *         {
 *             SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs
 *             {
 *                 CurrencyCode = "USD",
 *                 Units = "100000",
 *             },
 *         },
 *         ThresholdRules = new[]
 *         {
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 0.5,
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/billing"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		account, err := organizations.GetBillingAccount(ctx, &organizations.GetBillingAccountArgs{
 * 			BillingAccount: pulumi.StringRef("000000-0000000-0000000-000000"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = billing.NewBudget(ctx, "budget", &billing.BudgetArgs{
 * 			BillingAccount: pulumi.String(account.Id),
 * 			DisplayName:    pulumi.String("Example Billing Budget"),
 * 			Amount: &billing.BudgetAmountArgs{
 * 				SpecifiedAmount: &billing.BudgetAmountSpecifiedAmountArgs{
 * 					CurrencyCode: pulumi.String("USD"),
 * 					Units:        pulumi.String("100000"),
 * 				},
 * 			},
 * 			ThresholdRules: billing.BudgetThresholdRuleArray{
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(0.5),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
 * import com.pulumi.gcp.billing.Budget;
 * import com.pulumi.gcp.billing.BudgetArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
 *             .billingAccount("000000-0000000-0000000-000000")
 *             .build());
 *         var budget = new Budget("budget", BudgetArgs.builder()
 *             .billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
 *             .displayName("Example Billing Budget")
 *             .amount(BudgetAmountArgs.builder()
 *                 .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
 *                     .currencyCode("USD")
 *                     .units("100000")
 *                     .build())
 *                 .build())
 *             .thresholdRules(BudgetThresholdRuleArgs.builder()
 *                 .thresholdPercent(0.5)
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   budget:
 *     type: gcp:billing:Budget
 *     properties:
 *       billingAccount: ${account.id}
 *       displayName: Example Billing Budget
 *       amount:
 *         specifiedAmount:
 *           currencyCode: USD
 *           units: '100000'
 *       thresholdRules:
 *         - thresholdPercent: 0.5
 * variables:
 *   account:
 *     fn::invoke:
 *       Function: gcp:organizations:getBillingAccount
 *       Arguments:
 *         billingAccount: 000000-0000000-0000000-000000
 * ```
 * 
 * ### Billing Budget Lastperiod
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const account = gcp.organizations.getBillingAccount({
 *     billingAccount: "000000-0000000-0000000-000000",
 * });
 * const project = gcp.organizations.getProject({});
 * const budget = new gcp.billing.Budget("budget", {
 *     billingAccount: account.then(account => account.id),
 *     displayName: "Example Billing Budget",
 *     budgetFilter: {
 *         projects: [project.then(project => `projects/${project.number}`)],
 *     },
 *     amount: {
 *         lastPeriodAmount: true,
 *     },
 *     thresholdRules: [{
 *         thresholdPercent: 10,
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
 * project = gcp.organizations.get_project()
 * budget = gcp.billing.Budget("budget",
 *     billing_account=account.id,
 *     display_name="Example Billing Budget",
 *     budget_filter=gcp.billing.BudgetBudgetFilterArgs(
 *         projects=[f"projects/{project.number}"],
 *     ),
 *     amount=gcp.billing.BudgetAmountArgs(
 *         last_period_amount=True,
 *     ),
 *     threshold_rules=[gcp.billing.BudgetThresholdRuleArgs(
 *         threshold_percent=10,
 *     )])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var account = Gcp.Organizations.GetBillingAccount.Invoke(new()
 *     {
 *         BillingAccount = "000000-0000000-0000000-000000",
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 *     var budget = new Gcp.Billing.Budget("budget", new()
 *     {
 *         BillingAccount = account.Apply(getBillingAccountResult => getBillingAccountResult.Id),
 *         DisplayName = "Example Billing Budget",
 *         BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs
 *         {
 *             Projects = new[]
 *             {
 *                 $"projects/{project.Apply(getProjectResult => getProjectResult.Number)}",
 *             },
 *         },
 *         Amount = new Gcp.Billing.Inputs.BudgetAmountArgs
 *         {
 *             LastPeriodAmount = true,
 *         },
 *         ThresholdRules = new[]
 *         {
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 10,
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"fmt"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/billing"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		account, err := organizations.GetBillingAccount(ctx, &organizations.GetBillingAccountArgs{
 * 			BillingAccount: pulumi.StringRef("000000-0000000-0000000-000000"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		project, err := organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = billing.NewBudget(ctx, "budget", &billing.BudgetArgs{
 * 			BillingAccount: pulumi.String(account.Id),
 * 			DisplayName:    pulumi.String("Example Billing Budget"),
 * 			BudgetFilter: &billing.BudgetBudgetFilterArgs{
 * 				Projects: pulumi.StringArray{
 * 					pulumi.String(fmt.Sprintf("projects/%v", project.Number)),
 * 				},
 * 			},
 * 			Amount: &billing.BudgetAmountArgs{
 * 				LastPeriodAmount: pulumi.Bool(true),
 * 			},
 * 			ThresholdRules: billing.BudgetThresholdRuleArray{
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(10),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import com.pulumi.gcp.billing.Budget;
 * import com.pulumi.gcp.billing.BudgetArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
 *             .billingAccount("000000-0000000-0000000-000000")
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *         var budget = new Budget("budget", BudgetArgs.builder()
 *             .billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
 *             .displayName("Example Billing Budget")
 *             .budgetFilter(BudgetBudgetFilterArgs.builder()
 *                 .projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
 *                 .build())
 *             .amount(BudgetAmountArgs.builder()
 *                 .lastPeriodAmount(true)
 *                 .build())
 *             .thresholdRules(BudgetThresholdRuleArgs.builder()
 *                 .thresholdPercent(10)
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   budget:
 *     type: gcp:billing:Budget
 *     properties:
 *       billingAccount: ${account.id}
 *       displayName: Example Billing Budget
 *       budgetFilter:
 *         projects:
 *           - projects/${project.number}
 *       amount:
 *         lastPeriodAmount: true
 *       thresholdRules:
 *         - thresholdPercent: 10
 * variables:
 *   account:
 *     fn::invoke:
 *       Function: gcp:organizations:getBillingAccount
 *       Arguments:
 *         billingAccount: 000000-0000000-0000000-000000
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ### Billing Budget Filter
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const account = gcp.organizations.getBillingAccount({
 *     billingAccount: "000000-0000000-0000000-000000",
 * });
 * const project = gcp.organizations.getProject({});
 * const budget = new gcp.billing.Budget("budget", {
 *     billingAccount: account.then(account => account.id),
 *     displayName: "Example Billing Budget",
 *     budgetFilter: {
 *         projects: [project.then(project => `projects/${project.number}`)],
 *         creditTypesTreatment: "INCLUDE_SPECIFIED_CREDITS",
 *         services: ["services/24E6-581D-38E5"],
 *         creditTypes: [
 *             "PROMOTION",
 *             "FREE_TIER",
 *         ],
 *         resourceAncestors: ["organizations/123456789"],
 *     },
 *     amount: {
 *         specifiedAmount: {
 *             currencyCode: "USD",
 *             units: "100000",
 *         },
 *     },
 *     thresholdRules: [
 *         {
 *             thresholdPercent: 0.5,
 *         },
 *         {
 *             thresholdPercent: 0.9,
 *             spendBasis: "FORECASTED_SPEND",
 *         },
 *     ],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
 * project = gcp.organizations.get_project()
 * budget = gcp.billing.Budget("budget",
 *     billing_account=account.id,
 *     display_name="Example Billing Budget",
 *     budget_filter=gcp.billing.BudgetBudgetFilterArgs(
 *         projects=[f"projects/{project.number}"],
 *         credit_types_treatment="INCLUDE_SPECIFIED_CREDITS",
 *         services=["services/24E6-581D-38E5"],
 *         credit_types=[
 *             "PROMOTION",
 *             "FREE_TIER",
 *         ],
 *         resource_ancestors=["organizations/123456789"],
 *     ),
 *     amount=gcp.billing.BudgetAmountArgs(
 *         specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(
 *             currency_code="USD",
 *             units="100000",
 *         ),
 *     ),
 *     threshold_rules=[
 *         gcp.billing.BudgetThresholdRuleArgs(
 *             threshold_percent=0.5,
 *         ),
 *         gcp.billing.BudgetThresholdRuleArgs(
 *             threshold_percent=0.9,
 *             spend_basis="FORECASTED_SPEND",
 *         ),
 *     ])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var account = Gcp.Organizations.GetBillingAccount.Invoke(new()
 *     {
 *         BillingAccount = "000000-0000000-0000000-000000",
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 *     var budget = new Gcp.Billing.Budget("budget", new()
 *     {
 *         BillingAccount = account.Apply(getBillingAccountResult => getBillingAccountResult.Id),
 *         DisplayName = "Example Billing Budget",
 *         BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs
 *         {
 *             Projects = new[]
 *             {
 *                 $"projects/{project.Apply(getProjectResult => getProjectResult.Number)}",
 *             },
 *             CreditTypesTreatment = "INCLUDE_SPECIFIED_CREDITS",
 *             Services = new[]
 *             {
 *                 "services/24E6-581D-38E5",
 *             },
 *             CreditTypes = new[]
 *             {
 *                 "PROMOTION",
 *                 "FREE_TIER",
 *             },
 *             ResourceAncestors = new[]
 *             {
 *                 "organizations/123456789",
 *             },
 *         },
 *         Amount = new Gcp.Billing.Inputs.BudgetAmountArgs
 *         {
 *             SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs
 *             {
 *                 CurrencyCode = "USD",
 *                 Units = "100000",
 *             },
 *         },
 *         ThresholdRules = new[]
 *         {
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 0.5,
 *             },
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 0.9,
 *                 SpendBasis = "FORECASTED_SPEND",
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"fmt"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/billing"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		account, err := organizations.GetBillingAccount(ctx, &organizations.GetBillingAccountArgs{
 * 			BillingAccount: pulumi.StringRef("000000-0000000-0000000-000000"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		project, err := organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = billing.NewBudget(ctx, "budget", &billing.BudgetArgs{
 * 			BillingAccount: pulumi.String(account.Id),
 * 			DisplayName:    pulumi.String("Example Billing Budget"),
 * 			BudgetFilter: &billing.BudgetBudgetFilterArgs{
 * 				Projects: pulumi.StringArray{
 * 					pulumi.String(fmt.Sprintf("projects/%v", project.Number)),
 * 				},
 * 				CreditTypesTreatment: pulumi.String("INCLUDE_SPECIFIED_CREDITS"),
 * 				Services: pulumi.StringArray{
 * 					pulumi.String("services/24E6-581D-38E5"),
 * 				},
 * 				CreditTypes: pulumi.StringArray{
 * 					pulumi.String("PROMOTION"),
 * 					pulumi.String("FREE_TIER"),
 * 				},
 * 				ResourceAncestors: pulumi.StringArray{
 * 					pulumi.String("organizations/123456789"),
 * 				},
 * 			},
 * 			Amount: &billing.BudgetAmountArgs{
 * 				SpecifiedAmount: &billing.BudgetAmountSpecifiedAmountArgs{
 * 					CurrencyCode: pulumi.String("USD"),
 * 					Units:        pulumi.String("100000"),
 * 				},
 * 			},
 * 			ThresholdRules: billing.BudgetThresholdRuleArray{
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(0.5),
 * 				},
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(0.9),
 * 					SpendBasis:       pulumi.String("FORECASTED_SPEND"),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import com.pulumi.gcp.billing.Budget;
 * import com.pulumi.gcp.billing.BudgetArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
 *             .billingAccount("000000-0000000-0000000-000000")
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *         var budget = new Budget("budget", BudgetArgs.builder()
 *             .billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
 *             .displayName("Example Billing Budget")
 *             .budgetFilter(BudgetBudgetFilterArgs.builder()
 *                 .projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
 *                 .creditTypesTreatment("INCLUDE_SPECIFIED_CREDITS")
 *                 .services("services/24E6-581D-38E5")
 *                 .creditTypes(
 *                     "PROMOTION",
 *                     "FREE_TIER")
 *                 .resourceAncestors("organizations/123456789")
 *                 .build())
 *             .amount(BudgetAmountArgs.builder()
 *                 .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
 *                     .currencyCode("USD")
 *                     .units("100000")
 *                     .build())
 *                 .build())
 *             .thresholdRules(
 *                 BudgetThresholdRuleArgs.builder()
 *                     .thresholdPercent(0.5)
 *                     .build(),
 *                 BudgetThresholdRuleArgs.builder()
 *                     .thresholdPercent(0.9)
 *                     .spendBasis("FORECASTED_SPEND")
 *                     .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   budget:
 *     type: gcp:billing:Budget
 *     properties:
 *       billingAccount: ${account.id}
 *       displayName: Example Billing Budget
 *       budgetFilter:
 *         projects:
 *           - projects/${project.number}
 *         creditTypesTreatment: INCLUDE_SPECIFIED_CREDITS
 *         services:
 *           - services/24E6-581D-38E5
 *         creditTypes:
 *           - PROMOTION
 *           - FREE_TIER
 *         resourceAncestors:
 *           - organizations/123456789
 *       amount:
 *         specifiedAmount:
 *           currencyCode: USD
 *           units: '100000'
 *       thresholdRules:
 *         - thresholdPercent: 0.5
 *         - thresholdPercent: 0.9
 *           spendBasis: FORECASTED_SPEND
 * variables:
 *   account:
 *     fn::invoke:
 *       Function: gcp:organizations:getBillingAccount
 *       Arguments:
 *         billingAccount: 000000-0000000-0000000-000000
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ### Billing Budget Notify
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const account = gcp.organizations.getBillingAccount({
 *     billingAccount: "000000-0000000-0000000-000000",
 * });
 * const project = gcp.organizations.getProject({});
 * const notificationChannel = new gcp.monitoring.NotificationChannel("notification_channel", {
 *     displayName: "Example Notification Channel",
 *     type: "email",
 *     labels: {
 *         email_address: "[email protected]",
 *     },
 * });
 * const budget = new gcp.billing.Budget("budget", {
 *     billingAccount: account.then(account => account.id),
 *     displayName: "Example Billing Budget",
 *     budgetFilter: {
 *         projects: [project.then(project => `projects/${project.number}`)],
 *     },
 *     amount: {
 *         specifiedAmount: {
 *             currencyCode: "USD",
 *             units: "100000",
 *         },
 *     },
 *     thresholdRules: [
 *         {
 *             thresholdPercent: 1,
 *         },
 *         {
 *             thresholdPercent: 1,
 *             spendBasis: "FORECASTED_SPEND",
 *         },
 *     ],
 *     allUpdatesRule: {
 *         monitoringNotificationChannels: [notificationChannel.id],
 *         disableDefaultIamRecipients: true,
 *     },
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
 * project = gcp.organizations.get_project()
 * notification_channel = gcp.monitoring.NotificationChannel("notification_channel",
 *     display_name="Example Notification Channel",
 *     type="email",
 *     labels={
 *         "email_address": "[email protected]",
 *     })
 * budget = gcp.billing.Budget("budget",
 *     billing_account=account.id,
 *     display_name="Example Billing Budget",
 *     budget_filter=gcp.billing.BudgetBudgetFilterArgs(
 *         projects=[f"projects/{project.number}"],
 *     ),
 *     amount=gcp.billing.BudgetAmountArgs(
 *         specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(
 *             currency_code="USD",
 *             units="100000",
 *         ),
 *     ),
 *     threshold_rules=[
 *         gcp.billing.BudgetThresholdRuleArgs(
 *             threshold_percent=1,
 *         ),
 *         gcp.billing.BudgetThresholdRuleArgs(
 *             threshold_percent=1,
 *             spend_basis="FORECASTED_SPEND",
 *         ),
 *     ],
 *     all_updates_rule=gcp.billing.BudgetAllUpdatesRuleArgs(
 *         monitoring_notification_channels=[notification_channel.id],
 *         disable_default_iam_recipients=True,
 *     ))
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var account = Gcp.Organizations.GetBillingAccount.Invoke(new()
 *     {
 *         BillingAccount = "000000-0000000-0000000-000000",
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 *     var notificationChannel = new Gcp.Monitoring.NotificationChannel("notification_channel", new()
 *     {
 *         DisplayName = "Example Notification Channel",
 *         Type = "email",
 *         Labels =
 *         {
 *             { "email_address", "[email protected]" },
 *         },
 *     });
 *     var budget = new Gcp.Billing.Budget("budget", new()
 *     {
 *         BillingAccount = account.Apply(getBillingAccountResult => getBillingAccountResult.Id),
 *         DisplayName = "Example Billing Budget",
 *         BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs
 *         {
 *             Projects = new[]
 *             {
 *                 $"projects/{project.Apply(getProjectResult => getProjectResult.Number)}",
 *             },
 *         },
 *         Amount = new Gcp.Billing.Inputs.BudgetAmountArgs
 *         {
 *             SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs
 *             {
 *                 CurrencyCode = "USD",
 *                 Units = "100000",
 *             },
 *         },
 *         ThresholdRules = new[]
 *         {
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 1,
 *             },
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 1,
 *                 SpendBasis = "FORECASTED_SPEND",
 *             },
 *         },
 *         AllUpdatesRule = new Gcp.Billing.Inputs.BudgetAllUpdatesRuleArgs
 *         {
 *             MonitoringNotificationChannels = new[]
 *             {
 *                 notificationChannel.Id,
 *             },
 *             DisableDefaultIamRecipients = true,
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"fmt"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/billing"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/monitoring"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		account, err := organizations.GetBillingAccount(ctx, &organizations.GetBillingAccountArgs{
 * 			BillingAccount: pulumi.StringRef("000000-0000000-0000000-000000"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		project, err := organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		notificationChannel, err := monitoring.NewNotificationChannel(ctx, "notification_channel", &monitoring.NotificationChannelArgs{
 * 			DisplayName: pulumi.String("Example Notification Channel"),
 * 			Type:        pulumi.String("email"),
 * 			Labels: pulumi.StringMap{
 * 				"email_address": pulumi.String("[email protected]"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = billing.NewBudget(ctx, "budget", &billing.BudgetArgs{
 * 			BillingAccount: pulumi.String(account.Id),
 * 			DisplayName:    pulumi.String("Example Billing Budget"),
 * 			BudgetFilter: &billing.BudgetBudgetFilterArgs{
 * 				Projects: pulumi.StringArray{
 * 					pulumi.String(fmt.Sprintf("projects/%v", project.Number)),
 * 				},
 * 			},
 * 			Amount: &billing.BudgetAmountArgs{
 * 				SpecifiedAmount: &billing.BudgetAmountSpecifiedAmountArgs{
 * 					CurrencyCode: pulumi.String("USD"),
 * 					Units:        pulumi.String("100000"),
 * 				},
 * 			},
 * 			ThresholdRules: billing.BudgetThresholdRuleArray{
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(1),
 * 				},
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(1),
 * 					SpendBasis:       pulumi.String("FORECASTED_SPEND"),
 * 				},
 * 			},
 * 			AllUpdatesRule: &billing.BudgetAllUpdatesRuleArgs{
 * 				MonitoringNotificationChannels: pulumi.StringArray{
 * 					notificationChannel.ID(),
 * 				},
 * 				DisableDefaultIamRecipients: pulumi.Bool(true),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import com.pulumi.gcp.monitoring.NotificationChannel;
 * import com.pulumi.gcp.monitoring.NotificationChannelArgs;
 * import com.pulumi.gcp.billing.Budget;
 * import com.pulumi.gcp.billing.BudgetArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAllUpdatesRuleArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
 *             .billingAccount("000000-0000000-0000000-000000")
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *         var notificationChannel = new NotificationChannel("notificationChannel", NotificationChannelArgs.builder()
 *             .displayName("Example Notification Channel")
 *             .type("email")
 *             .labels(Map.of("email_address", "[email protected]"))
 *             .build());
 *         var budget = new Budget("budget", BudgetArgs.builder()
 *             .billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
 *             .displayName("Example Billing Budget")
 *             .budgetFilter(BudgetBudgetFilterArgs.builder()
 *                 .projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
 *                 .build())
 *             .amount(BudgetAmountArgs.builder()
 *                 .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
 *                     .currencyCode("USD")
 *                     .units("100000")
 *                     .build())
 *                 .build())
 *             .thresholdRules(
 *                 BudgetThresholdRuleArgs.builder()
 *                     .thresholdPercent(1)
 *                     .build(),
 *                 BudgetThresholdRuleArgs.builder()
 *                     .thresholdPercent(1)
 *                     .spendBasis("FORECASTED_SPEND")
 *                     .build())
 *             .allUpdatesRule(BudgetAllUpdatesRuleArgs.builder()
 *                 .monitoringNotificationChannels(notificationChannel.id())
 *                 .disableDefaultIamRecipients(true)
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   budget:
 *     type: gcp:billing:Budget
 *     properties:
 *       billingAccount: ${account.id}
 *       displayName: Example Billing Budget
 *       budgetFilter:
 *         projects:
 *           - projects/${project.number}
 *       amount:
 *         specifiedAmount:
 *           currencyCode: USD
 *           units: '100000'
 *       thresholdRules:
 *         - thresholdPercent: 1
 *         - thresholdPercent: 1
 *           spendBasis: FORECASTED_SPEND
 *       allUpdatesRule:
 *         monitoringNotificationChannels:
 *           - ${notificationChannel.id}
 *         disableDefaultIamRecipients: true
 *   notificationChannel:
 *     type: gcp:monitoring:NotificationChannel
 *     name: notification_channel
 *     properties:
 *       displayName: Example Notification Channel
 *       type: email
 *       labels:
 *         email_address: [email protected]
 * variables:
 *   account:
 *     fn::invoke:
 *       Function: gcp:organizations:getBillingAccount
 *       Arguments:
 *         billingAccount: 000000-0000000-0000000-000000
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ### Billing Budget Customperiod
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const account = gcp.organizations.getBillingAccount({
 *     billingAccount: "000000-0000000-0000000-000000",
 * });
 * const project = gcp.organizations.getProject({});
 * const budget = new gcp.billing.Budget("budget", {
 *     billingAccount: account.then(account => account.id),
 *     displayName: "Example Billing Budget",
 *     budgetFilter: {
 *         projects: [project.then(project => `projects/${project.number}`)],
 *         creditTypesTreatment: "EXCLUDE_ALL_CREDITS",
 *         services: ["services/24E6-581D-38E5"],
 *         customPeriod: {
 *             startDate: {
 *                 year: 2022,
 *                 month: 1,
 *                 day: 1,
 *             },
 *             endDate: {
 *                 year: 2023,
 *                 month: 12,
 *                 day: 31,
 *             },
 *         },
 *     },
 *     amount: {
 *         specifiedAmount: {
 *             currencyCode: "USD",
 *             units: "100000",
 *         },
 *     },
 *     thresholdRules: [
 *         {
 *             thresholdPercent: 0.5,
 *         },
 *         {
 *             thresholdPercent: 0.9,
 *         },
 *     ],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
 * project = gcp.organizations.get_project()
 * budget = gcp.billing.Budget("budget",
 *     billing_account=account.id,
 *     display_name="Example Billing Budget",
 *     budget_filter=gcp.billing.BudgetBudgetFilterArgs(
 *         projects=[f"projects/{project.number}"],
 *         credit_types_treatment="EXCLUDE_ALL_CREDITS",
 *         services=["services/24E6-581D-38E5"],
 *         custom_period=gcp.billing.BudgetBudgetFilterCustomPeriodArgs(
 *             start_date=gcp.billing.BudgetBudgetFilterCustomPeriodStartDateArgs(
 *                 year=2022,
 *                 month=1,
 *                 day=1,
 *             ),
 *             end_date=gcp.billing.BudgetBudgetFilterCustomPeriodEndDateArgs(
 *                 year=2023,
 *                 month=12,
 *                 day=31,
 *             ),
 *         ),
 *     ),
 *     amount=gcp.billing.BudgetAmountArgs(
 *         specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(
 *             currency_code="USD",
 *             units="100000",
 *         ),
 *     ),
 *     threshold_rules=[
 *         gcp.billing.BudgetThresholdRuleArgs(
 *             threshold_percent=0.5,
 *         ),
 *         gcp.billing.BudgetThresholdRuleArgs(
 *             threshold_percent=0.9,
 *         ),
 *     ])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var account = Gcp.Organizations.GetBillingAccount.Invoke(new()
 *     {
 *         BillingAccount = "000000-0000000-0000000-000000",
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 *     var budget = new Gcp.Billing.Budget("budget", new()
 *     {
 *         BillingAccount = account.Apply(getBillingAccountResult => getBillingAccountResult.Id),
 *         DisplayName = "Example Billing Budget",
 *         BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs
 *         {
 *             Projects = new[]
 *             {
 *                 $"projects/{project.Apply(getProjectResult => getProjectResult.Number)}",
 *             },
 *             CreditTypesTreatment = "EXCLUDE_ALL_CREDITS",
 *             Services = new[]
 *             {
 *                 "services/24E6-581D-38E5",
 *             },
 *             CustomPeriod = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodArgs
 *             {
 *                 StartDate = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodStartDateArgs
 *                 {
 *                     Year = 2022,
 *                     Month = 1,
 *                     Day = 1,
 *                 },
 *                 EndDate = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodEndDateArgs
 *                 {
 *                     Year = 2023,
 *                     Month = 12,
 *                     Day = 31,
 *                 },
 *             },
 *         },
 *         Amount = new Gcp.Billing.Inputs.BudgetAmountArgs
 *         {
 *             SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs
 *             {
 *                 CurrencyCode = "USD",
 *                 Units = "100000",
 *             },
 *         },
 *         ThresholdRules = new[]
 *         {
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 0.5,
 *             },
 *             new Gcp.Billing.Inputs.BudgetThresholdRuleArgs
 *             {
 *                 ThresholdPercent = 0.9,
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"fmt"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/billing"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		account, err := organizations.GetBillingAccount(ctx, &organizations.GetBillingAccountArgs{
 * 			BillingAccount: pulumi.StringRef("000000-0000000-0000000-000000"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		project, err := organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = billing.NewBudget(ctx, "budget", &billing.BudgetArgs{
 * 			BillingAccount: pulumi.String(account.Id),
 * 			DisplayName:    pulumi.String("Example Billing Budget"),
 * 			BudgetFilter: &billing.BudgetBudgetFilterArgs{
 * 				Projects: pulumi.StringArray{
 * 					pulumi.String(fmt.Sprintf("projects/%v", project.Number)),
 * 				},
 * 				CreditTypesTreatment: pulumi.String("EXCLUDE_ALL_CREDITS"),
 * 				Services: pulumi.StringArray{
 * 					pulumi.String("services/24E6-581D-38E5"),
 * 				},
 * 				CustomPeriod: &billing.BudgetBudgetFilterCustomPeriodArgs{
 * 					StartDate: &billing.BudgetBudgetFilterCustomPeriodStartDateArgs{
 * 						Year:  pulumi.Int(2022),
 * 						Month: pulumi.Int(1),
 * 						Day:   pulumi.Int(1),
 * 					},
 * 					EndDate: &billing.BudgetBudgetFilterCustomPeriodEndDateArgs{
 * 						Year:  pulumi.Int(2023),
 * 						Month: pulumi.Int(12),
 * 						Day:   pulumi.Int(31),
 * 					},
 * 				},
 * 			},
 * 			Amount: &billing.BudgetAmountArgs{
 * 				SpecifiedAmount: &billing.BudgetAmountSpecifiedAmountArgs{
 * 					CurrencyCode: pulumi.String("USD"),
 * 					Units:        pulumi.String("100000"),
 * 				},
 * 			},
 * 			ThresholdRules: billing.BudgetThresholdRuleArray{
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(0.5),
 * 				},
 * 				&billing.BudgetThresholdRuleArgs{
 * 					ThresholdPercent: pulumi.Float64(0.9),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import com.pulumi.gcp.billing.Budget;
 * import com.pulumi.gcp.billing.BudgetArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodStartDateArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodEndDateArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
 * import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
 *             .billingAccount("000000-0000000-0000000-000000")
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *         var budget = new Budget("budget", BudgetArgs.builder()
 *             .billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
 *             .displayName("Example Billing Budget")
 *             .budgetFilter(BudgetBudgetFilterArgs.builder()
 *                 .projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
 *                 .creditTypesTreatment("EXCLUDE_ALL_CREDITS")
 *                 .services("services/24E6-581D-38E5")
 *                 .customPeriod(BudgetBudgetFilterCustomPeriodArgs.builder()
 *                     .startDate(BudgetBudgetFilterCustomPeriodStartDateArgs.builder()
 *                         .year(2022)
 *                         .month(1)
 *                         .day(1)
 *                         .build())
 *                     .endDate(BudgetBudgetFilterCustomPeriodEndDateArgs.builder()
 *                         .year(2023)
 *                         .month(12)
 *                         .day(31)
 *                         .build())
 *                     .build())
 *                 .build())
 *             .amount(BudgetAmountArgs.builder()
 *                 .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
 *                     .currencyCode("USD")
 *                     .units("100000")
 *                     .build())
 *                 .build())
 *             .thresholdRules(
 *                 BudgetThresholdRuleArgs.builder()
 *                     .thresholdPercent(0.5)
 *                     .build(),
 *                 BudgetThresholdRuleArgs.builder()
 *                     .thresholdPercent(0.9)
 *                     .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   budget:
 *     type: gcp:billing:Budget
 *     properties:
 *       billingAccount: ${account.id}
 *       displayName: Example Billing Budget
 *       budgetFilter:
 *         projects:
 *           - projects/${project.number}
 *         creditTypesTreatment: EXCLUDE_ALL_CREDITS
 *         services:
 *           - services/24E6-581D-38E5
 *         customPeriod:
 *           startDate:
 *             year: 2022
 *             month: 1
 *             day: 1
 *           endDate:
 *             year: 2023
 *             month: 12
 *             day: 31
 *       amount:
 *         specifiedAmount:
 *           currencyCode: USD
 *           units: '100000'
 *       thresholdRules:
 *         - thresholdPercent: 0.5
 *         - thresholdPercent: 0.9
 * variables:
 *   account:
 *     fn::invoke:
 *       Function: gcp:organizations:getBillingAccount
 *       Arguments:
 *         billingAccount: 000000-0000000-0000000-000000
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ## Import
 * Budget can be imported using any of these accepted formats:
 * * `billingAccounts/{{billing_account}}/budgets/{{name}}`
 * * `{{billing_account}}/{{name}}`
 * * `{{name}}`
 * When using the `pulumi import` command, Budget can be imported using one of the formats above. For example:
 * ```sh
 * $ pulumi import gcp:billing/budget:Budget default billingAccounts/{{billing_account}}/budgets/{{name}}
 * ```
 * ```sh
 * $ pulumi import gcp:billing/budget:Budget default {{billing_account}}/{{name}}
 * ```
 * ```sh
 * $ pulumi import gcp:billing/budget:Budget default {{name}}
 * ```
 * @property allUpdatesRule Defines notifications that are sent on every update to the billing account's spend, regardless of the thresholds defined
 * using threshold rules.
 * @property amount The budgeted amount for each usage period.
 * Structure is documented below.
 * @property billingAccount ID of the billing account to set a budget on.
 * @property budgetFilter Filters that define which resources are used to compute the actual spend against the budget.
 * @property displayName User data for display name in UI. Must be <= 60 chars.
 * @property ownershipScope The ownership scope of the budget. The ownership scope and users' IAM permissions determine who has full access to the
 * budget's data. Possible values: ["OWNERSHIP_SCOPE_UNSPECIFIED", "ALL_USERS", "BILLING_ACCOUNT"]
 * @property thresholdRules Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
 * the budget.
 */
public data class BudgetArgs(
    public val allUpdatesRule: Output? = null,
    public val amount: Output? = null,
    public val billingAccount: Output? = null,
    public val budgetFilter: Output? = null,
    public val displayName: Output? = null,
    public val ownershipScope: Output? = null,
    public val thresholdRules: Output>? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.gcp.billing.BudgetArgs =
        com.pulumi.gcp.billing.BudgetArgs.builder()
            .allUpdatesRule(allUpdatesRule?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .amount(amount?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .billingAccount(billingAccount?.applyValue({ args0 -> args0 }))
            .budgetFilter(budgetFilter?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .displayName(displayName?.applyValue({ args0 -> args0 }))
            .ownershipScope(ownershipScope?.applyValue({ args0 -> args0 }))
            .thresholdRules(
                thresholdRules?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            ).build()
}

/**
 * Builder for [BudgetArgs].
 */
@PulumiTagMarker
public class BudgetArgsBuilder internal constructor() {
    private var allUpdatesRule: Output? = null

    private var amount: Output? = null

    private var billingAccount: Output? = null

    private var budgetFilter: Output? = null

    private var displayName: Output? = null

    private var ownershipScope: Output? = null

    private var thresholdRules: Output>? = null

    /**
     * @param value Defines notifications that are sent on every update to the billing account's spend, regardless of the thresholds defined
     * using threshold rules.
     */
    @JvmName("fdqagwkugkbdaofv")
    public suspend fun allUpdatesRule(`value`: Output) {
        this.allUpdatesRule = value
    }

    /**
     * @param value The budgeted amount for each usage period.
     * Structure is documented below.
     */
    @JvmName("vcvhnqprxtdwuwfw")
    public suspend fun amount(`value`: Output) {
        this.amount = value
    }

    /**
     * @param value ID of the billing account to set a budget on.
     */
    @JvmName("ddagadbfowifjjbc")
    public suspend fun billingAccount(`value`: Output) {
        this.billingAccount = value
    }

    /**
     * @param value Filters that define which resources are used to compute the actual spend against the budget.
     */
    @JvmName("xapagkkcalksqrbb")
    public suspend fun budgetFilter(`value`: Output) {
        this.budgetFilter = value
    }

    /**
     * @param value User data for display name in UI. Must be <= 60 chars.
     */
    @JvmName("nllyuempwnhpibyp")
    public suspend fun displayName(`value`: Output) {
        this.displayName = value
    }

    /**
     * @param value The ownership scope of the budget. The ownership scope and users' IAM permissions determine who has full access to the
     * budget's data. Possible values: ["OWNERSHIP_SCOPE_UNSPECIFIED", "ALL_USERS", "BILLING_ACCOUNT"]
     */
    @JvmName("wuwhepjgdpygqryq")
    public suspend fun ownershipScope(`value`: Output) {
        this.ownershipScope = value
    }

    /**
     * @param value Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("xnsfxeiqrtcenfxn")
    public suspend fun thresholdRules(`value`: Output>) {
        this.thresholdRules = value
    }

    @JvmName("hxulywycwwmihffv")
    public suspend fun thresholdRules(vararg values: Output) {
        this.thresholdRules = Output.all(values.asList())
    }

    /**
     * @param values Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("cumpolrfdupucmqs")
    public suspend fun thresholdRules(values: List>) {
        this.thresholdRules = Output.all(values)
    }

    /**
     * @param value Defines notifications that are sent on every update to the billing account's spend, regardless of the thresholds defined
     * using threshold rules.
     */
    @JvmName("ervfluvvghjtpkje")
    public suspend fun allUpdatesRule(`value`: BudgetAllUpdatesRuleArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.allUpdatesRule = mapped
    }

    /**
     * @param argument Defines notifications that are sent on every update to the billing account's spend, regardless of the thresholds defined
     * using threshold rules.
     */
    @JvmName("qlfdwxjgdrnwwvns")
    public suspend fun allUpdatesRule(argument: suspend BudgetAllUpdatesRuleArgsBuilder.() -> Unit) {
        val toBeMapped = BudgetAllUpdatesRuleArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.allUpdatesRule = mapped
    }

    /**
     * @param value The budgeted amount for each usage period.
     * Structure is documented below.
     */
    @JvmName("dfheqhadvrsvsart")
    public suspend fun amount(`value`: BudgetAmountArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.amount = mapped
    }

    /**
     * @param argument The budgeted amount for each usage period.
     * Structure is documented below.
     */
    @JvmName("ymnkhedjmcskiive")
    public suspend fun amount(argument: suspend BudgetAmountArgsBuilder.() -> Unit) {
        val toBeMapped = BudgetAmountArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.amount = mapped
    }

    /**
     * @param value ID of the billing account to set a budget on.
     */
    @JvmName("bcdywojqflqnawld")
    public suspend fun billingAccount(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.billingAccount = mapped
    }

    /**
     * @param value Filters that define which resources are used to compute the actual spend against the budget.
     */
    @JvmName("qcjdevcjdxikiakw")
    public suspend fun budgetFilter(`value`: BudgetBudgetFilterArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.budgetFilter = mapped
    }

    /**
     * @param argument Filters that define which resources are used to compute the actual spend against the budget.
     */
    @JvmName("wwrgqsewmqewsowh")
    public suspend fun budgetFilter(argument: suspend BudgetBudgetFilterArgsBuilder.() -> Unit) {
        val toBeMapped = BudgetBudgetFilterArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.budgetFilter = mapped
    }

    /**
     * @param value User data for display name in UI. Must be <= 60 chars.
     */
    @JvmName("jpocrkeaayepiout")
    public suspend fun displayName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.displayName = mapped
    }

    /**
     * @param value The ownership scope of the budget. The ownership scope and users' IAM permissions determine who has full access to the
     * budget's data. Possible values: ["OWNERSHIP_SCOPE_UNSPECIFIED", "ALL_USERS", "BILLING_ACCOUNT"]
     */
    @JvmName("grtcfvvbynnwpwjq")
    public suspend fun ownershipScope(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ownershipScope = mapped
    }

    /**
     * @param value Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("csybiujymnukqtqc")
    public suspend fun thresholdRules(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.thresholdRules = mapped
    }

    /**
     * @param argument Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("ddqmvgxxijmdsucm")
    public suspend fun thresholdRules(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            BudgetThresholdRuleArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.thresholdRules = mapped
    }

    /**
     * @param argument Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("pxetihgpvvdcnawv")
    public suspend fun thresholdRules(vararg argument: suspend BudgetThresholdRuleArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            BudgetThresholdRuleArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.thresholdRules = mapped
    }

    /**
     * @param argument Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("bnidhnkbdgyykdpm")
    public suspend fun thresholdRules(argument: suspend BudgetThresholdRuleArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(BudgetThresholdRuleArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.thresholdRules = mapped
    }

    /**
     * @param values Rules that trigger alerts (notifications of thresholds being crossed) when spend exceeds the specified percentages of
     * the budget.
     */
    @JvmName("malpgevbimsctqob")
    public suspend fun thresholdRules(vararg values: BudgetThresholdRuleArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.thresholdRules = mapped
    }

    internal fun build(): BudgetArgs = BudgetArgs(
        allUpdatesRule = allUpdatesRule,
        amount = amount,
        billingAccount = billingAccount,
        budgetFilter = budgetFilter,
        displayName = displayName,
        ownershipScope = ownershipScope,
        thresholdRules = thresholdRules,
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy