Skip to content

Commit f8ec0d6

Browse files
datasource support for google_access_context_manager_supported_service(s) (#16378) (#26092)
[upstream:0210b597506fb565b451c38c282a72e7375fb46e] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent 37ed0f9 commit f8ec0d6

8 files changed

+652
-0
lines changed

.changelog/16378.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
unknown: datasource support for google_access_context_manager_supported_service(s)

google/provider/provider_mmv1_resources.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ var handwrittenDatasources = map[string]*schema.Resource{
185185
"google_access_approval_organization_service_account": accessapproval.DataSourceAccessApprovalOrganizationServiceAccount(),
186186
"google_access_approval_project_service_account": accessapproval.DataSourceAccessApprovalProjectServiceAccount(),
187187
"google_access_context_manager_access_policy": accesscontextmanager.DataSourceAccessContextManagerAccessPolicy(),
188+
"google_access_context_manager_supported_service": accesscontextmanager.DataSourceAccessContextManagerSupportedService(),
189+
"google_access_context_manager_supported_services": accesscontextmanager.DataSourceAccessContextManagerSupportedServices(),
188190
"google_active_folder": resourcemanager.DataSourceGoogleActiveFolder(),
189191
"google_alloydb_cluster": alloydb.DataSourceAlloydbDatabaseCluster(),
190192
"google_alloydb_locations": alloydb.DataSourceAlloydbLocations(),
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
// ----------------------------------------------------------------------------
4+
//
5+
// *** AUTO GENERATED CODE *** Type: Handwritten ***
6+
//
7+
// ----------------------------------------------------------------------------
8+
//
9+
// This code is generated by Magic Modules using the following:
10+
//
11+
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/accesscontextmanager/data_source_access_context_manager_supported_service.go
12+
//
13+
// DO NOT EDIT this file directly. Any changes made to this file will be
14+
// overwritten during the next generation cycle.
15+
//
16+
// ----------------------------------------------------------------------------
17+
package accesscontextmanager
18+
19+
import (
20+
"fmt"
21+
"net/http"
22+
23+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
24+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
25+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
26+
)
27+
28+
func DataSourceAccessContextManagerSupportedService() *schema.Resource {
29+
return &schema.Resource{
30+
Read: dataSourceAccessContextManagerSupportedServiceRead,
31+
Schema: map[string]*schema.Schema{
32+
"service_name": {
33+
Type: schema.TypeString,
34+
Required: true,
35+
Description: "The name of the service to get information about. The names must be in the same format as used in defining a service perimeter, for example, `storage.googleapis.com`.",
36+
},
37+
"title": {
38+
Type: schema.TypeString,
39+
Computed: true,
40+
Description: "The name of the supported product, such as 'Cloud Storage'.",
41+
},
42+
"support_stage": {
43+
Type: schema.TypeString,
44+
Computed: true,
45+
Description: "The support stage of the service.",
46+
},
47+
"available_on_restricted_vip": {
48+
Type: schema.TypeBool,
49+
Computed: true,
50+
Description: "True if the service is available on the restricted VIP. Services on the restricted VIP typically either support VPC Service Controls or are core infrastructure services required for the functioning of Google Cloud.",
51+
},
52+
"known_limitations": {
53+
Type: schema.TypeBool,
54+
Computed: true,
55+
Description: "True if the service is supported with some limitations. Check documentation for details.",
56+
},
57+
"service_support_stage": {
58+
Type: schema.TypeString,
59+
Computed: true,
60+
Description: "The support stage of the service. Values are `GA`, `PREVIEW`, and `DEPRECATED`.",
61+
},
62+
"supported_methods": {
63+
Type: schema.TypeList,
64+
Computed: true,
65+
Description: "The list of supported methods for this service.",
66+
Elem: &schema.Resource{
67+
Schema: map[string]*schema.Schema{
68+
"method": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
Description: "A valid method name for the respective request mode. Must be a fully qualified name, for example, `storage.googleapis.com/BucketService.GetBucket`.",
72+
},
73+
"permission": {
74+
Type: schema.TypeString,
75+
Computed: true,
76+
Description: "A valid Cloud IAM permission for the respective request mode, for example, `storage.buckets.get`.",
77+
},
78+
},
79+
},
80+
},
81+
},
82+
}
83+
}
84+
85+
func dataSourceAccessContextManagerSupportedServiceRead(d *schema.ResourceData, meta interface{}) error {
86+
config := meta.(*transport_tpg.Config)
87+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
88+
if err != nil {
89+
return err
90+
}
91+
92+
serviceName := d.Get("service_name").(string)
93+
urlRequest := fmt.Sprintf("%sservices/%s", config.AccessContextManagerBasePath, serviceName)
94+
95+
headers := make(http.Header)
96+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
97+
Config: config,
98+
Method: "GET",
99+
RawURL: urlRequest,
100+
UserAgent: userAgent,
101+
Headers: headers,
102+
})
103+
if err != nil {
104+
return fmt.Errorf("error reading Access Context Manager supported service %q: %s", serviceName, err)
105+
}
106+
107+
getString := func(m map[string]interface{}, key string) string {
108+
if v, ok := m[key].(string); ok {
109+
return v
110+
}
111+
return ""
112+
}
113+
114+
getBool := func(m map[string]interface{}, key string) bool {
115+
if v, ok := m[key].(bool); ok {
116+
return v
117+
}
118+
return false
119+
}
120+
121+
if err := d.Set("title", getString(res, "title")); err != nil {
122+
return fmt.Errorf("error setting title: %s", err)
123+
}
124+
if err := d.Set("support_stage", getString(res, "supportStage")); err != nil {
125+
return fmt.Errorf("error setting support_stage: %s", err)
126+
}
127+
if err := d.Set("available_on_restricted_vip", getBool(res, "availableOnRestrictedVip")); err != nil {
128+
return fmt.Errorf("error setting available_on_restricted_vip: %s", err)
129+
}
130+
if err := d.Set("known_limitations", getBool(res, "knownLimitations")); err != nil {
131+
return fmt.Errorf("error setting known_limitations: %s", err)
132+
}
133+
if err := d.Set("service_support_stage", getString(res, "serviceSupportStage")); err != nil {
134+
return fmt.Errorf("error setting service_support_stage: %s", err)
135+
}
136+
137+
supportedMethods := make([]map[string]interface{}, 0)
138+
if rawMethods, ok := res["supportedMethods"].([]interface{}); ok {
139+
for _, item := range rawMethods {
140+
method, ok := item.(map[string]interface{})
141+
if !ok {
142+
continue
143+
}
144+
supportedMethods = append(supportedMethods, map[string]interface{}{
145+
"method": getString(method, "method"),
146+
"permission": getString(method, "permission"),
147+
})
148+
}
149+
}
150+
151+
if err := d.Set("supported_methods", supportedMethods); err != nil {
152+
return fmt.Errorf("error setting supported_methods: %s", err)
153+
}
154+
155+
d.SetId(fmt.Sprintf("accessContextManager/services/%s", serviceName))
156+
157+
return nil
158+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
// ----------------------------------------------------------------------------
4+
//
5+
// *** AUTO GENERATED CODE *** Type: Handwritten ***
6+
//
7+
// ----------------------------------------------------------------------------
8+
//
9+
// This code is generated by Magic Modules using the following:
10+
//
11+
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/accesscontextmanager/data_source_access_context_manager_supported_service_test.go
12+
//
13+
// DO NOT EDIT this file directly. Any changes made to this file will be
14+
// overwritten during the next generation cycle.
15+
//
16+
// ----------------------------------------------------------------------------
17+
package accesscontextmanager_test
18+
19+
import (
20+
"errors"
21+
"fmt"
22+
"strconv"
23+
"testing"
24+
25+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
26+
"github.com/hashicorp/terraform-plugin-testing/terraform"
27+
"github.com/hashicorp/terraform-provider-google/google/acctest"
28+
)
29+
30+
func TestAccDataSourceAccessContextManagerSupportedService_basic(t *testing.T) {
31+
t.Parallel()
32+
33+
acctest.VcrTest(t, resource.TestCase{
34+
PreCheck: func() { acctest.AccTestPreCheck(t) },
35+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
36+
Steps: []resource.TestStep{
37+
{
38+
Config: testAccDataSourceAccessContextManagerSupportedServiceBasic,
39+
Check: resource.ComposeTestCheckFunc(
40+
testAccCheckAccessContextManagerSupportedService("data.google_access_context_manager_supported_service.default"),
41+
),
42+
},
43+
},
44+
})
45+
}
46+
47+
func testAccCheckAccessContextManagerSupportedService(n string) resource.TestCheckFunc {
48+
return func(s *terraform.State) error {
49+
rs, ok := s.RootModule().Resources[n]
50+
if !ok {
51+
return fmt.Errorf("can't find supported service data source: %s", n)
52+
}
53+
54+
if rs.Primary.ID == "" {
55+
return errors.New("data source ID not set")
56+
}
57+
58+
title, ok := rs.Primary.Attributes["title"]
59+
if !ok || title == "" {
60+
return errors.New("expected 'title' attribute to be set")
61+
}
62+
63+
serviceSupportStage, ok := rs.Primary.Attributes["service_support_stage"]
64+
if !ok || serviceSupportStage == "" {
65+
return errors.New("expected 'service_support_stage' attribute to be set")
66+
}
67+
68+
count, ok := rs.Primary.Attributes["supported_methods.#"]
69+
if !ok {
70+
return errors.New("can't find 'supported_methods' attribute")
71+
}
72+
73+
cnt, err := strconv.Atoi(count)
74+
if err != nil {
75+
return errors.New("failed to read number of supported methods")
76+
}
77+
if cnt < 1 {
78+
return fmt.Errorf("expected at least 1 supported method for storage.googleapis.com, received %d", cnt)
79+
}
80+
81+
// Verify each method has at least one of method or permission set
82+
for i := 0; i < cnt; i++ {
83+
methodKey := fmt.Sprintf("supported_methods.%d.method", i)
84+
permissionKey := fmt.Sprintf("supported_methods.%d.permission", i)
85+
86+
method := rs.Primary.Attributes[methodKey]
87+
permission := rs.Primary.Attributes[permissionKey]
88+
89+
if method == "" && permission == "" {
90+
return fmt.Errorf("expected supported_methods.%d to have at least method or permission set", i)
91+
}
92+
}
93+
94+
return nil
95+
}
96+
}
97+
98+
const testAccDataSourceAccessContextManagerSupportedServiceBasic = `
99+
data "google_access_context_manager_supported_service" "default" {
100+
service_name = "storage.googleapis.com"
101+
}
102+
`

0 commit comments

Comments
 (0)