Skip to content

Commit 8b05f42

Browse files
Organization Source iam (#10881) (#19004)
[upstream:8299248f6ef98ecddc4d6678c70d4584b6cf0eb7] Signed-off-by: Modular Magician <[email protected]>
1 parent 8edfcd2 commit 8b05f42

11 files changed

+1130
-3
lines changed

.changelog/10881.txt

Whitespace-only changes.

.teamcity/components/inputs/services_beta.kt

+5
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,11 @@ var ServicesListBeta = mapOf(
621621
"displayName" to "Securitycenter",
622622
"path" to "./google-beta/services/securitycenter"
623623
),
624+
"securitycenterv2" to mapOf(
625+
"name" to "securitycenterv2",
626+
"displayName" to "securitycenterv2",
627+
"path" to "./google-beta/services/securitycenterv2"
628+
),
624629
"securitycentermanagement" to mapOf(
625630
"name" to "securitycentermanagement",
626631
"displayName" to "Securitycentermanagement",

.teamcity/components/inputs/services_ga.kt

+5
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,11 @@ var ServicesListGa = mapOf(
616616
"displayName" to "Securitycenter",
617617
"path" to "./google/services/securitycenter"
618618
),
619+
"securitycenterv2" to mapOf(
620+
"name" to "securitycenterv2",
621+
"displayName" to "securitycenterv2",
622+
"path" to "./google-beta/services/securitycenterv2"
623+
),
619624
"securitycentermanagement" to mapOf(
620625
"name" to "securitycentermanagement",
621626
"displayName" to "Securitycentermanagement",

google/provider/provider_mmv1_resources.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ var generatedIAMDatasources = map[string]*schema.Resource{
388388
"google_secure_source_manager_instance_iam_policy": tpgiamresource.DataSourceIamPolicy(securesourcemanager.SecureSourceManagerInstanceIamSchema, securesourcemanager.SecureSourceManagerInstanceIamUpdaterProducer),
389389
"google_secure_source_manager_repository_iam_policy": tpgiamresource.DataSourceIamPolicy(securesourcemanager.SecureSourceManagerRepositoryIamSchema, securesourcemanager.SecureSourceManagerRepositoryIamUpdaterProducer),
390390
"google_scc_source_iam_policy": tpgiamresource.DataSourceIamPolicy(securitycenter.SecurityCenterSourceIamSchema, securitycenter.SecurityCenterSourceIamUpdaterProducer),
391+
"google_scc_v2_organization_source_iam_policy": tpgiamresource.DataSourceIamPolicy(securitycenterv2.SecurityCenterV2OrganizationSourceIamSchema, securitycenterv2.SecurityCenterV2OrganizationSourceIamUpdaterProducer),
391392
"google_endpoints_service_iam_policy": tpgiamresource.DataSourceIamPolicy(servicemanagement.ServiceManagementServiceIamSchema, servicemanagement.ServiceManagementServiceIamUpdaterProducer),
392393
"google_endpoints_service_consumers_iam_policy": tpgiamresource.DataSourceIamPolicy(servicemanagement.ServiceManagementServiceConsumersIamSchema, servicemanagement.ServiceManagementServiceConsumersIamUpdaterProducer),
393394
"google_sourcerepo_repository_iam_policy": tpgiamresource.DataSourceIamPolicy(sourcerepo.SourceRepoRepositoryIamSchema, sourcerepo.SourceRepoRepositoryIamUpdaterProducer),
@@ -424,9 +425,9 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
424425
}
425426

426427
// Resources
427-
// Generated resources: 444
428-
// Generated IAM resources: 252
429-
// Total generated resources: 696
428+
// Generated resources: 445
429+
// Generated IAM resources: 255
430+
// Total generated resources: 700
430431
var generatedResources = map[string]*schema.Resource{
431432
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
432433
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -1040,6 +1041,10 @@ var generatedResources = map[string]*schema.Resource{
10401041
"google_scc_v2_folder_mute_config": securitycenterv2.ResourceSecurityCenterV2FolderMuteConfig(),
10411042
"google_scc_v2_organization_mute_config": securitycenterv2.ResourceSecurityCenterV2OrganizationMuteConfig(),
10421043
"google_scc_v2_organization_notification_config": securitycenterv2.ResourceSecurityCenterV2OrganizationNotificationConfig(),
1044+
"google_scc_v2_organization_source": securitycenterv2.ResourceSecurityCenterV2OrganizationSource(),
1045+
"google_scc_v2_organization_source_iam_binding": tpgiamresource.ResourceIamBinding(securitycenterv2.SecurityCenterV2OrganizationSourceIamSchema, securitycenterv2.SecurityCenterV2OrganizationSourceIamUpdaterProducer, securitycenterv2.SecurityCenterV2OrganizationSourceIdParseFunc),
1046+
"google_scc_v2_organization_source_iam_member": tpgiamresource.ResourceIamMember(securitycenterv2.SecurityCenterV2OrganizationSourceIamSchema, securitycenterv2.SecurityCenterV2OrganizationSourceIamUpdaterProducer, securitycenterv2.SecurityCenterV2OrganizationSourceIdParseFunc),
1047+
"google_scc_v2_organization_source_iam_policy": tpgiamresource.ResourceIamPolicy(securitycenterv2.SecurityCenterV2OrganizationSourceIamSchema, securitycenterv2.SecurityCenterV2OrganizationSourceIamUpdaterProducer, securitycenterv2.SecurityCenterV2OrganizationSourceIdParseFunc),
10431048
"google_scc_v2_project_mute_config": securitycenterv2.ResourceSecurityCenterV2ProjectMuteConfig(),
10441049
"google_securityposture_posture": securityposture.ResourceSecurityposturePosture(),
10451050
"google_securityposture_posture_deployment": securityposture.ResourceSecurityposturePostureDeployment(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
// ----------------------------------------------------------------------------
5+
//
6+
// *** AUTO GENERATED CODE *** Type: MMv1 ***
7+
//
8+
// ----------------------------------------------------------------------------
9+
//
10+
// This file is automatically generated by Magic Modules and manual
11+
// changes will be clobbered when the file is regenerated.
12+
//
13+
// Please read more about how to change this file in
14+
// .github/CONTRIBUTING.md.
15+
//
16+
// ----------------------------------------------------------------------------
17+
18+
package securitycenterv2
19+
20+
import (
21+
"fmt"
22+
23+
"github.com/hashicorp/errwrap"
24+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
25+
"google.golang.org/api/cloudresourcemanager/v1"
26+
27+
"github.com/hashicorp/terraform-provider-google/google/tpgiamresource"
28+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
29+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
30+
)
31+
32+
var SecurityCenterV2OrganizationSourceIamSchema = map[string]*schema.Schema{
33+
"organization": {
34+
Type: schema.TypeString,
35+
Required: true,
36+
ForceNew: true,
37+
},
38+
"source": {
39+
Type: schema.TypeString,
40+
Required: true,
41+
ForceNew: true,
42+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
43+
},
44+
}
45+
46+
type SecurityCenterV2OrganizationSourceIamUpdater struct {
47+
organization string
48+
source string
49+
d tpgresource.TerraformResourceData
50+
Config *transport_tpg.Config
51+
}
52+
53+
func SecurityCenterV2OrganizationSourceIamUpdaterProducer(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (tpgiamresource.ResourceIamUpdater, error) {
54+
values := make(map[string]string)
55+
56+
if v, ok := d.GetOk("organization"); ok {
57+
values["organization"] = v.(string)
58+
}
59+
60+
if v, ok := d.GetOk("source"); ok {
61+
values["source"] = v.(string)
62+
}
63+
64+
// We may have gotten either a long or short name, so attempt to parse long name if possible
65+
m, err := tpgresource.GetImportIdQualifiers([]string{"organizations/(?P<organization>[^/]+)/sources/(?P<source>[^/]+)", "(?P<organization>[^/]+)/(?P<source>[^/]+)", "(?P<source>[^/]+)"}, d, config, d.Get("source").(string))
66+
if err != nil {
67+
return nil, err
68+
}
69+
70+
for k, v := range m {
71+
values[k] = v
72+
}
73+
74+
u := &SecurityCenterV2OrganizationSourceIamUpdater{
75+
organization: values["organization"],
76+
source: values["source"],
77+
d: d,
78+
Config: config,
79+
}
80+
81+
if err := d.Set("organization", u.organization); err != nil {
82+
return nil, fmt.Errorf("Error setting organization: %s", err)
83+
}
84+
if err := d.Set("source", u.GetResourceId()); err != nil {
85+
return nil, fmt.Errorf("Error setting source: %s", err)
86+
}
87+
88+
return u, nil
89+
}
90+
91+
func SecurityCenterV2OrganizationSourceIdParseFunc(d *schema.ResourceData, config *transport_tpg.Config) error {
92+
values := make(map[string]string)
93+
94+
m, err := tpgresource.GetImportIdQualifiers([]string{"organizations/(?P<organization>[^/]+)/sources/(?P<source>[^/]+)", "(?P<organization>[^/]+)/(?P<source>[^/]+)", "(?P<source>[^/]+)"}, d, config, d.Id())
95+
if err != nil {
96+
return err
97+
}
98+
99+
for k, v := range m {
100+
values[k] = v
101+
}
102+
103+
u := &SecurityCenterV2OrganizationSourceIamUpdater{
104+
organization: values["organization"],
105+
source: values["source"],
106+
d: d,
107+
Config: config,
108+
}
109+
if err := d.Set("source", u.GetResourceId()); err != nil {
110+
return fmt.Errorf("Error setting source: %s", err)
111+
}
112+
d.SetId(u.GetResourceId())
113+
return nil
114+
}
115+
116+
func (u *SecurityCenterV2OrganizationSourceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
117+
url, err := u.qualifyOrganizationSourceUrl("getIamPolicy")
118+
if err != nil {
119+
return nil, err
120+
}
121+
122+
var obj map[string]interface{}
123+
124+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
125+
if err != nil {
126+
return nil, err
127+
}
128+
129+
policy, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
130+
Config: u.Config,
131+
Method: "POST",
132+
RawURL: url,
133+
UserAgent: userAgent,
134+
Body: obj,
135+
})
136+
if err != nil {
137+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
138+
}
139+
140+
out := &cloudresourcemanager.Policy{}
141+
err = tpgresource.Convert(policy, out)
142+
if err != nil {
143+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
144+
}
145+
146+
return out, nil
147+
}
148+
149+
func (u *SecurityCenterV2OrganizationSourceIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
150+
json, err := tpgresource.ConvertToMap(policy)
151+
if err != nil {
152+
return err
153+
}
154+
155+
obj := make(map[string]interface{})
156+
obj["policy"] = json
157+
158+
url, err := u.qualifyOrganizationSourceUrl("setIamPolicy")
159+
if err != nil {
160+
return err
161+
}
162+
163+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
164+
if err != nil {
165+
return err
166+
}
167+
168+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
169+
Config: u.Config,
170+
Method: "POST",
171+
RawURL: url,
172+
UserAgent: userAgent,
173+
Body: obj,
174+
Timeout: u.d.Timeout(schema.TimeoutCreate),
175+
})
176+
if err != nil {
177+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
178+
}
179+
180+
return nil
181+
}
182+
183+
func (u *SecurityCenterV2OrganizationSourceIamUpdater) qualifyOrganizationSourceUrl(methodIdentifier string) (string, error) {
184+
urlTemplate := fmt.Sprintf("{{SecurityCenterV2BasePath}}%s:%s", fmt.Sprintf("organizations/%s/sources/%s", u.organization, u.source), methodIdentifier)
185+
url, err := tpgresource.ReplaceVars(u.d, u.Config, urlTemplate)
186+
if err != nil {
187+
return "", err
188+
}
189+
return url, nil
190+
}
191+
192+
func (u *SecurityCenterV2OrganizationSourceIamUpdater) GetResourceId() string {
193+
return fmt.Sprintf("organizations/%s/sources/%s", u.organization, u.source)
194+
}
195+
196+
func (u *SecurityCenterV2OrganizationSourceIamUpdater) GetMutexKey() string {
197+
return fmt.Sprintf("iam-securitycenterv2-organizationsource-%s", u.GetResourceId())
198+
}
199+
200+
func (u *SecurityCenterV2OrganizationSourceIamUpdater) DescribeResource() string {
201+
return fmt.Sprintf("securitycenterv2 organizationsource %q", u.GetResourceId())
202+
}

0 commit comments

Comments
 (0)