Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Promote Billing Budgets to GA #4273

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
343 changes: 198 additions & 145 deletions products/billingbudget/api.yaml

Large diffs are not rendered by default.

36 changes: 25 additions & 11 deletions products/billingbudget/terraform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,52 +14,66 @@
--- !ruby/object:Provider::Terraform::Config
overrides: !ruby/object:Overrides::ResourceOverrides
Budget: !ruby/object:Overrides::Terraform::ResourceOverride
docs: !ruby/object:Provider::Terraform::Docs
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.
id_format: '{{name}}'
import_format: ['{{name}}']
exclude_import: true
examples:
- !ruby/object:Provider::Terraform::Examples
name: 'billing_budget_basic'
min_version: beta
primary_resource_id: 'budget'
vars:
display_name: 'Example Billing Budget'
test_env_vars:
billing_acct: :BILLING_ACCT
skip_import_test: true
- !ruby/object:Provider::Terraform::Examples
name: 'billing_budget_lastperiod'
min_version: beta
primary_resource_id: 'budget'
vars:
display_name: 'Example Billing Budget'
test_env_vars:
billing_acct: :BILLING_ACCT
project: :PROJECT_NAME
skip_import_test: true
- !ruby/object:Provider::Terraform::Examples
name: 'billing_budget_filter'
min_version: beta
primary_resource_id: 'budget'
vars:
display_name: 'Example Billing Budget'
test_env_vars:
billing_acct: :BILLING_ACCT
project: :PROJECT_NAME
skip_import_test: true
- !ruby/object:Provider::Terraform::Examples
name: 'billing_budget_notify'
min_version: beta
primary_resource_id: 'budget'
vars:
budget_name: 'Example Billing Budget'
channel_name: 'Example Notification Channel'
test_env_vars:
billing_acct: :BILLING_ACCT
project: :PROJECT_NAME
skip_import_test: true
custom_code: !ruby/object:Provider::Terraform::CustomCode
custom_import: templates/terraform/custom_import/self_link_as_name.erb
post_create: templates/terraform/post_create/set_computed_name.erb
properties:
budget: !ruby/object:Overrides::Terraform::PropertyOverride
flatten_object: true
budget.amount.lastPeriodAmount: !ruby/object:Overrides::Terraform::PropertyOverride
allUpdatesRule.schemaVersion: !ruby/object:Overrides::Terraform::PropertyOverride
custom_flatten: templates/terraform/custom_flatten/default_if_empty.erb
budgetFilter.creditTypes: !ruby/object:Overrides::Terraform::PropertyOverride
upodroid marked this conversation as resolved.
Show resolved Hide resolved
default_from_api: true
budgetFilter: !ruby/object:Overrides::Terraform::PropertyOverride
default_from_api: true
budgetFilter.services: !ruby/object:Overrides::Terraform::PropertyOverride
default_from_api: true
budgetFilter.subaccounts: !ruby/object:Overrides::Terraform::PropertyOverride
default_from_api: true
budgetFilter.labels: !ruby/object:Overrides::Terraform::PropertyOverride
default_from_api: true
amount.lastPeriodAmount: !ruby/object:Overrides::Terraform::PropertyOverride
custom_expand: 'templates/terraform/custom_expand/bool_to_object.go.erb'
custom_flatten: 'templates/terraform/custom_flatten/object_to_bool.go.erb'

Expand Down
4 changes: 4 additions & 0 deletions provider/terraform/examples.rb
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ class Examples < Api::Object
# Whether to skip generating docs for this example
attr_reader :skip_docs

# Whether to skip import tests for this example
attr_reader :skip_import_test

# The name of the primary resource for use in IAM tests. IAM tests need
# a reference to the primary resource to create IAM policies for
attr_reader :primary_resource_name
Expand Down Expand Up @@ -274,6 +277,7 @@ def validate
check :ignore_read_extra, type: Array, item_type: String, default: []
check :primary_resource_name, type: String
check :skip_test, type: TrueClass
check :skip_import_test, type: TrueClass
check :skip_docs, type: TrueClass
check :config_path, type: String, default: "templates/terraform/examples/#{name}.tf.erb"
check :skip_vcr, type: TrueClass
Expand Down
14 changes: 10 additions & 4 deletions templates/terraform/examples/base_configs/test_file.go.erb
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
)
<%
raise 'skip_test should be true if resource is not importable' \
if object.exclude_import
# raise 'skip_import_test should be true if resource is not importable' \
upodroid marked this conversation as resolved.
Show resolved Hide resolved
# if object.exclude_import

resource_name = product_ns + object.name
tf_product = (@config.legacy_name || product_ns).underscore
Expand Down Expand Up @@ -74,7 +74,7 @@ func TestAcc<%= test_slug -%>(t *testing.T) {
Config: testAcc<%= test_slug -%>(context),
},
<%#- The Terraform test runner doesn't let us import resources with aliased providers (yet) -%>
<% unless versioned_provider -%>
<% unless example.skip_import_test || versioned_provider -%>
{
ResourceName: "<%= terraform_name -%>.<%= example.primary_resource_id -%>",
ImportState: true,
Expand Down Expand Up @@ -114,7 +114,13 @@ func testAccCheck<%= resource_name -%>DestroyProducer(t *testing.T) func(s *terr
return err
}

_, err = sendRequest(config, "<%= object.read_verb.to_s.upcase -%>", "", url, config.userAgent, nil<%= object.error_retry_predicates ? ", " + object.error_retry_predicates.join(',') : "" -%>)
billingProject := ""

if config.BillingProject != "" {
billingProject = config.BillingProject
}

_, err = sendRequest(config, "<%= object.read_verb.to_s.upcase -%>", billingProject, url, config.userAgent, nil<%= object.error_retry_predicates ? ", " + object.error_retry_predicates.join(',') : "" -%>)
if err == nil {
return fmt.Errorf("<%= resource_name -%> still exists at %s", url)
}
Expand Down
2 changes: 0 additions & 2 deletions templates/terraform/examples/billing_budget_basic.tf.erb
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
data "google_billing_account" "account" {
provider = google-beta
billing_account = "<%= ctx[:test_env_vars]['billing_acct'] -%>"
}

resource "google_billing_budget" "<%= ctx[:primary_resource_id] %>" {
provider = google-beta
billing_account = data.google_billing_account.account.id
display_name = "<%= ctx[:vars]['display_name'] %>"
amount {
Expand Down
7 changes: 4 additions & 3 deletions templates/terraform/examples/billing_budget_filter.tf.erb
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
data "google_billing_account" "account" {
provider = google-beta
billing_account = "<%= ctx[:test_env_vars]['billing_acct'] -%>"
}

data "google_project" "project" {
}

resource "google_billing_budget" "<%= ctx[:primary_resource_id] %>" {
provider = google-beta
billing_account = data.google_billing_account.account.id
display_name = "<%= ctx[:vars]['display_name'] %>"

budget_filter {
projects = ["projects/<%= ctx[:test_env_vars]['project'] -%>"]
projects = ["projects/${data.google_project.project.number}"]
credit_types_treatment = "EXCLUDE_ALL_CREDITS"
services = ["services/24E6-581D-38E5"] # Bigquery
}
Expand Down
7 changes: 4 additions & 3 deletions templates/terraform/examples/billing_budget_lastperiod.tf.erb
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
data "google_billing_account" "account" {
provider = google-beta
billing_account = "<%= ctx[:test_env_vars]['billing_acct'] -%>"
}

data "google_project" "project" {
}

resource "google_billing_budget" "<%= ctx[:primary_resource_id] %>" {
provider = google-beta
billing_account = data.google_billing_account.account.id
display_name = "<%= ctx[:vars]['display_name'] %>"

budget_filter {
projects = ["projects/<%= ctx[:test_env_vars]['project'] -%>"]
projects = ["projects/${data.google_project.project.number}"]
}

amount {
Expand Down
8 changes: 4 additions & 4 deletions templates/terraform/examples/billing_budget_notify.tf.erb
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
data "google_billing_account" "account" {
provider = google-beta
billing_account = "<%= ctx[:test_env_vars]['billing_acct'] -%>"
}

data "google_project" "project" {
}

resource "google_billing_budget" "<%= ctx[:primary_resource_id] %>" {
provider = google-beta
billing_account = data.google_billing_account.account.id
display_name = "<%= ctx[:vars]['budget_name'] %>"

budget_filter {
projects = ["projects/<%= ctx[:test_env_vars]['project'] -%>"]
projects = ["projects/${data.google_project.project.number}"]
}

amount {
Expand All @@ -36,7 +37,6 @@ resource "google_billing_budget" "<%= ctx[:primary_resource_id] %>" {
}

resource "google_monitoring_notification_channel" "notification_channel" {
provider = google-beta
display_name = "<%= ctx[:vars]['channel_name'] %>"
type = "email"

Expand Down