Skip to content

Commit f0cd035

Browse files
Add google_compute_region_backend_service Datasource (#13305) (#21986)
[upstream:4aa51db4e6444d3b505308b0473cf07518b40faf] Signed-off-by: Modular Magician <[email protected]>
1 parent fbf498b commit f0cd035

File tree

5 files changed

+204
-0
lines changed

5 files changed

+204
-0
lines changed

.changelog/13305.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-datasource
2+
`google_compute_region_backend_service`
3+
```

google/provider/provider_mmv1_resources.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
374374
"google_vmwareengine_private_cloud": vmwareengine.DataSourceVmwareenginePrivateCloud(),
375375
"google_vmwareengine_subnet": vmwareengine.DataSourceVmwareengineSubnet(),
376376
"google_vmwareengine_vcenter_credentials": vmwareengine.DataSourceVmwareengineVcenterCredentials(),
377+
"google_compute_region_backend_service": compute.DataSourceGoogleComputeRegionBackendService(),
377378
// ####### END handwritten datasources ###########
378379
}
379380

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package compute
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
10+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
11+
)
12+
13+
func DataSourceGoogleComputeRegionBackendService() *schema.Resource {
14+
// Get schema from the resource
15+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceComputeRegionBackendService().Schema)
16+
17+
// Set 'Required' schema elements
18+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "name")
19+
20+
// Set 'Optional' schema elements
21+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
22+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "region")
23+
24+
return &schema.Resource{
25+
Read: dataSourceComputeRegionBackendServiceRead,
26+
Schema: dsSchema,
27+
}
28+
}
29+
30+
func dataSourceComputeRegionBackendServiceRead(d *schema.ResourceData, meta interface{}) error {
31+
config := meta.(*transport_tpg.Config)
32+
33+
region, err := tpgresource.GetRegion(d, config)
34+
if err != nil {
35+
return err
36+
}
37+
38+
project, err := tpgresource.GetProject(d, config)
39+
if err != nil {
40+
return err
41+
}
42+
43+
name := d.Get("name").(string)
44+
45+
id := fmt.Sprintf("projects/%s/regions/%s/backendServices/%s", project, region, name)
46+
d.SetId(id)
47+
48+
err = ResourceComputeRegionBackendService().Read(d, meta)
49+
if err != nil {
50+
return err
51+
}
52+
53+
if d.Id() == "" {
54+
return fmt.Errorf("%s not found", id)
55+
}
56+
57+
return nil
58+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package compute_test
4+
5+
import (
6+
"fmt"
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
10+
"github.com/hashicorp/terraform-provider-google/google/acctest"
11+
)
12+
13+
func TestAccDataSourceComputeRegionBackendService_basic(t *testing.T) {
14+
t.Parallel()
15+
16+
serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
17+
checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
18+
region := "us-central1"
19+
20+
acctest.VcrTest(t, resource.TestCase{
21+
PreCheck: func() { acctest.AccTestPreCheck(t) },
22+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
23+
Steps: []resource.TestStep{
24+
{
25+
Config: testAccDataSourceComputeRegionBackendService_basic(serviceName, checkName, region),
26+
Check: acctest.CheckDataSourceStateMatchesResourceState("data.google_compute_region_backend_service.baz", "google_compute_region_backend_service.foobar"),
27+
},
28+
},
29+
})
30+
}
31+
32+
func testAccDataSourceComputeRegionBackendService_basic(serviceName, checkName, region string) string {
33+
return fmt.Sprintf(`
34+
resource "google_compute_region_backend_service" "foobar" {
35+
name = "%s"
36+
description = "foobar backend service"
37+
region = "%s"
38+
protocol = "HTTP"
39+
load_balancing_scheme = "INTERNAL_MANAGED"
40+
health_checks = [google_compute_region_health_check.zero.self_link]
41+
}
42+
43+
resource "google_compute_region_health_check" "zero" {
44+
name = "%s"
45+
region = "%s"
46+
http_health_check {
47+
port = 80
48+
}
49+
}
50+
51+
data "google_compute_region_backend_service" "baz" {
52+
name = google_compute_region_backend_service.foobar.name
53+
region = google_compute_region_backend_service.foobar.region
54+
}
55+
`, serviceName, region, checkName, region)
56+
}
57+
58+
func TestAccDataSourceComputeRegionBackendService_withProject(t *testing.T) {
59+
t.Parallel()
60+
61+
serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
62+
checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
63+
region := "us-central1"
64+
65+
acctest.VcrTest(t, resource.TestCase{
66+
PreCheck: func() { acctest.AccTestPreCheck(t) },
67+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
68+
Steps: []resource.TestStep{
69+
{
70+
Config: testAccDataSourceComputeRegionBackendService_withProject(serviceName, checkName, region),
71+
Check: resource.ComposeTestCheckFunc(
72+
acctest.CheckDataSourceStateMatchesResourceState("data.google_compute_region_backend_service.baz", "google_compute_region_backend_service.foobar"),
73+
resource.TestCheckResourceAttrSet("data.google_compute_region_backend_service.baz", "project"),
74+
),
75+
},
76+
},
77+
})
78+
}
79+
80+
func testAccDataSourceComputeRegionBackendService_withProject(serviceName, checkName, region string) string {
81+
return fmt.Sprintf(`
82+
resource "google_compute_region_backend_service" "foobar" {
83+
name = "%s"
84+
description = "foobar backend service"
85+
region = "%s"
86+
protocol = "HTTP"
87+
load_balancing_scheme = "INTERNAL_MANAGED"
88+
health_checks = [google_compute_region_health_check.zero.self_link]
89+
}
90+
91+
resource "google_compute_region_health_check" "zero" {
92+
name = "%s"
93+
region = "%s"
94+
http_health_check {
95+
port = 80
96+
}
97+
}
98+
99+
data "google_compute_region_backend_service" "baz" {
100+
project = google_compute_region_backend_service.foobar.project
101+
name = google_compute_region_backend_service.foobar.name
102+
region = google_compute_region_backend_service.foobar.region
103+
}
104+
`, serviceName, region, checkName, region)
105+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
subcategory: "Compute Engine"
3+
description: |-
4+
Get information about a Regional Backend Service.
5+
---
6+
7+
# google_compute_region_backend_service
8+
9+
Get information about a Regional Backend Service. For more information see
10+
[the official documentation](https://cloud.google.com/compute/docs/load-balancing/internal/backend-service) and
11+
[API](https://cloud.google.com/compute/docs/reference/rest/beta/regionBackendServices).
12+
13+
## Example Usage
14+
15+
```hcl
16+
data "google_compute_region_backend_service" "my_backend" {
17+
name = "my-backend-service"
18+
region = "us-central1"
19+
}
20+
```
21+
22+
## Argument Reference
23+
24+
The following arguments are supported:
25+
26+
* `name` - (Required) The name of the regional backend service.
27+
28+
* `region` - (Optional) The region where the backend service resides.
29+
30+
* `project` - (Optional) The ID of the project in which the resource belongs. If it
31+
is not provided, the provider project is used.
32+
33+
## Attributes Reference
34+
35+
In addition to the arguments listed above, the following attributes are exported:
36+
37+
See [google_compute_region_backend_service](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_region_backend_service) resource for details of the available attributes.

0 commit comments

Comments
 (0)