Skip to content

Commit 4bcc461

Browse files
New data source for google_gke_hub_membership_binding (#11032) (#7696)
[upstream:91abd111f4861ea0a260d6e338a65cc054f5637c] Signed-off-by: Modular Magician <[email protected]>
1 parent 9212c6b commit 4bcc461

File tree

4 files changed

+129
-0
lines changed

4 files changed

+129
-0
lines changed

.changelog/11032.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_gke_hub_membership_binding`
3+
```

google-beta/provider/provider_mmv1_resources.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
247247
"google_dns_managed_zone": dns.DataSourceDnsManagedZone(),
248248
"google_dns_managed_zones": dns.DataSourceDnsManagedZones(),
249249
"google_dns_record_set": dns.DataSourceDnsRecordSet(),
250+
"google_gke_hub_membership_binding": gkehub2.DataSourceGoogleGkeHubMembershipBinding(),
250251
"google_filestore_instance": filestore.DataSourceGoogleFilestoreInstance(),
251252
"google_iam_policy": resourcemanager.DataSourceGoogleIamPolicy(),
252253
"google_iam_role": resourcemanager.DataSourceGoogleIamRole(),
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package gkehub2
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
10+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
11+
)
12+
13+
func DataSourceGoogleGkeHubMembershipBinding() *schema.Resource {
14+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceGKEHub2MembershipBinding().Schema)
15+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "membership_binding_id")
16+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "membership_id")
17+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "location")
18+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
19+
20+
return &schema.Resource{
21+
Read: dataSourceGoogleGkeHubMembershipBindingRead,
22+
Schema: dsSchema,
23+
}
24+
}
25+
26+
func dataSourceGoogleGkeHubMembershipBindingRead(d *schema.ResourceData, meta interface{}) error {
27+
config := meta.(*transport_tpg.Config)
28+
29+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}")
30+
if err != nil {
31+
return fmt.Errorf("Error constructing id: %s", err)
32+
}
33+
34+
d.SetId(id)
35+
36+
err = resourceGKEHub2MembershipBindingRead(d, meta)
37+
if err != nil {
38+
return err
39+
}
40+
41+
if err := tpgresource.SetDataSourceLabels(d); err != nil {
42+
return err
43+
}
44+
45+
if err := tpgresource.SetDataSourceAnnotations(d); err != nil {
46+
return err
47+
}
48+
49+
if d.Id() == "" {
50+
return fmt.Errorf("%s not found", id)
51+
}
52+
return nil
53+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package gkehub2_test
4+
5+
import (
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
10+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/envvar"
11+
)
12+
13+
func TestAccDataSourceGoogleGKEHub2MembershipBinding_basic(t *testing.T) {
14+
t.Parallel()
15+
16+
context := map[string]interface{}{
17+
"org_id": envvar.GetTestOrgFromEnv(t),
18+
"billing_account": envvar.GetTestBillingAccountFromEnv(t),
19+
"random_suffix": acctest.RandString(t, 10),
20+
}
21+
22+
acctest.VcrTest(t, resource.TestCase{
23+
PreCheck: func() { acctest.AccTestPreCheck(t) },
24+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
25+
CheckDestroy: testAccCheckGKEHub2MembershipBindingDestroyProducer(t),
26+
ExternalProviders: map[string]resource.ExternalProvider{
27+
"time": {},
28+
},
29+
Steps: []resource.TestStep{
30+
{
31+
Config: testAccDataSourceGoogleGKEHub2MembershipBinding_basic(context),
32+
Check: resource.ComposeTestCheckFunc(
33+
acctest.CheckDataSourceStateMatchesResourceState("data.google_gke_hub_membership_binding.example", "google_gke_hub_membership_binding.example"),
34+
),
35+
},
36+
},
37+
})
38+
}
39+
40+
func testAccDataSourceGoogleGKEHub2MembershipBinding_basic(context map[string]interface{}) string {
41+
return acctest.Nprintf(`
42+
resource "google_gke_hub_membership" "example" {
43+
membership_id = "tf-test-membership%{random_suffix}"
44+
}
45+
46+
resource "google_gke_hub_scope" "example" {
47+
scope_id = "tf-test-scope%{random_suffix}"
48+
}
49+
50+
resource "google_gke_hub_membership_binding" "example" {
51+
membership_binding_id = "tf-test-membership-binding%{random_suffix}"
52+
scope = google_gke_hub_scope.example.name
53+
membership_id = "tf-test-membership%{random_suffix}"
54+
location = "global"
55+
labels = {
56+
keyb = "valueb"
57+
keya = "valuea"
58+
keyc = "valuec"
59+
}
60+
depends_on = [
61+
google_gke_hub_membership.example,
62+
google_gke_hub_scope.example
63+
]
64+
}
65+
66+
data "google_gke_hub_membership_binding" "example" {
67+
location = google_gke_hub_membership_binding.example.location
68+
membership_id = google_gke_hub_membership_binding.example.membership_id
69+
membership_binding_id = google_gke_hub_membership_binding.example.membership_binding_id
70+
}
71+
`, context)
72+
}

0 commit comments

Comments
 (0)