/
spanner_instance_iam.go
109 lines (91 loc) · 3.81 KB
/
spanner_instance_iam.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package spanner
import (
"fmt"
"github.com/GoogleCloudPlatform/terraform-google-conversion/v5/tfplan2cai/converters/google/resources/cai"
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
)
func ResourceConverterSpannerInstanceIamPolicy() cai.ResourceConverter {
return cai.ResourceConverter{
AssetType: "spanner.googleapis.com/Instance",
Convert: GetSpannerInstanceIamPolicyCaiObject,
MergeCreateUpdate: MergeSpannerInstanceIamPolicy,
}
}
func ResourceConverterSpannerInstanceIamBinding() cai.ResourceConverter {
return cai.ResourceConverter{
AssetType: "spanner.googleapis.com/Instance",
Convert: GetSpannerInstanceIamBindingCaiObject,
FetchFullResource: FetchSpannerInstanceIamPolicy,
MergeCreateUpdate: MergeSpannerInstanceIamBinding,
MergeDelete: MergeSpannerInstanceIamBindingDelete,
}
}
func ResourceConverterSpannerInstanceIamMember() cai.ResourceConverter {
return cai.ResourceConverter{
AssetType: "spanner.googleapis.com/Instance",
Convert: GetSpannerInstanceIamMemberCaiObject,
FetchFullResource: FetchSpannerInstanceIamPolicy,
MergeCreateUpdate: MergeSpannerInstanceIamMember,
MergeDelete: MergeSpannerInstanceIamMemberDelete,
}
}
func GetSpannerInstanceIamPolicyCaiObject(d tpgresource.TerraformResourceData, config *transport_tpg.Config) ([]cai.Asset, error) {
return newSpannerInstanceIamAsset(d, config, cai.ExpandIamPolicyBindings)
}
func GetSpannerInstanceIamBindingCaiObject(d tpgresource.TerraformResourceData, config *transport_tpg.Config) ([]cai.Asset, error) {
return newSpannerInstanceIamAsset(d, config, cai.ExpandIamRoleBindings)
}
func GetSpannerInstanceIamMemberCaiObject(d tpgresource.TerraformResourceData, config *transport_tpg.Config) ([]cai.Asset, error) {
return newSpannerInstanceIamAsset(d, config, cai.ExpandIamMemberBindings)
}
func MergeSpannerInstanceIamPolicy(existing, incoming cai.Asset) cai.Asset {
existing.IAMPolicy = incoming.IAMPolicy
return existing
}
func MergeSpannerInstanceIamBinding(existing, incoming cai.Asset) cai.Asset {
return cai.MergeIamAssets(existing, incoming, cai.MergeAuthoritativeBindings)
}
func MergeSpannerInstanceIamBindingDelete(existing, incoming cai.Asset) cai.Asset {
return cai.MergeDeleteIamAssets(existing, incoming, cai.MergeDeleteAuthoritativeBindings)
}
func MergeSpannerInstanceIamMember(existing, incoming cai.Asset) cai.Asset {
return cai.MergeIamAssets(existing, incoming, cai.MergeAdditiveBindings)
}
func MergeSpannerInstanceIamMemberDelete(existing, incoming cai.Asset) cai.Asset {
return cai.MergeDeleteIamAssets(existing, incoming, cai.MergeDeleteAdditiveBindings)
}
func newSpannerInstanceIamAsset(
d tpgresource.TerraformResourceData,
config *transport_tpg.Config,
expandBindings func(d tpgresource.TerraformResourceData) ([]cai.IAMBinding, error),
) ([]cai.Asset, error) {
bindings, err := expandBindings(d)
if err != nil {
return []cai.Asset{}, fmt.Errorf("expanding bindings: %v", err)
}
name, err := cai.AssetName(d, config, "//spanner.googleapis.com/projects/{{project}}/instances/{{instance}}")
if err != nil {
return []cai.Asset{}, err
}
return []cai.Asset{{
Name: name,
Type: "spanner.googleapis.com/Instance",
IAMPolicy: &cai.IAMPolicy{
Bindings: bindings,
},
}}, nil
}
func FetchSpannerInstanceIamPolicy(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (cai.Asset, error) {
// Check if the identity field returns a value
if _, ok := d.GetOk("instance"); !ok {
return cai.Asset{}, cai.ErrEmptyIdentityField
}
return cai.FetchIamPolicy(
NewSpannerInstanceIamUpdater,
d,
config,
"//spanner.googleapis.com/projects/{{project}}/instances/{{instance}}",
"spanner.googleapis.com/Instance",
)
}