Skip to content

Commit a4aa68d

Browse files
Supporting gke hub feature data source (#12459) (#8930)
[upstream:6f342c66088d7ab8e0167cdf5ed9bc841c75fc85] Signed-off-by: Modular Magician <[email protected]>
1 parent 587c29e commit a4aa68d

File tree

4 files changed

+146
-0
lines changed

4 files changed

+146
-0
lines changed

.changelog/12459.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-datasource
2+
`google_gke_hub_feature`
3+
```

google-beta/provider/provider_mmv1_resources.go

+1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
267267
"google_dns_managed_zones": dns.DataSourceDnsManagedZones(),
268268
"google_dns_record_set": dns.DataSourceDnsRecordSet(),
269269
"google_gke_hub_membership_binding": gkehub2.DataSourceGoogleGkeHubMembershipBinding(),
270+
"google_gke_hub_feature": gkehub2.DataSourceGoogleGkeHubFeature(),
270271
"google_filestore_instance": filestore.DataSourceGoogleFilestoreInstance(),
271272
"google_iam_policy": resourcemanager.DataSourceGoogleIamPolicy(),
272273
"google_iam_role": resourcemanager.DataSourceGoogleIamRole(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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 DataSourceGoogleGkeHubFeature() *schema.Resource {
14+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceGKEHub2Feature().Schema)
15+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "location")
16+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
17+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "name")
18+
19+
return &schema.Resource{
20+
Read: dataSourceGoogleGkeHubFeatureRead,
21+
Schema: dsSchema,
22+
}
23+
}
24+
25+
func dataSourceGoogleGkeHubFeatureRead(d *schema.ResourceData, meta interface{}) error {
26+
config := meta.(*transport_tpg.Config)
27+
28+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/{{location}}/features/{{name}}")
29+
if err != nil {
30+
return fmt.Errorf("Error constructing id: %s", err)
31+
}
32+
33+
d.SetId(id)
34+
35+
err = resourceGKEHub2FeatureRead(d, meta)
36+
if err != nil {
37+
return err
38+
}
39+
40+
if err := tpgresource.SetDataSourceLabels(d); err != nil {
41+
return err
42+
}
43+
44+
if err := tpgresource.SetDataSourceAnnotations(d); err != nil {
45+
return err
46+
}
47+
48+
if d.Id() == "" {
49+
return fmt.Errorf("%s not found", id)
50+
}
51+
return nil
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package gkehub2_test
4+
5+
import (
6+
"fmt"
7+
"strings"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
11+
"github.com/hashicorp/terraform-plugin-testing/terraform"
12+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
13+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
14+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
15+
)
16+
17+
func TestAccDataSourceGoogleGkeHubFeature_basic(t *testing.T) {
18+
t.Parallel()
19+
20+
context := map[string]interface{}{
21+
"random_suffix": acctest.RandString(t, 10),
22+
}
23+
24+
acctest.VcrTest(t, resource.TestCase{
25+
PreCheck: func() { acctest.AccTestPreCheck(t) },
26+
Providers: acctest.TestAccProviders,
27+
CheckDestroy: testAccCheckGoogleGkeHubFeatureDestroyProducer(t),
28+
Steps: []resource.TestStep{
29+
{
30+
Config: testAccDataSourceGoogleGkeHubFeature_basic(context),
31+
Check: resource.ComposeTestCheckFunc(
32+
acctest.CheckDataSourceStateMatchesResourceState("data.google_gke_hub_feature.example", "google_gke_hub_feature.example"),
33+
),
34+
},
35+
},
36+
})
37+
}
38+
39+
func testAccDataSourceGoogleGkeHubFeature_basic(context map[string]interface{}) string {
40+
return acctest.Nprintf(`
41+
resource "google_gke_hub_feature" "example" {
42+
location = "global"
43+
name = "servicemesh"
44+
}
45+
46+
data "google_gke_hub_feature" "example" {
47+
location = google_gke_hub_feature.example.location
48+
name = google_gke_hub_feature.example.name
49+
}
50+
`, context)
51+
}
52+
53+
func testAccCheckGoogleGkeHubFeatureDestroyProducer(t *testing.T) func(s *terraform.State) error {
54+
return func(s *terraform.State) error {
55+
for name, rs := range s.RootModule().Resources {
56+
if rs.Type != "google_gke_hub_feature" {
57+
continue
58+
}
59+
if strings.HasPrefix(name, "data.") {
60+
continue
61+
}
62+
63+
config := acctest.GoogleProviderConfig(t)
64+
65+
url, err := tpgresource.ReplaceVarsForTest(config, rs, "{{GKEHub2BasePath}}projects/{{project}}/locations/{{location}}/features/{{name}}")
66+
if err != nil {
67+
return err
68+
}
69+
70+
billingProject := ""
71+
72+
if config.BillingProject != "" {
73+
billingProject = config.BillingProject
74+
}
75+
76+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
77+
Config: config,
78+
Method: "GET",
79+
Project: billingProject,
80+
RawURL: url,
81+
UserAgent: config.UserAgent,
82+
})
83+
if err == nil {
84+
return fmt.Errorf("GKEHub2Feature still exists at %s", url)
85+
}
86+
}
87+
88+
return nil
89+
}
90+
}

0 commit comments

Comments
 (0)