Skip to content

Commit fb4c9e8

Browse files
GCS Backend Buckets Support For Cross-region Internal Application Load Balancer (#14178) (#23499)
[upstream:f3baeb30b46158c3c8387ee626dcad36d4ef6f94] Signed-off-by: Modular Magician <[email protected]>
1 parent b75ec4b commit fb4c9e8

File tree

5 files changed

+104
-0
lines changed

5 files changed

+104
-0
lines changed

.changelog/14178.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 `load_balancing_scheme` field to `google_compute_backend_bucket` resource
3+
```

google/services/compute/resource_compute_backend_bucket.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,13 @@ client when the resource is created.`,
244244
Optional: true,
245245
Description: `If true, enable Cloud CDN for this BackendBucket.`,
246246
},
247+
"load_balancing_scheme": {
248+
Type: schema.TypeString,
249+
Optional: true,
250+
ValidateFunc: verify.ValidateEnum([]string{"INTERNAL_MANAGED", ""}),
251+
Description: `The value can only be INTERNAL_MANAGED for cross-region internal layer 7 load balancer.
252+
If loadBalancingScheme is not specified, the backend bucket can be used by classic global external load balancers, or global application external load balancers, or both. Possible values: ["INTERNAL_MANAGED"]`,
253+
},
247254
"creation_timestamp": {
248255
Type: schema.TypeString,
249256
Computed: true,
@@ -320,6 +327,12 @@ func resourceComputeBackendBucketCreate(d *schema.ResourceData, meta interface{}
320327
} else if v, ok := d.GetOkExists("name"); !tpgresource.IsEmptyValue(reflect.ValueOf(nameProp)) && (ok || !reflect.DeepEqual(v, nameProp)) {
321328
obj["name"] = nameProp
322329
}
330+
loadBalancingSchemeProp, err := expandComputeBackendBucketLoadBalancingScheme(d.Get("load_balancing_scheme"), d, config)
331+
if err != nil {
332+
return err
333+
} else if v, ok := d.GetOkExists("load_balancing_scheme"); ok || !reflect.DeepEqual(v, loadBalancingSchemeProp) {
334+
obj["loadBalancingScheme"] = loadBalancingSchemeProp
335+
}
323336

324337
obj, err = resourceComputeBackendBucketEncoder(d, meta, obj)
325338
if err != nil {
@@ -471,6 +484,9 @@ func resourceComputeBackendBucketRead(d *schema.ResourceData, meta interface{})
471484
if err := d.Set("name", flattenComputeBackendBucketName(res["name"], d, config)); err != nil {
472485
return fmt.Errorf("Error reading BackendBucket: %s", err)
473486
}
487+
if err := d.Set("load_balancing_scheme", flattenComputeBackendBucketLoadBalancingScheme(res["loadBalancingScheme"], d, config)); err != nil {
488+
return fmt.Errorf("Error reading BackendBucket: %s", err)
489+
}
474490
if err := d.Set("self_link", tpgresource.ConvertSelfLinkToV1(res["selfLink"].(string))); err != nil {
475491
return fmt.Errorf("Error reading BackendBucket: %s", err)
476492
}
@@ -542,6 +558,12 @@ func resourceComputeBackendBucketUpdate(d *schema.ResourceData, meta interface{}
542558
} else if v, ok := d.GetOkExists("name"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, nameProp)) {
543559
obj["name"] = nameProp
544560
}
561+
loadBalancingSchemeProp, err := expandComputeBackendBucketLoadBalancingScheme(d.Get("load_balancing_scheme"), d, config)
562+
if err != nil {
563+
return err
564+
} else if v, ok := d.GetOkExists("load_balancing_scheme"); ok || !reflect.DeepEqual(v, loadBalancingSchemeProp) {
565+
obj["loadBalancingScheme"] = loadBalancingSchemeProp
566+
}
545567

546568
obj, err = resourceComputeBackendBucketEncoder(d, meta, obj)
547569
if err != nil {
@@ -944,6 +966,10 @@ func flattenComputeBackendBucketName(v interface{}, d *schema.ResourceData, conf
944966
return v
945967
}
946968

969+
func flattenComputeBackendBucketLoadBalancingScheme(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
970+
return v
971+
}
972+
947973
func expandComputeBackendBucketBucketName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
948974
return v, nil
949975
}
@@ -1190,6 +1216,10 @@ func expandComputeBackendBucketName(v interface{}, d tpgresource.TerraformResour
11901216
return v, nil
11911217
}
11921218

1219+
func expandComputeBackendBucketLoadBalancingScheme(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1220+
return v, nil
1221+
}
1222+
11931223
func resourceComputeBackendBucketEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
11941224
// This custom encoder helps prevent sending 0 for clientTtl, defaultTtl and
11951225
// maxTtl in API calls to update these values when unset in the provider

google/services/compute/resource_compute_backend_bucket_generated_meta.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ fields:
2525
- field: 'description'
2626
- field: 'edge_security_policy'
2727
- field: 'enable_cdn'
28+
- field: 'load_balancing_scheme'
2829
- field: 'name'

google/services/compute/resource_compute_backend_bucket_generated_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/hashicorp/terraform-plugin-testing/terraform"
2727

2828
"github.com/hashicorp/terraform-provider-google/google/acctest"
29+
"github.com/hashicorp/terraform-provider-google/google/envvar"
2930
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
3031
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
3132
)
@@ -476,6 +477,69 @@ resource "google_storage_bucket" "image_bucket" {
476477
`, context)
477478
}
478479

480+
func TestAccComputeBackendBucket_backendBucketGlobalIlbExample(t *testing.T) {
481+
t.Parallel()
482+
483+
context := map[string]interface{}{
484+
"billing_account": envvar.GetTestBillingAccountFromEnv(t),
485+
"org_id": envvar.GetTestOrgFromEnv(t),
486+
"random_suffix": acctest.RandString(t, 10),
487+
}
488+
489+
acctest.VcrTest(t, resource.TestCase{
490+
PreCheck: func() { acctest.AccTestPreCheck(t) },
491+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
492+
CheckDestroy: testAccCheckComputeBackendBucketDestroyProducer(t),
493+
Steps: []resource.TestStep{
494+
{
495+
Config: testAccComputeBackendBucket_backendBucketGlobalIlbExample(context),
496+
},
497+
{
498+
ResourceName: "google_compute_backend_bucket.global-ilb-backend",
499+
ImportState: true,
500+
ImportStateVerify: true,
501+
},
502+
},
503+
})
504+
}
505+
506+
func testAccComputeBackendBucket_backendBucketGlobalIlbExample(context map[string]interface{}) string {
507+
return acctest.Nprintf(`
508+
resource "google_project" "unarmored" {
509+
project_id = "tf-test%{random_suffix}"
510+
name = "tf-test%{random_suffix}"
511+
org_id = "%{org_id}"
512+
billing_account = "%{billing_account}"
513+
deletion_policy = "DELETE"
514+
}
515+
516+
resource "google_project_service" "project" {
517+
project = google_project.unarmored.number
518+
service = "compute.googleapis.com"
519+
disable_on_destroy = true
520+
}
521+
522+
resource "google_compute_backend_bucket" "global-ilb-backend" {
523+
name = "tf-test-global-ilb-backend-bucket%{random_suffix}"
524+
project = google_project.unarmored.number
525+
bucket_name = google_storage_bucket.global-ilb-backend.name
526+
load_balancing_scheme = "INTERNAL_MANAGED"
527+
528+
depends_on = [google_project_service.project]
529+
}
530+
531+
resource "google_storage_bucket" "global-ilb-backend" {
532+
name = "tf-test-global-ilb-bucket%{random_suffix}"
533+
project = google_project.unarmored.number
534+
location = "US-CENTRAL1"
535+
force_destroy = true
536+
uniform_bucket_level_access = true
537+
538+
depends_on = [google_project_service.project]
539+
}
540+
`, context)
541+
}
542+
479543
func testAccCheckComputeBackendBucketDestroyProducer(t *testing.T) func(s *terraform.State) error {
480544
return func(s *terraform.State) error {
481545
for name, rs := range s.RootModule().Resources {

website/docs/r/compute_backend_bucket.html.markdown

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ The following arguments are supported:
186186
(Optional)
187187
If true, enable Cloud CDN for this BackendBucket.
188188

189+
* `load_balancing_scheme` -
190+
(Optional)
191+
The value can only be INTERNAL_MANAGED for cross-region internal layer 7 load balancer.
192+
If loadBalancingScheme is not specified, the backend bucket can be used by classic global external load balancers, or global application external load balancers, or both.
193+
Possible values are: `INTERNAL_MANAGED`.
194+
189195
* `project` - (Optional) The ID of the project in which the resource belongs.
190196
If it is not provided, the provider project is used.
191197

0 commit comments

Comments
 (0)