Skip to content

Commit 804148d

Browse files
Ip address selection policy (#11957) (#8413)
[upstream:4c84dbe59bdde7f2e6a485ac0339ebd0772c9ed0] Signed-off-by: Modular Magician <[email protected]>
1 parent afaa01a commit 804148d

7 files changed

+197
-0
lines changed

.changelog/11957.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `ipAddressSelectionPolicy` field to `google_compute_backend_service` and `google_compute_region_backend_service`.
3+
```

google-beta/services/compute/resource_compute_backend_service.go

+29
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,12 @@ For internal load balancing, a URL to a HealthCheck resource must be specified i
688688
},
689689
},
690690
},
691+
"ip_address_selection_policy": {
692+
Type: schema.TypeString,
693+
Optional: true,
694+
ValidateFunc: verify.ValidateEnum([]string{"IPV4_ONLY", "PREFER_IPV6", "IPV6_ONLY", ""}),
695+
Description: `Specifies preference of traffic to the backend (from the proxy and from the client for proxyless gRPC). Possible values: ["IPV4_ONLY", "PREFER_IPV6", "IPV6_ONLY"]`,
696+
},
691697
"load_balancing_scheme": {
692698
Type: schema.TypeString,
693699
Optional: true,
@@ -1441,6 +1447,12 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
14411447
} else if v, ok := d.GetOkExists("iap"); ok || !reflect.DeepEqual(v, iapProp) {
14421448
obj["iap"] = iapProp
14431449
}
1450+
ipAddressSelectionPolicyProp, err := expandComputeBackendServiceIpAddressSelectionPolicy(d.Get("ip_address_selection_policy"), d, config)
1451+
if err != nil {
1452+
return err
1453+
} else if v, ok := d.GetOkExists("ip_address_selection_policy"); !tpgresource.IsEmptyValue(reflect.ValueOf(ipAddressSelectionPolicyProp)) && (ok || !reflect.DeepEqual(v, ipAddressSelectionPolicyProp)) {
1454+
obj["ipAddressSelectionPolicy"] = ipAddressSelectionPolicyProp
1455+
}
14441456
loadBalancingSchemeProp, err := expandComputeBackendServiceLoadBalancingScheme(d.Get("load_balancing_scheme"), d, config)
14451457
if err != nil {
14461458
return err
@@ -1746,6 +1758,9 @@ func resourceComputeBackendServiceRead(d *schema.ResourceData, meta interface{})
17461758
if err := d.Set("iap", flattenComputeBackendServiceIap(res["iap"], d, config)); err != nil {
17471759
return fmt.Errorf("Error reading BackendService: %s", err)
17481760
}
1761+
if err := d.Set("ip_address_selection_policy", flattenComputeBackendServiceIpAddressSelectionPolicy(res["ipAddressSelectionPolicy"], d, config)); err != nil {
1762+
return fmt.Errorf("Error reading BackendService: %s", err)
1763+
}
17491764
if err := d.Set("load_balancing_scheme", flattenComputeBackendServiceLoadBalancingScheme(res["loadBalancingScheme"], d, config)); err != nil {
17501765
return fmt.Errorf("Error reading BackendService: %s", err)
17511766
}
@@ -1898,6 +1913,12 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
18981913
} else if v, ok := d.GetOkExists("iap"); ok || !reflect.DeepEqual(v, iapProp) {
18991914
obj["iap"] = iapProp
19001915
}
1916+
ipAddressSelectionPolicyProp, err := expandComputeBackendServiceIpAddressSelectionPolicy(d.Get("ip_address_selection_policy"), d, config)
1917+
if err != nil {
1918+
return err
1919+
} else if v, ok := d.GetOkExists("ip_address_selection_policy"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, ipAddressSelectionPolicyProp)) {
1920+
obj["ipAddressSelectionPolicy"] = ipAddressSelectionPolicyProp
1921+
}
19011922
loadBalancingSchemeProp, err := expandComputeBackendServiceLoadBalancingScheme(d.Get("load_balancing_scheme"), d, config)
19021923
if err != nil {
19031924
return err
@@ -2943,6 +2964,10 @@ func flattenComputeBackendServiceIapOauth2ClientSecretSha256(v interface{}, d *s
29432964
return v
29442965
}
29452966

2967+
func flattenComputeBackendServiceIpAddressSelectionPolicy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2968+
return v
2969+
}
2970+
29462971
func flattenComputeBackendServiceLoadBalancingScheme(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
29472972
return v
29482973
}
@@ -4231,6 +4256,10 @@ func expandComputeBackendServiceIapOauth2ClientSecretSha256(v interface{}, d tpg
42314256
return v, nil
42324257
}
42334258

4259+
func expandComputeBackendServiceIpAddressSelectionPolicy(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
4260+
return v, nil
4261+
}
4262+
42344263
func expandComputeBackendServiceLoadBalancingScheme(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
42354264
return v, nil
42364265
}

google-beta/services/compute/resource_compute_backend_service_generated_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,41 @@ resource "google_compute_health_check" "default" {
627627
`, context)
628628
}
629629

630+
func TestAccComputeBackendService_backendServiceIpAddressSelectionPolicyExample(t *testing.T) {
631+
t.Parallel()
632+
633+
context := map[string]interface{}{
634+
"random_suffix": acctest.RandString(t, 10),
635+
}
636+
637+
acctest.VcrTest(t, resource.TestCase{
638+
PreCheck: func() { acctest.AccTestPreCheck(t) },
639+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
640+
CheckDestroy: testAccCheckComputeBackendServiceDestroyProducer(t),
641+
Steps: []resource.TestStep{
642+
{
643+
Config: testAccComputeBackendService_backendServiceIpAddressSelectionPolicyExample(context),
644+
},
645+
{
646+
ResourceName: "google_compute_backend_service.default",
647+
ImportState: true,
648+
ImportStateVerify: true,
649+
ImportStateVerifyIgnore: []string{"iap.0.oauth2_client_secret", "security_settings.0.aws_v4_authentication.0.access_key"},
650+
},
651+
},
652+
})
653+
}
654+
655+
func testAccComputeBackendService_backendServiceIpAddressSelectionPolicyExample(context map[string]interface{}) string {
656+
return acctest.Nprintf(`
657+
resource "google_compute_backend_service" "default" {
658+
name = "tf-test-backend-service%{random_suffix}"
659+
load_balancing_scheme = "EXTERNAL_MANAGED"
660+
ip_address_selection_policy = "IPV6_ONLY"
661+
}
662+
`, context)
663+
}
664+
630665
func testAccCheckComputeBackendServiceDestroyProducer(t *testing.T) func(s *terraform.State) error {
631666
return func(s *terraform.State) error {
632667
for name, rs := range s.RootModule().Resources {

google-beta/services/compute/resource_compute_region_backend_service.go

+29
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,12 @@ or serverless NEG as a backend.`,
683683
},
684684
},
685685
},
686+
"ip_address_selection_policy": {
687+
Type: schema.TypeString,
688+
Optional: true,
689+
ValidateFunc: verify.ValidateEnum([]string{"IPV4_ONLY", "PREFER_IPV6", "IPV6_ONLY", ""}),
690+
Description: `Specifies preference of traffic to the backend (from the proxy and from the client for proxyless gRPC). Possible values: ["IPV4_ONLY", "PREFER_IPV6", "IPV6_ONLY"]`,
691+
},
686692
"load_balancing_scheme": {
687693
Type: schema.TypeString,
688694
Optional: true,
@@ -1297,6 +1303,12 @@ func resourceComputeRegionBackendServiceCreate(d *schema.ResourceData, meta inte
12971303
} else if v, ok := d.GetOkExists("iap"); ok || !reflect.DeepEqual(v, iapProp) {
12981304
obj["iap"] = iapProp
12991305
}
1306+
ipAddressSelectionPolicyProp, err := expandComputeRegionBackendServiceIpAddressSelectionPolicy(d.Get("ip_address_selection_policy"), d, config)
1307+
if err != nil {
1308+
return err
1309+
} else if v, ok := d.GetOkExists("ip_address_selection_policy"); !tpgresource.IsEmptyValue(reflect.ValueOf(ipAddressSelectionPolicyProp)) && (ok || !reflect.DeepEqual(v, ipAddressSelectionPolicyProp)) {
1310+
obj["ipAddressSelectionPolicy"] = ipAddressSelectionPolicyProp
1311+
}
13001312
loadBalancingSchemeProp, err := expandComputeRegionBackendServiceLoadBalancingScheme(d.Get("load_balancing_scheme"), d, config)
13011313
if err != nil {
13021314
return err
@@ -1595,6 +1607,9 @@ func resourceComputeRegionBackendServiceRead(d *schema.ResourceData, meta interf
15951607
if err := d.Set("iap", flattenComputeRegionBackendServiceIap(res["iap"], d, config)); err != nil {
15961608
return fmt.Errorf("Error reading RegionBackendService: %s", err)
15971609
}
1610+
if err := d.Set("ip_address_selection_policy", flattenComputeRegionBackendServiceIpAddressSelectionPolicy(res["ipAddressSelectionPolicy"], d, config)); err != nil {
1611+
return fmt.Errorf("Error reading RegionBackendService: %s", err)
1612+
}
15981613
if err := d.Set("load_balancing_scheme", flattenComputeRegionBackendServiceLoadBalancingScheme(res["loadBalancingScheme"], d, config)); err != nil {
15991614
return fmt.Errorf("Error reading RegionBackendService: %s", err)
16001615
}
@@ -1735,6 +1750,12 @@ func resourceComputeRegionBackendServiceUpdate(d *schema.ResourceData, meta inte
17351750
} else if v, ok := d.GetOkExists("iap"); ok || !reflect.DeepEqual(v, iapProp) {
17361751
obj["iap"] = iapProp
17371752
}
1753+
ipAddressSelectionPolicyProp, err := expandComputeRegionBackendServiceIpAddressSelectionPolicy(d.Get("ip_address_selection_policy"), d, config)
1754+
if err != nil {
1755+
return err
1756+
} else if v, ok := d.GetOkExists("ip_address_selection_policy"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, ipAddressSelectionPolicyProp)) {
1757+
obj["ipAddressSelectionPolicy"] = ipAddressSelectionPolicyProp
1758+
}
17381759
loadBalancingSchemeProp, err := expandComputeRegionBackendServiceLoadBalancingScheme(d.Get("load_balancing_scheme"), d, config)
17391760
if err != nil {
17401761
return err
@@ -2772,6 +2793,10 @@ func flattenComputeRegionBackendServiceIapOauth2ClientSecretSha256(v interface{}
27722793
return v
27732794
}
27742795

2796+
func flattenComputeRegionBackendServiceIpAddressSelectionPolicy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2797+
return v
2798+
}
2799+
27752800
func flattenComputeRegionBackendServiceLoadBalancingScheme(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
27762801
return v
27772802
}
@@ -4007,6 +4032,10 @@ func expandComputeRegionBackendServiceIapOauth2ClientSecretSha256(v interface{},
40074032
return v, nil
40084033
}
40094034

4035+
func expandComputeRegionBackendServiceIpAddressSelectionPolicy(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
4036+
return v, nil
4037+
}
4038+
40104039
func expandComputeRegionBackendServiceLoadBalancingScheme(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
40114040
return v, nil
40124041
}

google-beta/services/compute/resource_compute_region_backend_service_generated_test.go

+48
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,54 @@ resource "google_compute_region_health_check" "health_check" {
594594
`, context)
595595
}
596596

597+
func TestAccComputeRegionBackendService_regionBackendServiceIpAddressSelectionPolicyExample(t *testing.T) {
598+
t.Parallel()
599+
600+
context := map[string]interface{}{
601+
"random_suffix": acctest.RandString(t, 10),
602+
}
603+
604+
acctest.VcrTest(t, resource.TestCase{
605+
PreCheck: func() { acctest.AccTestPreCheck(t) },
606+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
607+
CheckDestroy: testAccCheckComputeRegionBackendServiceDestroyProducer(t),
608+
Steps: []resource.TestStep{
609+
{
610+
Config: testAccComputeRegionBackendService_regionBackendServiceIpAddressSelectionPolicyExample(context),
611+
},
612+
{
613+
ResourceName: "google_compute_region_backend_service.default",
614+
ImportState: true,
615+
ImportStateVerify: true,
616+
ImportStateVerifyIgnore: []string{"iap.0.oauth2_client_secret", "network", "region"},
617+
},
618+
},
619+
})
620+
}
621+
622+
func testAccComputeRegionBackendService_regionBackendServiceIpAddressSelectionPolicyExample(context map[string]interface{}) string {
623+
return acctest.Nprintf(`
624+
resource "google_compute_region_backend_service" "default" {
625+
name = "tf-test-region-service%{random_suffix}"
626+
region = "us-central1"
627+
health_checks = [google_compute_region_health_check.health_check.id]
628+
629+
load_balancing_scheme = "EXTERNAL_MANAGED"
630+
protocol = "HTTP"
631+
ip_address_selection_policy = "IPV6_ONLY"
632+
}
633+
634+
resource "google_compute_region_health_check" "health_check" {
635+
name = "tf-test-rbs-health-check%{random_suffix}"
636+
region = "us-central1"
637+
638+
tcp_health_check {
639+
port = 80
640+
}
641+
}
642+
`, context)
643+
}
644+
597645
func testAccCheckComputeRegionBackendServiceDestroyProducer(t *testing.T) func(s *terraform.State) error {
598646
return func(s *terraform.State) error {
599647
for name, rs := range s.RootModule().Resources {

website/docs/r/compute_backend_service.html.markdown

+20
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,21 @@ resource "google_compute_health_check" "default" {
395395
}
396396
}
397397
```
398+
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
399+
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.jpy.wang%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=backend_service_ip_address_selection_policy&open_in_editor=main.tf" target="_blank">
400+
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
401+
</a>
402+
</div>
403+
## Example Usage - Backend Service Ip Address Selection Policy
404+
405+
406+
```hcl
407+
resource "google_compute_backend_service" "default" {
408+
name = "backend-service"
409+
load_balancing_scheme = "EXTERNAL_MANAGED"
410+
ip_address_selection_policy = "IPV6_ONLY"
411+
}
412+
```
398413

399414
## Argument Reference
400415

@@ -493,6 +508,11 @@ The following arguments are supported:
493508
Settings for enabling Cloud Identity Aware Proxy
494509
Structure is [documented below](#nested_iap).
495510

511+
* `ip_address_selection_policy` -
512+
(Optional)
513+
Specifies preference of traffic to the backend (from the proxy and from the client for proxyless gRPC).
514+
Possible values are: `IPV4_ONLY`, `PREFER_IPV6`, `IPV6_ONLY`.
515+
496516
* `load_balancing_scheme` -
497517
(Optional)
498518
Indicates whether the backend service will be used with internal or

website/docs/r/compute_region_backend_service.html.markdown

+33
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,34 @@ resource "google_compute_region_health_check" "health_check" {
398398
}
399399
}
400400
```
401+
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
402+
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.jpy.wang%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=region_backend_service_ip_address_selection_policy&open_in_editor=main.tf" target="_blank">
403+
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
404+
</a>
405+
</div>
406+
## Example Usage - Region Backend Service Ip Address Selection Policy
407+
408+
409+
```hcl
410+
resource "google_compute_region_backend_service" "default" {
411+
name = "region-service"
412+
region = "us-central1"
413+
health_checks = [google_compute_region_health_check.health_check.id]
414+
415+
load_balancing_scheme = "EXTERNAL_MANAGED"
416+
protocol = "HTTP"
417+
ip_address_selection_policy = "IPV6_ONLY"
418+
}
419+
420+
resource "google_compute_region_health_check" "health_check" {
421+
name = "rbs-health-check"
422+
region = "us-central1"
423+
424+
tcp_health_check {
425+
port = 80
426+
}
427+
}
428+
```
401429

402430
## Argument Reference
403431

@@ -488,6 +516,11 @@ The following arguments are supported:
488516
Settings for enabling Cloud Identity Aware Proxy
489517
Structure is [documented below](#nested_iap).
490518

519+
* `ip_address_selection_policy` -
520+
(Optional)
521+
Specifies preference of traffic to the backend (from the proxy and from the client for proxyless gRPC).
522+
Possible values are: `IPV4_ONLY`, `PREFER_IPV6`, `IPV6_ONLY`.
523+
491524
* `load_balancing_scheme` -
492525
(Optional)
493526
Indicates what kind of load balancing this regional backend service

0 commit comments

Comments
 (0)