Skip to content

Commit 0ec67c9

Browse files
add Forward_proxy to compute.backendService DynamicForwarding (#16665) (#11723)
[upstream:07aa40da9007eababf64ca07bce9454bb9eeddcd] Signed-off-by: Modular Magician <[email protected]>
1 parent 5d594fc commit 0ec67c9

File tree

5 files changed

+248
-4
lines changed

5 files changed

+248
-4
lines changed

.changelog/16665.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `ForwardProxy` field in `google_compute_region_backend_service` resource
3+
```

google-beta/services/compute/resource_compute_region_backend_service.go

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,28 @@ feature which together with Service Extension allows customized and complex rout
678678
MaxItems: 1,
679679
Elem: &schema.Resource{
680680
Schema: map[string]*schema.Schema{
681+
"forward_proxy": {
682+
Type: schema.TypeList,
683+
Optional: true,
684+
Description: `Dynamic Forwarding Proxy configuration.`,
685+
MaxItems: 1,
686+
Elem: &schema.Resource{
687+
Schema: map[string]*schema.Schema{
688+
"enabled": {
689+
Type: schema.TypeBool,
690+
Required: true,
691+
ForceNew: true,
692+
Description: `A boolean flag enabling dynamic forwarding proxy.`,
693+
},
694+
"proxy_mode": {
695+
Type: schema.TypeString,
696+
Required: true,
697+
ValidateFunc: verify.ValidateEnum([]string{"DIRECT_FORWARDING", "CLOUD_RUN"}),
698+
Description: `Determines the dynamic forwarding proxy mode Possible values: ["DIRECT_FORWARDING", "CLOUD_RUN"]`,
699+
},
700+
},
701+
},
702+
},
681703
"ip_port_selection": {
682704
Type: schema.TypeList,
683705
Optional: true,
@@ -881,11 +903,11 @@ If OAuth client is not set, Google-managed OAuth client is used.`,
881903
Type: schema.TypeString,
882904
Optional: true,
883905
ForceNew: true,
884-
ValidateFunc: verify.ValidateEnum([]string{"EXTERNAL", "EXTERNAL_MANAGED", "INTERNAL", "INTERNAL_MANAGED", ""}),
906+
ValidateFunc: verify.ValidateEnum([]string{"EXTERNAL", "EXTERNAL_MANAGED", "INTERNAL", "INTERNAL_MANAGED", "INTERNAL_SELF_MANAGED", ""}),
885907
Description: `Indicates what kind of load balancing this regional backend service
886908
will be used for. A backend service created for one type of load
887909
balancing cannot be used with the other(s). For more information, refer to
888-
[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service). Default value: "INTERNAL" Possible values: ["EXTERNAL", "EXTERNAL_MANAGED", "INTERNAL", "INTERNAL_MANAGED"]`,
910+
[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service). Default value: "INTERNAL" Possible values: ["EXTERNAL", "EXTERNAL_MANAGED", "INTERNAL", "INTERNAL_MANAGED", "INTERNAL_SELF_MANAGED"]`,
889911
Default: "INTERNAL",
890912
},
891913
"locality_lb_policy": {
@@ -3979,6 +4001,8 @@ func flattenComputeRegionBackendServiceDynamicForwarding(v interface{}, d *schem
39794001
transformed := make(map[string]interface{})
39804002
transformed["ip_port_selection"] =
39814003
flattenComputeRegionBackendServiceDynamicForwardingIpPortSelection(original["ipPortSelection"], d, config)
4004+
transformed["forward_proxy"] =
4005+
flattenComputeRegionBackendServiceDynamicForwardingForwardProxy(original["forwardProxy"], d, config)
39824006
return []interface{}{transformed}
39834007
}
39844008
func flattenComputeRegionBackendServiceDynamicForwardingIpPortSelection(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
@@ -3998,6 +4022,29 @@ func flattenComputeRegionBackendServiceDynamicForwardingIpPortSelectionEnabled(v
39984022
return v
39994023
}
40004024

4025+
func flattenComputeRegionBackendServiceDynamicForwardingForwardProxy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4026+
if v == nil {
4027+
return nil
4028+
}
4029+
original := v.(map[string]interface{})
4030+
if len(original) == 0 {
4031+
return nil
4032+
}
4033+
transformed := make(map[string]interface{})
4034+
transformed["enabled"] =
4035+
flattenComputeRegionBackendServiceDynamicForwardingForwardProxyEnabled(original["enabled"], d, config)
4036+
transformed["proxy_mode"] =
4037+
flattenComputeRegionBackendServiceDynamicForwardingForwardProxyProxyMode(original["proxyMode"], d, config)
4038+
return []interface{}{transformed}
4039+
}
4040+
func flattenComputeRegionBackendServiceDynamicForwardingForwardProxyEnabled(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4041+
return v
4042+
}
4043+
4044+
func flattenComputeRegionBackendServiceDynamicForwardingForwardProxyProxyMode(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4045+
return v
4046+
}
4047+
40014048
func flattenComputeRegionBackendServiceHaPolicy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
40024049
if v == nil {
40034050
return nil
@@ -5580,6 +5627,13 @@ func expandComputeRegionBackendServiceDynamicForwarding(v interface{}, d tpgreso
55805627
transformed["ipPortSelection"] = transformedIpPortSelection
55815628
}
55825629

5630+
transformedForwardProxy, err := expandComputeRegionBackendServiceDynamicForwardingForwardProxy(original["forward_proxy"], d, config)
5631+
if err != nil {
5632+
return nil, err
5633+
} else if val := reflect.ValueOf(transformedForwardProxy); val.IsValid() && !tpgresource.IsEmptyValue(val) {
5634+
transformed["forwardProxy"] = transformedForwardProxy
5635+
}
5636+
55835637
return transformed, nil
55845638
}
55855639

@@ -5609,6 +5663,43 @@ func expandComputeRegionBackendServiceDynamicForwardingIpPortSelectionEnabled(v
56095663
return v, nil
56105664
}
56115665

5666+
func expandComputeRegionBackendServiceDynamicForwardingForwardProxy(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
5667+
if v == nil {
5668+
return nil, nil
5669+
}
5670+
l := v.([]interface{})
5671+
if len(l) == 0 || l[0] == nil {
5672+
return nil, nil
5673+
}
5674+
raw := l[0]
5675+
original := raw.(map[string]interface{})
5676+
transformed := make(map[string]interface{})
5677+
5678+
transformedEnabled, err := expandComputeRegionBackendServiceDynamicForwardingForwardProxyEnabled(original["enabled"], d, config)
5679+
if err != nil {
5680+
return nil, err
5681+
} else if val := reflect.ValueOf(transformedEnabled); val.IsValid() && !tpgresource.IsEmptyValue(val) {
5682+
transformed["enabled"] = transformedEnabled
5683+
}
5684+
5685+
transformedProxyMode, err := expandComputeRegionBackendServiceDynamicForwardingForwardProxyProxyMode(original["proxy_mode"], d, config)
5686+
if err != nil {
5687+
return nil, err
5688+
} else if val := reflect.ValueOf(transformedProxyMode); val.IsValid() && !tpgresource.IsEmptyValue(val) {
5689+
transformed["proxyMode"] = transformedProxyMode
5690+
}
5691+
5692+
return transformed, nil
5693+
}
5694+
5695+
func expandComputeRegionBackendServiceDynamicForwardingForwardProxyEnabled(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
5696+
return v, nil
5697+
}
5698+
5699+
func expandComputeRegionBackendServiceDynamicForwardingForwardProxyProxyMode(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
5700+
return v, nil
5701+
}
5702+
56125703
func expandComputeRegionBackendServiceHaPolicy(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
56135704
if v == nil {
56145705
return nil, nil
@@ -5827,7 +5918,7 @@ func expandComputeRegionBackendServiceRegion(v interface{}, d tpgresource.Terraf
58275918
}
58285919

58295920
func resourceComputeRegionBackendServiceEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
5830-
if d.Get("load_balancing_scheme").(string) == "EXTERNAL_MANAGED" || d.Get("load_balancing_scheme").(string) == "INTERNAL_MANAGED" {
5921+
if d.Get("load_balancing_scheme").(string) == "EXTERNAL_MANAGED" || d.Get("load_balancing_scheme").(string) == "INTERNAL_MANAGED" || d.Get("load_balancing_scheme").(string) == "INTERNAL_SELF_MANAGED" {
58315922
return obj, nil
58325923
}
58335924

google-beta/services/compute/resource_compute_region_backend_service_generated_meta.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ fields:
8282
- api_field: customMetrics.dryRun
8383
- api_field: customMetrics.name
8484
- api_field: description
85+
- api_field: dynamicForwarding.forwardProxy.enabled
86+
- api_field: dynamicForwarding.forwardProxy.proxyMode
8587
- api_field: dynamicForwarding.ipPortSelection.enabled
8688
- api_field: enableCDN
8789
- api_field: failoverPolicy.disableConnectionDrainOnFailover

google-beta/services/compute/resource_compute_region_backend_service_generated_test.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,92 @@ resource "google_compute_region_backend_service" "default" {
779779
`, context)
780780
}
781781

782+
func TestAccComputeRegionBackendService_regionBackendServiceDynamicForwardingForwardProxyCloudRunExample(t *testing.T) {
783+
t.Parallel()
784+
785+
context := map[string]interface{}{
786+
"random_suffix": acctest.RandString(t, 10),
787+
}
788+
789+
acctest.VcrTest(t, resource.TestCase{
790+
PreCheck: func() { acctest.AccTestPreCheck(t) },
791+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
792+
CheckDestroy: testAccCheckComputeRegionBackendServiceDestroyProducer(t),
793+
Steps: []resource.TestStep{
794+
{
795+
Config: testAccComputeRegionBackendService_regionBackendServiceDynamicForwardingForwardProxyCloudRunExample(context),
796+
},
797+
{
798+
ResourceName: "google_compute_region_backend_service.default",
799+
ImportState: true,
800+
ImportStateVerify: true,
801+
ImportStateVerifyIgnore: []string{"iap.0.oauth2_client_secret", "network", "params", "region"},
802+
},
803+
},
804+
})
805+
}
806+
807+
func testAccComputeRegionBackendService_regionBackendServiceDynamicForwardingForwardProxyCloudRunExample(context map[string]interface{}) string {
808+
return acctest.Nprintf(`
809+
resource "google_compute_region_backend_service" "default" {
810+
provider = google-beta
811+
name = "tf-test-region-service%{random_suffix}"
812+
region = "us-central1"
813+
load_balancing_scheme = "INTERNAL_SELF_MANAGED"
814+
protocol = "HTTP2"
815+
dynamic_forwarding {
816+
forward_proxy {
817+
enabled = true
818+
proxy_mode = "CLOUD_RUN"
819+
}
820+
}
821+
}
822+
`, context)
823+
}
824+
825+
func TestAccComputeRegionBackendService_regionBackendServiceDynamicForwardingForwardProxyDirectForwardingExample(t *testing.T) {
826+
t.Parallel()
827+
828+
context := map[string]interface{}{
829+
"random_suffix": acctest.RandString(t, 10),
830+
}
831+
832+
acctest.VcrTest(t, resource.TestCase{
833+
PreCheck: func() { acctest.AccTestPreCheck(t) },
834+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
835+
CheckDestroy: testAccCheckComputeRegionBackendServiceDestroyProducer(t),
836+
Steps: []resource.TestStep{
837+
{
838+
Config: testAccComputeRegionBackendService_regionBackendServiceDynamicForwardingForwardProxyDirectForwardingExample(context),
839+
},
840+
{
841+
ResourceName: "google_compute_region_backend_service.default",
842+
ImportState: true,
843+
ImportStateVerify: true,
844+
ImportStateVerifyIgnore: []string{"iap.0.oauth2_client_secret", "network", "params", "region"},
845+
},
846+
},
847+
})
848+
}
849+
850+
func testAccComputeRegionBackendService_regionBackendServiceDynamicForwardingForwardProxyDirectForwardingExample(context map[string]interface{}) string {
851+
return acctest.Nprintf(`
852+
resource "google_compute_region_backend_service" "default" {
853+
provider = google-beta
854+
name = "tf-test-region-service%{random_suffix}"
855+
region = "us-central1"
856+
load_balancing_scheme = "INTERNAL_SELF_MANAGED"
857+
protocol = "HTTP2"
858+
dynamic_forwarding {
859+
forward_proxy {
860+
enabled = true
861+
proxy_mode = "DIRECT_FORWARDING"
862+
}
863+
}
864+
}
865+
`, context)
866+
}
867+
782868
func TestAccComputeRegionBackendService_regionBackendServiceHaPolicyExample(t *testing.T) {
783869
t.Parallel()
784870

website/docs/r/compute_region_backend_service.html.markdown

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,52 @@ resource "google_compute_region_backend_service" "default" {
556556
}
557557
}
558558
```
559+
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
560+
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%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_dynamic_forwarding_forward_proxy_cloud_run&open_in_editor=main.tf" target="_blank">
561+
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
562+
</a>
563+
</div>
564+
## Example Usage - Region Backend Service Dynamic Forwarding Forward Proxy Cloud Run
565+
566+
567+
```hcl
568+
resource "google_compute_region_backend_service" "default" {
569+
provider = google-beta
570+
name = "region-service"
571+
region = "us-central1"
572+
load_balancing_scheme = "INTERNAL_SELF_MANAGED"
573+
protocol = "HTTP2"
574+
dynamic_forwarding {
575+
forward_proxy {
576+
enabled = true
577+
proxy_mode = "CLOUD_RUN"
578+
}
579+
}
580+
}
581+
```
582+
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
583+
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%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_dynamic_forwarding_forward_proxy_direct_forwarding&open_in_editor=main.tf" target="_blank">
584+
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
585+
</a>
586+
</div>
587+
## Example Usage - Region Backend Service Dynamic Forwarding Forward Proxy Direct Forwarding
588+
589+
590+
```hcl
591+
resource "google_compute_region_backend_service" "default" {
592+
provider = google-beta
593+
name = "region-service"
594+
region = "us-central1"
595+
load_balancing_scheme = "INTERNAL_SELF_MANAGED"
596+
protocol = "HTTP2"
597+
dynamic_forwarding {
598+
forward_proxy {
599+
enabled = true
600+
proxy_mode = "DIRECT_FORWARDING"
601+
}
602+
}
603+
}
604+
```
559605
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
560606
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%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_ha_policy&open_in_editor=main.tf" target="_blank">
561607
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
@@ -804,7 +850,7 @@ The following arguments are supported:
804850
balancing cannot be used with the other(s). For more information, refer to
805851
[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service).
806852
Default value is `INTERNAL`.
807-
Possible values are: `EXTERNAL`, `EXTERNAL_MANAGED`, `INTERNAL`, `INTERNAL_MANAGED`.
853+
Possible values are: `EXTERNAL`, `EXTERNAL_MANAGED`, `INTERNAL`, `INTERNAL_MANAGED`, `INTERNAL_SELF_MANAGED`.
808854

809855
* `locality_lb_policy` -
810856
(Optional)
@@ -1665,13 +1711,29 @@ The following arguments are supported:
16651711
IP:PORT based dynamic forwarding configuration.
16661712
Structure is [documented below](#nested_dynamic_forwarding_ip_port_selection).
16671713

1714+
* `forward_proxy` -
1715+
(Optional, [Beta](../guides/provider_versions.html.markdown))
1716+
Dynamic Forwarding Proxy configuration.
1717+
Structure is [documented below](#nested_dynamic_forwarding_forward_proxy).
1718+
16681719

16691720
<a name="nested_dynamic_forwarding_ip_port_selection"></a>The `ip_port_selection` block supports:
16701721

16711722
* `enabled` -
16721723
(Optional, [Beta](../guides/provider_versions.html.markdown))
16731724
A boolean flag enabling IP:PORT based dynamic forwarding.
16741725

1726+
<a name="nested_dynamic_forwarding_forward_proxy"></a>The `forward_proxy` block supports:
1727+
1728+
* `enabled` -
1729+
(Required, [Beta](../guides/provider_versions.html.markdown))
1730+
A boolean flag enabling dynamic forwarding proxy.
1731+
1732+
* `proxy_mode` -
1733+
(Required, [Beta](../guides/provider_versions.html.markdown))
1734+
Determines the dynamic forwarding proxy mode
1735+
Possible values are: `DIRECT_FORWARDING`, `CLOUD_RUN`.
1736+
16751737
<a name="nested_ha_policy"></a>The `ha_policy` block supports:
16761738

16771739
* `fast_ip_move` -

0 commit comments

Comments
 (0)