Skip to content

Commit 44d9044

Browse files
Move files to tpgiamresource package (#7984) (#5672)
* Move files to tpgiamresource package * Add docs * Use type alias Signed-off-by: Modular Magician <[email protected]>
1 parent 07595b8 commit 44d9044

File tree

143 files changed

+2471
-2251
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

143 files changed

+2471
-2251
lines changed

.changelog/7984.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:none
2+
3+
```

google-beta/bootstrap_iam_test_utils.go

Lines changed: 8 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77

88
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
9+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgiamresource"
910
cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
1011
)
1112

@@ -49,10 +50,10 @@ func BootstrapAllPSARoles(t *testing.T, prefix string, agentNames, roles []strin
4950
})
5051
}
5152

52-
mergedBindings := MergeBindings(append(policy.Bindings, newBindings...))
53+
mergedBindings := tpgiamresource.MergeBindings(append(policy.Bindings, newBindings...))
5354

54-
if !compareBindings(policy.Bindings, mergedBindings) {
55-
addedBindings := missingBindings(policy.Bindings, mergedBindings)
55+
if !tpgiamresource.CompareBindings(policy.Bindings, mergedBindings) {
56+
addedBindings := tpgiamresource.MissingBindings(policy.Bindings, mergedBindings)
5657
for _, missingBinding := range addedBindings {
5758
log.Printf("[DEBUG] Adding binding: %+v", missingBinding)
5859
}
@@ -92,61 +93,10 @@ func BootstrapPSARole(t *testing.T, prefix, agentName, role string) bool {
9293
return BootstrapPSARoles(t, prefix, agentName, []string{role})
9394
}
9495

95-
// Returns a map representing iam bindings that are in the first map but not the second.
96-
func missingBindingsMap(aMap, bMap map[iamBindingKey]map[string]struct{}) map[iamBindingKey]map[string]struct{} {
97-
results := make(map[iamBindingKey]map[string]struct{})
98-
for key, aMembers := range aMap {
99-
if bMembers, ok := bMap[key]; ok {
100-
// The key is in both maps.
101-
resultMembers := make(map[string]struct{})
102-
103-
for aMember := range aMembers {
104-
if _, ok := bMembers[aMember]; !ok {
105-
// The member is in a but not in b.
106-
resultMembers[aMember] = struct{}{}
107-
}
108-
}
109-
for bMember := range bMembers {
110-
if _, ok := aMembers[bMember]; !ok {
111-
// The member is in b but not in a.
112-
resultMembers[bMember] = struct{}{}
113-
}
114-
}
115-
116-
if len(resultMembers) > 0 {
117-
results[key] = resultMembers
118-
}
119-
} else {
120-
// The key is in map a but not map b.
121-
results[key] = aMembers
122-
}
123-
}
124-
125-
for key, bMembers := range bMap {
126-
if _, ok := aMap[key]; !ok {
127-
// The key is in map b but not map a.
128-
results[key] = bMembers
129-
}
130-
}
131-
132-
return results
133-
}
134-
13596
// Returns the bindings that are in the first set of bindings but not the second.
97+
//
98+
// Deprecated: For backward compatibility missingBindings is still working,
99+
// but all new code should use MissingBindings in the tpgiamresource package instead.
136100
func missingBindings(a, b []*cloudresourcemanager.Binding) []*cloudresourcemanager.Binding {
137-
aMap := createIamBindingsMap(a)
138-
bMap := createIamBindingsMap(b)
139-
140-
var results []*cloudresourcemanager.Binding
141-
for key, membersSet := range missingBindingsMap(aMap, bMap) {
142-
members := make([]string, 0, len(membersSet))
143-
for member := range membersSet {
144-
members = append(members, member)
145-
}
146-
results = append(results, &cloudresourcemanager.Binding{
147-
Role: key.Role,
148-
Members: members,
149-
})
150-
}
151-
return results
101+
return tpgiamresource.MissingBindings(a, b)
152102
}

google-beta/bootstrap_test_utils.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"time"
1111

1212
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
13+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgiamresource"
1314
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
1415
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
1516

@@ -841,19 +842,19 @@ func setupProjectsAndGetAccessToken(org, billing, pid, service string, config *t
841842
Role: "roles/iam.serviceAccountCreator",
842843
}
843844

844-
bindings := MergeBindings([]*cloudresourcemanager.Binding{proj1SATokenCreator, proj1SACreator})
845+
bindings := tpgiamresource.MergeBindings([]*cloudresourcemanager.Binding{proj1SATokenCreator, proj1SACreator})
845846

846847
p, err := rmService.Projects.GetIamPolicy(pid,
847848
&cloudresourcemanager.GetIamPolicyRequest{
848849
Options: &cloudresourcemanager.GetPolicyOptions{
849-
RequestedPolicyVersion: IamPolicyVersion,
850+
RequestedPolicyVersion: tpgiamresource.IamPolicyVersion,
850851
},
851852
}).Do()
852853
if err != nil {
853854
return "", err
854855
}
855856

856-
p.Bindings = MergeBindings(append(p.Bindings, bindings...))
857+
p.Bindings = tpgiamresource.MergeBindings(append(p.Bindings, bindings...))
857858
_, err = config.NewResourceManagerClient(config.UserAgent).Projects.SetIamPolicy(pid,
858859
&cloudresourcemanager.SetIamPolicyRequest{
859860
Policy: p,
@@ -883,7 +884,7 @@ func setupProjectsAndGetAccessToken(org, billing, pid, service string, config *t
883884
Role: fmt.Sprintf("roles/%s.admin", service),
884885
}
885886

886-
bindings = MergeBindings([]*cloudresourcemanager.Binding{proj2ServiceUsageBinding, proj2ServiceAdminBinding})
887+
bindings = tpgiamresource.MergeBindings([]*cloudresourcemanager.Binding{proj2ServiceUsageBinding, proj2ServiceAdminBinding})
887888

888889
// For KMS test only
889890
if service == "cloudkms" {
@@ -892,20 +893,20 @@ func setupProjectsAndGetAccessToken(org, billing, pid, service string, config *t
892893
Role: "roles/cloudkms.cryptoKeyEncrypter",
893894
}
894895

895-
bindings = MergeBindings(append(bindings, proj2CryptoKeyBinding))
896+
bindings = tpgiamresource.MergeBindings(append(bindings, proj2CryptoKeyBinding))
896897
}
897898

898899
p, err = rmService.Projects.GetIamPolicy(p2,
899900
&cloudresourcemanager.GetIamPolicyRequest{
900901
Options: &cloudresourcemanager.GetPolicyOptions{
901-
RequestedPolicyVersion: IamPolicyVersion,
902+
RequestedPolicyVersion: tpgiamresource.IamPolicyVersion,
902903
},
903904
}).Do()
904905
if err != nil {
905906
return "", err
906907
}
907908

908-
p.Bindings = MergeBindings(append(p.Bindings, bindings...))
909+
p.Bindings = tpgiamresource.MergeBindings(append(p.Bindings, bindings...))
909910
_, err = config.NewResourceManagerClient(config.UserAgent).Projects.SetIamPolicy(p2,
910911
&cloudresourcemanager.SetIamPolicyRequest{
911912
Policy: p,

google-beta/compute_instance_helpers.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func expandScheduling(v interface{}) (*compute.Scheduling, error) {
111111
transformed := &compute.SchedulingNodeAffinity{
112112
Key: nodeAff["key"].(string),
113113
Operator: nodeAff["operator"].(string),
114-
Values: convertStringArr(nodeAff["values"].(*schema.Set).List()),
114+
Values: tpgresource.ConvertStringArr(nodeAff["values"].(*schema.Set).List()),
115115
}
116116
scheduling.NodeAffinities = append(scheduling.NodeAffinities, transformed)
117117
}
@@ -204,7 +204,7 @@ func flattenScheduling(resp *compute.Scheduling) []map[string]interface{} {
204204
nodeAffinities.Add(map[string]interface{}{
205205
"key": na.Key,
206206
"operator": na.Operator,
207-
"values": schema.NewSet(schema.HashString, convertStringArrToInterface(na.Values)),
207+
"values": schema.NewSet(schema.HashString, tpgresource.ConvertStringArrToInterface(na.Values)),
208208
})
209209
}
210210
schedulingMap["node_affinities"] = nodeAffinities
@@ -369,7 +369,7 @@ func flattenServiceAccounts(serviceAccounts []*compute.ServiceAccount) []map[str
369369
for i, serviceAccount := range serviceAccounts {
370370
result[i] = map[string]interface{}{
371371
"email": serviceAccount.Email,
372-
"scopes": schema.NewSet(tpgresource.StringScopeHashcode, convertStringArrToInterface(serviceAccount.Scopes)),
372+
"scopes": schema.NewSet(tpgresource.StringScopeHashcode, tpgresource.ConvertStringArrToInterface(serviceAccount.Scopes)),
373373
}
374374
}
375375
return result

google-beta/data_source_google_compute_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func dataSourceGoogleComputeInstanceRead(d *schema.ResourceData, meta interface{
8686
if err := d.Set("tags_fingerprint", instance.Tags.Fingerprint); err != nil {
8787
return fmt.Errorf("Error setting tags_fingerprint: %s", err)
8888
}
89-
if err := d.Set("tags", convertStringArrToInterface(instance.Tags.Items)); err != nil {
89+
if err := d.Set("tags", tpgresource.ConvertStringArrToInterface(instance.Tags.Items)); err != nil {
9090
return fmt.Errorf("Error setting tags: %s", err)
9191
}
9292
}

google-beta/data_source_google_iam_policy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func expandAuditConfig(set *schema.Set) []*cloudresourcemanager.AuditConfig {
198198
logConfig := y.(map[string]interface{})
199199
auditLogConfigs = append(auditLogConfigs, &cloudresourcemanager.AuditLogConfig{
200200
LogType: logConfig["log_type"].(string),
201-
ExemptedMembers: convertStringArr(logConfig["exempted_members"].(*schema.Set).List()),
201+
ExemptedMembers: tpgresource.ConvertStringArr(logConfig["exempted_members"].(*schema.Set).List()),
202202
})
203203
}
204204
auditConfigs = append(auditConfigs, &cloudresourcemanager.AuditConfig{

google-beta/data_source_monitoring_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func dataSourceMonitoringServiceType(
2525
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
2626

2727
// Add schema specific to the service type
28-
dsSchema = mergeSchemas(typeSchema, dsSchema)
28+
dsSchema = tpgresource.MergeSchemas(typeSchema, dsSchema)
2929

3030
return &schema.Resource{
3131
Read: dataSourceMonitoringServiceTypeReadFromList(listFilter, typeStateSetter),

google-beta/datasource_iam_policy.go

Lines changed: 5 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,61 +2,11 @@ package google
22

33
import (
44
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
5-
6-
"fmt"
7-
8-
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
5+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgiamresource"
96
)
107

11-
var IamPolicyBaseDataSourceSchema = map[string]*schema.Schema{
12-
"policy_data": {
13-
Type: schema.TypeString,
14-
Computed: true,
15-
},
16-
"etag": {
17-
Type: schema.TypeString,
18-
Computed: true,
19-
},
20-
}
21-
22-
func DataSourceIamPolicy(parentSpecificSchema map[string]*schema.Schema, newUpdaterFunc newResourceIamUpdaterFunc, options ...func(*IamSettings)) *schema.Resource {
23-
settings := &IamSettings{}
24-
for _, o := range options {
25-
o(settings)
26-
}
27-
28-
return &schema.Resource{
29-
Read: DatasourceIamPolicyRead(newUpdaterFunc),
30-
// if non-empty, this will be used to send a deprecation message when the
31-
// datasource is used.
32-
DeprecationMessage: settings.DeprecationMessage,
33-
Schema: mergeSchemas(IamPolicyBaseDataSourceSchema, parentSpecificSchema),
34-
UseJSONNumber: true,
35-
}
36-
}
37-
38-
func DatasourceIamPolicyRead(newUpdaterFunc newResourceIamUpdaterFunc) schema.ReadFunc {
39-
return func(d *schema.ResourceData, meta interface{}) error {
40-
config := meta.(*transport_tpg.Config)
41-
42-
updater, err := newUpdaterFunc(d, config)
43-
if err != nil {
44-
return err
45-
}
46-
47-
policy, err := iamPolicyReadWithRetry(updater)
48-
if err != nil {
49-
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("Resource %q with IAM Policy", updater.DescribeResource()))
50-
}
51-
52-
if err := d.Set("etag", policy.Etag); err != nil {
53-
return fmt.Errorf("Error setting etag: %s", err)
54-
}
55-
if err := d.Set("policy_data", marshalIamPolicy(policy)); err != nil {
56-
return fmt.Errorf("Error setting policy_data: %s", err)
57-
}
58-
d.SetId(updater.GetResourceId())
59-
60-
return nil
61-
}
8+
// Deprecated: For backward compatibility DataSourceIamPolicy is still working,
9+
// but all new code should use DataSourceIamPolicy in the tpgiamresource package instead.
10+
func DataSourceIamPolicy(parentSpecificSchema map[string]*schema.Schema, newUpdaterFunc tpgiamresource.NewResourceIamUpdaterFunc, options ...func(*tpgiamresource.IamSettings)) *schema.Resource {
11+
return tpgiamresource.DataSourceIamPolicy(parentSpecificSchema, newUpdaterFunc, options...)
6212
}

0 commit comments

Comments
 (0)