Skip to content

Commit 829faa7

Browse files
Dawid212shuyama1
andcommitted
Add google_compute_region_backend_service Datasource (GoogleCloudPlatform#13305)
Co-authored-by: Shuya Ma <[email protected]>
1 parent 26b49d6 commit 829faa7

4 files changed

+197
-0
lines changed

mmv1/third_party/terraform/provider/provider_mmv1_resources.go.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
271271
"google_vmwareengine_private_cloud": vmwareengine.DataSourceVmwareenginePrivateCloud(),
272272
"google_vmwareengine_subnet": vmwareengine.DataSourceVmwareengineSubnet(),
273273
"google_vmwareengine_vcenter_credentials": vmwareengine.DataSourceVmwareengineVcenterCredentials(),
274+
"google_compute_region_backend_service": compute.DataSourceGoogleComputeRegionBackendService(),
274275
// ####### END handwritten datasources ###########
275276
}
276277

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package compute
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
7+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
8+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
9+
)
10+
11+
func DataSourceGoogleComputeRegionBackendService() *schema.Resource {
12+
// Get schema from the resource
13+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceComputeRegionBackendService().Schema)
14+
15+
// Set 'Required' schema elements
16+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "name")
17+
18+
// Set 'Optional' schema elements
19+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
20+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "region")
21+
22+
return &schema.Resource{
23+
Read: dataSourceComputeRegionBackendServiceRead,
24+
Schema: dsSchema,
25+
}
26+
}
27+
28+
func dataSourceComputeRegionBackendServiceRead(d *schema.ResourceData, meta interface{}) error {
29+
config := meta.(*transport_tpg.Config)
30+
31+
region, err := tpgresource.GetRegion(d, config)
32+
if err != nil {
33+
return err
34+
}
35+
36+
project, err := tpgresource.GetProject(d, config)
37+
if err != nil {
38+
return err
39+
}
40+
41+
name := d.Get("name").(string)
42+
43+
id := fmt.Sprintf("projects/%s/regions/%s/backendServices/%s", project, region, name)
44+
d.SetId(id)
45+
46+
err = ResourceComputeRegionBackendService().Read(d, meta)
47+
if err != nil {
48+
return err
49+
}
50+
51+
if d.Id() == "" {
52+
return fmt.Errorf("%s not found", id)
53+
}
54+
55+
return nil
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package compute_test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
8+
"github.com/hashicorp/terraform-provider-google/google/acctest"
9+
)
10+
11+
func TestAccDataSourceComputeRegionBackendService_basic(t *testing.T) {
12+
t.Parallel()
13+
14+
serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
15+
checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
16+
region := "us-central1"
17+
18+
acctest.VcrTest(t, resource.TestCase{
19+
PreCheck: func() { acctest.AccTestPreCheck(t) },
20+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
21+
Steps: []resource.TestStep{
22+
{
23+
Config: testAccDataSourceComputeRegionBackendService_basic(serviceName, checkName, region),
24+
Check: acctest.CheckDataSourceStateMatchesResourceState("data.google_compute_region_backend_service.baz", "google_compute_region_backend_service.foobar"),
25+
},
26+
},
27+
})
28+
}
29+
30+
func testAccDataSourceComputeRegionBackendService_basic(serviceName, checkName, region string) string {
31+
return fmt.Sprintf(`
32+
resource "google_compute_region_backend_service" "foobar" {
33+
name = "%s"
34+
description = "foobar backend service"
35+
region = "%s"
36+
protocol = "HTTP"
37+
load_balancing_scheme = "INTERNAL_MANAGED"
38+
health_checks = [google_compute_region_health_check.zero.self_link]
39+
}
40+
41+
resource "google_compute_region_health_check" "zero" {
42+
name = "%s"
43+
region = "%s"
44+
http_health_check {
45+
port = 80
46+
}
47+
}
48+
49+
data "google_compute_region_backend_service" "baz" {
50+
name = google_compute_region_backend_service.foobar.name
51+
region = google_compute_region_backend_service.foobar.region
52+
}
53+
`, serviceName, region, checkName, region)
54+
}
55+
56+
func TestAccDataSourceComputeRegionBackendService_withProject(t *testing.T) {
57+
t.Parallel()
58+
59+
serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
60+
checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
61+
region := "us-central1"
62+
63+
acctest.VcrTest(t, resource.TestCase{
64+
PreCheck: func() { acctest.AccTestPreCheck(t) },
65+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
66+
Steps: []resource.TestStep{
67+
{
68+
Config: testAccDataSourceComputeRegionBackendService_withProject(serviceName, checkName, region),
69+
Check: resource.ComposeTestCheckFunc(
70+
acctest.CheckDataSourceStateMatchesResourceState("data.google_compute_region_backend_service.baz", "google_compute_region_backend_service.foobar"),
71+
resource.TestCheckResourceAttrSet("data.google_compute_region_backend_service.baz", "project"),
72+
),
73+
},
74+
},
75+
})
76+
}
77+
78+
func testAccDataSourceComputeRegionBackendService_withProject(serviceName, checkName, region string) string {
79+
return fmt.Sprintf(`
80+
resource "google_compute_region_backend_service" "foobar" {
81+
name = "%s"
82+
description = "foobar backend service"
83+
region = "%s"
84+
protocol = "HTTP"
85+
load_balancing_scheme = "INTERNAL_MANAGED"
86+
health_checks = [google_compute_region_health_check.zero.self_link]
87+
}
88+
89+
resource "google_compute_region_health_check" "zero" {
90+
name = "%s"
91+
region = "%s"
92+
http_health_check {
93+
port = 80
94+
}
95+
}
96+
97+
data "google_compute_region_backend_service" "baz" {
98+
project = google_compute_region_backend_service.foobar.project
99+
name = google_compute_region_backend_service.foobar.name
100+
region = google_compute_region_backend_service.foobar.region
101+
}
102+
`, serviceName, region, checkName, region)
103+
}
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)