From 6447dd095f747f3fce0f193daf1dedc19b494d51 Mon Sep 17 00:00:00 2001 From: emily Date: Fri, 27 Dec 2019 11:07:46 -0800 Subject: [PATCH] Add example, fix inferred zone for disk resource policies attachment (#2883) Merged PR #2883. --- build/terraform | 2 +- build/terraform-beta | 2 +- build/terraform-mapper | 2 +- products/compute/terraform.yaml | 7 +++++ ...e_disk_resource_policies_attachment.go.erb | 16 +++++++++- ...sk_resource_policy_attachment_basic.tf.erb | 31 +++++++++++++++++++ ...e_disk_resource_policies_attachment.go.erb | 17 ++++++++-- ...te_disk_resource_policy_attachment_test.go | 2 +- 8 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 templates/terraform/examples/disk_resource_policy_attachment_basic.tf.erb diff --git a/build/terraform b/build/terraform index cf09a0c79e39..52e88ebc6feb 160000 --- a/build/terraform +++ b/build/terraform @@ -1 +1 @@ -Subproject commit cf09a0c79e39975bccb728d20fca36ef160e4460 +Subproject commit 52e88ebc6feb5ac36e9b4cc077395d339c2deca4 diff --git a/build/terraform-beta b/build/terraform-beta index a019f25b7aa3..4da329c59fde 160000 --- a/build/terraform-beta +++ b/build/terraform-beta @@ -1 +1 @@ -Subproject commit a019f25b7aa369c56f2f6744a3c4c0ecbf17b616 +Subproject commit 4da329c59fde8f18a0f2afdbe2be527822616f97 diff --git a/build/terraform-mapper b/build/terraform-mapper index 692930b6db1b..96e955579c27 160000 --- a/build/terraform-mapper +++ b/build/terraform-mapper @@ -1 +1 @@ -Subproject commit 692930b6db1b610615f7ba7fe3f460598ec93ffd +Subproject commit 96e955579c276aa7d94e32ca7c1136612537c9cc diff --git a/products/compute/terraform.yaml b/products/compute/terraform.yaml index 504f6de47f62..e15a146ab9e9 100644 --- a/products/compute/terraform.yaml +++ b/products/compute/terraform.yaml @@ -342,6 +342,13 @@ overrides: !ruby/object:Overrides::ResourceOverrides Because the API does not return the sensitive key value, we cannot confirm or reverse changes to a key outside of Terraform. DiskResourcePolicyAttachment: !ruby/object:Overrides::Terraform::ResourceOverride + examples: + - !ruby/object:Provider::Terraform::Examples + name: "disk_resource_policy_attachment_basic" + primary_resource_id: "attachment" + vars: + disk_name: "my-disk" + policy_name: "my-resource-policy" id_format: "{{project}}/{{zone}}/{{disk}}/{{name}}" custom_code: !ruby/object:Provider::Terraform::CustomCode encoder: templates/terraform/encoders/compute_disk_resource_policies_attachment.go.erb diff --git a/templates/terraform/encoders/compute_disk_resource_policies_attachment.go.erb b/templates/terraform/encoders/compute_disk_resource_policies_attachment.go.erb index 584c6462f9dd..e570972b4c72 100644 --- a/templates/terraform/encoders/compute_disk_resource_policies_attachment.go.erb +++ b/templates/terraform/encoders/compute_disk_resource_policies_attachment.go.erb @@ -4,7 +4,21 @@ if err != nil { return nil, err } -region := getRegionFromZone(d.Get("zone").(string)) +zone, err := getZone(d, config) +if err != nil { + return nil, err +} +if zone == "" { + return nil, fmt.Errorf("zone must be non-empty - set in resource or at provider-level") +} + +// resourcePolicies are referred to by region but affixed to zonal disks. +// We construct the regional name from the zone: +// projects/{project}/regions/{region}/resourcePolicies/{resourceId} +region := getRegionFromZone(zone) +if region == "" { + return nil, fmt.Errorf("invalid zone %q, unable to infer region from zone", zone) +} obj["resourcePolicies"] = []interface{}{fmt.Sprintf("projects/%s/regions/%s/resourcePolicies/%s", project, region, obj["name"])} delete(obj, "name") diff --git a/templates/terraform/examples/disk_resource_policy_attachment_basic.tf.erb b/templates/terraform/examples/disk_resource_policy_attachment_basic.tf.erb new file mode 100644 index 000000000000..02b249978a5b --- /dev/null +++ b/templates/terraform/examples/disk_resource_policy_attachment_basic.tf.erb @@ -0,0 +1,31 @@ +resource "google_compute_disk_resource_policy_attachment" "<%= ctx[:primary_resource_id] %>" { + name = google_compute_resource_policy.policy.name + disk = google_compute_disk.ssd.name + zone = "us-central1-a" +} + +resource "google_compute_disk" "ssd" { + name = "<%= ctx[:vars]['disk_name'] %>" + image = data.google_compute_image.my_image.self_link + size = 50 + type = "pd-ssd" + zone = "us-central1-a" +} + +resource "google_compute_resource_policy" "policy" { + name = "<%= ctx[:vars]['policy_name'] %>" + region = "us-central1" + snapshot_schedule_policy { + schedule { + daily_schedule { + days_in_cycle = 1 + start_time = "04:00" + } + } + } +} + +data "google_compute_image" "my_image" { + family = "debian-9" + project = "debian-cloud" +} diff --git a/templates/terraform/pre_delete/compute_disk_resource_policies_attachment.go.erb b/templates/terraform/pre_delete/compute_disk_resource_policies_attachment.go.erb index 82bee6607463..83aef8b37959 100644 --- a/templates/terraform/pre_delete/compute_disk_resource_policies_attachment.go.erb +++ b/templates/terraform/pre_delete/compute_disk_resource_policies_attachment.go.erb @@ -1,7 +1,20 @@ obj = make(map[string]interface{}) -// projects/{project}/regions/{region}/resourcePolicies/{resourceId} -region := getRegionFromZone(d.Get("zone").(string)) +zone, err := getZone(d, config) +if err != nil { + return err +} +if zone == "" { + return fmt.Errorf("zone must be non-empty - set in resource or at provider-level") +} + +// resourcePolicies are referred to by region but affixed to zonal disks. +// We construct the regional name from the zone: +// projects/{project}/regions/{region}/resourcePolicies/{resourceId} +region := getRegionFromZone(zone) +if region == "" { + return fmt.Errorf("invalid zone %q, unable to infer region from zone", zone) +} name, err := expandComputeDiskResourcePolicyAttachmentName(d.Get("name"), d, config) if err != nil { diff --git a/third_party/terraform/tests/resource_compute_disk_resource_policy_attachment_test.go b/third_party/terraform/tests/resource_compute_disk_resource_policy_attachment_test.go index cb1ddda195f3..8ab3a2c89629 100644 --- a/third_party/terraform/tests/resource_compute_disk_resource_policy_attachment_test.go +++ b/third_party/terraform/tests/resource_compute_disk_resource_policy_attachment_test.go @@ -8,7 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccComputeDiskResourcePolicyAttachment_basic(t *testing.T) { +func TestAccComputeDiskResourcePolicyAttachment_update(t *testing.T) { t.Parallel() diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))