From 2502ec09f8184eb64f7d730d7c88b6c535f0e9df Mon Sep 17 00:00:00 2001 From: Riley Karson Date: Wed, 2 Jan 2019 16:56:35 +0000 Subject: [PATCH] Add support for all_ports to google_compute_forwarding_rule for ILB --- .../resource_compute_forwarding_rule.go | 22 +++++++++++++++++++ .../resource_compute_forwarding_rule_test.go | 2 +- .../r/compute_forwarding_rule.html.markdown | 6 +++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/google-beta/resource_compute_forwarding_rule.go b/google-beta/resource_compute_forwarding_rule.go index 80b6ddc0e8..2a9567b99e 100644 --- a/google-beta/resource_compute_forwarding_rule.go +++ b/google-beta/resource_compute_forwarding_rule.go @@ -63,6 +63,11 @@ func resourceComputeForwardingRule() *schema.Resource { ValidateFunc: validation.StringInSlice([]string{"TCP", "UDP", "ESP", "AH", "SCTP", "ICMP", ""}, false), DiffSuppressFunc: caseDiffSuppress, }, + "all_ports": { + Type: schema.TypeBool, + Optional: true, + ForceNew: true, + }, "backend_service": { Type: schema.TypeString, Optional: true, @@ -261,6 +266,12 @@ func resourceComputeForwardingRuleCreate(d *schema.ResourceData, meta interface{ } else if v, ok := d.GetOkExists("label_fingerprint"); !isEmptyValue(reflect.ValueOf(labelFingerprintProp)) && (ok || !reflect.DeepEqual(v, labelFingerprintProp)) { obj["labelFingerprint"] = labelFingerprintProp } + allPortsProp, err := expandComputeForwardingRuleAllPorts(d.Get("all_ports"), d, config) + if err != nil { + return err + } else if v, ok := d.GetOkExists("all_ports"); !isEmptyValue(reflect.ValueOf(allPortsProp)) && (ok || !reflect.DeepEqual(v, allPortsProp)) { + obj["allPorts"] = allPortsProp + } networkTierProp, err := expandComputeForwardingRuleNetworkTier(d.Get("network_tier"), d, config) if err != nil { return err @@ -427,6 +438,9 @@ func resourceComputeForwardingRuleRead(d *schema.ResourceData, meta interface{}) if err := d.Set("label_fingerprint", flattenComputeForwardingRuleLabelFingerprint(res["labelFingerprint"], d)); err != nil { return fmt.Errorf("Error reading ForwardingRule: %s", err) } + if err := d.Set("all_ports", flattenComputeForwardingRuleAllPorts(res["allPorts"], d)); err != nil { + return fmt.Errorf("Error reading ForwardingRule: %s", err) + } if err := d.Set("network_tier", flattenComputeForwardingRuleNetworkTier(res["networkTier"], d)); err != nil { return fmt.Errorf("Error reading ForwardingRule: %s", err) } @@ -668,6 +682,10 @@ func flattenComputeForwardingRuleLabelFingerprint(v interface{}, d *schema.Resou return v } +func flattenComputeForwardingRuleAllPorts(v interface{}, d *schema.ResourceData) interface{} { + return v +} + func flattenComputeForwardingRuleNetworkTier(v interface{}, d *schema.ResourceData) interface{} { return v } @@ -808,6 +826,10 @@ func expandComputeForwardingRuleLabelFingerprint(v interface{}, d *schema.Resour return v, nil } +func expandComputeForwardingRuleAllPorts(v interface{}, d *schema.ResourceData, config *Config) (interface{}, error) { + return v, nil +} + func expandComputeForwardingRuleNetworkTier(v interface{}, d *schema.ResourceData, config *Config) (interface{}, error) { return v, nil } diff --git a/google-beta/resource_compute_forwarding_rule_test.go b/google-beta/resource_compute_forwarding_rule_test.go index 32b06796c5..50ed9f33fe 100644 --- a/google-beta/resource_compute_forwarding_rule_test.go +++ b/google-beta/resource_compute_forwarding_rule_test.go @@ -247,7 +247,7 @@ resource "google_compute_forwarding_rule" "foobar" { name = "%s" load_balancing_scheme = "INTERNAL" backend_service = "${google_compute_region_backend_service.foobar-bs.self_link}" - ports = ["80"] + all_ports = true network = "${google_compute_network.foobar.name}" subnetwork = "%s" } diff --git a/website/docs/r/compute_forwarding_rule.html.markdown b/website/docs/r/compute_forwarding_rule.html.markdown index 4a427537df..1816705b87 100644 --- a/website/docs/r/compute_forwarding_rule.html.markdown +++ b/website/docs/r/compute_forwarding_rule.html.markdown @@ -190,6 +190,12 @@ The following arguments are supported: (Optional, [Beta](https://terraform.io/docs/providers/google/provider_versions.html)) Labels to apply to this forwarding rule. A list of key->value pairs. +* `all_ports` - + (Optional, [Beta](https://terraform.io/docs/providers/google/provider_versions.html)) + When the load balancing scheme is INTERNAL and protocol is TCP/UDP, omit + `port`/`port_range` and specify this field as `true` to allow packets addressed + to any ports to be forwarded to the backends configured with this forwarding rule. + * `network_tier` - (Optional) The networking tier used for configuring this address. This field can