diff --git a/.changelog/7053.txt b/.changelog/7053.txt new file mode 100644 index 00000000000..07bbb2067c8 --- /dev/null +++ b/.changelog/7053.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +compute: added the `labels` field to the `google_compute_external_vpn_gateway` resource +``` diff --git a/google/resource_compute_external_vpn_gateway.go b/google/resource_compute_external_vpn_gateway.go index 5dbcc60c16d..63478603733 100644 --- a/google/resource_compute_external_vpn_gateway.go +++ b/google/resource_compute_external_vpn_gateway.go @@ -86,6 +86,13 @@ it cannot be an IP address from Google Compute Engine.`, }, }, }, + "labels": { + Type: schema.TypeMap, + Optional: true, + ForceNew: true, + Description: `Labels for the external VPN gateway resource.`, + Elem: &schema.Schema{Type: schema.TypeString}, + }, "redundancy_type": { Type: schema.TypeString, Optional: true, @@ -122,6 +129,12 @@ func resourceComputeExternalVpnGatewayCreate(d *schema.ResourceData, meta interf } else if v, ok := d.GetOkExists("description"); !isEmptyValue(reflect.ValueOf(descriptionProp)) && (ok || !reflect.DeepEqual(v, descriptionProp)) { obj["description"] = descriptionProp } + labelsProp, err := expandComputeExternalVpnGatewayLabels(d.Get("labels"), d, config) + if err != nil { + return err + } else if v, ok := d.GetOkExists("labels"); !isEmptyValue(reflect.ValueOf(labelsProp)) && (ok || !reflect.DeepEqual(v, labelsProp)) { + obj["labels"] = labelsProp + } nameProp, err := expandComputeExternalVpnGatewayName(d.Get("name"), d, config) if err != nil { return err @@ -224,6 +237,9 @@ func resourceComputeExternalVpnGatewayRead(d *schema.ResourceData, meta interfac if err := d.Set("description", flattenComputeExternalVpnGatewayDescription(res["description"], d, config)); err != nil { return fmt.Errorf("Error reading ExternalVpnGateway: %s", err) } + if err := d.Set("labels", flattenComputeExternalVpnGatewayLabels(res["labels"], d, config)); err != nil { + return fmt.Errorf("Error reading ExternalVpnGateway: %s", err) + } if err := d.Set("name", flattenComputeExternalVpnGatewayName(res["name"], d, config)); err != nil { return fmt.Errorf("Error reading ExternalVpnGateway: %s", err) } @@ -309,6 +325,10 @@ func flattenComputeExternalVpnGatewayDescription(v interface{}, d *schema.Resour return v } +func flattenComputeExternalVpnGatewayLabels(v interface{}, d *schema.ResourceData, config *Config) interface{} { + return v +} + func flattenComputeExternalVpnGatewayName(v interface{}, d *schema.ResourceData, config *Config) interface{} { return v } @@ -361,6 +381,17 @@ func expandComputeExternalVpnGatewayDescription(v interface{}, d TerraformResour return v, nil } +func expandComputeExternalVpnGatewayLabels(v interface{}, d TerraformResourceData, config *Config) (map[string]string, error) { + if v == nil { + return map[string]string{}, nil + } + m := make(map[string]string) + for k, val := range v.(map[string]interface{}) { + m[k] = val.(string) + } + return m, nil +} + func expandComputeExternalVpnGatewayName(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) { return v, nil } diff --git a/google/resource_compute_external_vpn_gateway_generated_test.go b/google/resource_compute_external_vpn_gateway_generated_test.go index 668e02c7757..aa590fe675e 100644 --- a/google/resource_compute_external_vpn_gateway_generated_test.go +++ b/google/resource_compute_external_vpn_gateway_generated_test.go @@ -154,6 +154,48 @@ resource "google_compute_router_peer" "router1_peer2" { `, context) } +func TestAccComputeExternalVpnGateway_onlyExternalVpnGatewayFullExample(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckComputeExternalVpnGatewayDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccComputeExternalVpnGateway_onlyExternalVpnGatewayFullExample(context), + }, + { + ResourceName: "google_compute_external_vpn_gateway.external_gateway", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccComputeExternalVpnGateway_onlyExternalVpnGatewayFullExample(context map[string]interface{}) string { + return Nprintf(` +resource "google_compute_external_vpn_gateway" "external_gateway" { + name = "tf-test-external-gateway%{random_suffix}" + redundancy_type = "SINGLE_IP_INTERNALLY_REDUNDANT" + description = "An externally managed VPN gateway" + interface { + id = 0 + ip_address = "8.8.8.8" + } + labels = { + key = "value" + otherkey = "" + } +} +`, context) +} + func testAccCheckComputeExternalVpnGatewayDestroyProducer(t *testing.T) func(s *terraform.State) error { return func(s *terraform.State) error { for name, rs := range s.RootModule().Resources { diff --git a/website/docs/r/compute_external_vpn_gateway.html.markdown b/website/docs/r/compute_external_vpn_gateway.html.markdown index adc747c8a8e..fd0698a8f23 100644 --- a/website/docs/r/compute_external_vpn_gateway.html.markdown +++ b/website/docs/r/compute_external_vpn_gateway.html.markdown @@ -161,6 +161,10 @@ The following arguments are supported: (Optional) An optional description of this resource. +* `labels` - + (Optional) + Labels for the external VPN gateway resource. + * `redundancy_type` - (Optional) Indicates the redundancy type of this external VPN gateway