Skip to content

Commit d6bb7b0

Browse files
committed
feat: support user_project_override in spanner iam resources
1 parent ad4a0c6 commit d6bb7b0

File tree

4 files changed

+53
-13
lines changed

4 files changed

+53
-13
lines changed

mmv1/third_party/terraform/services/spanner/iam_spanner_database.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,21 @@ func (u *SpannerDatabaseIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
6565
return nil, err
6666
}
6767

68-
p, err := u.Config.NewSpannerClient(userAgent).Projects.Instances.Databases.GetIamPolicy(SpannerDatabaseId{
68+
call := u.Config.NewSpannerClient(userAgent).Projects.Instances.Databases.GetIamPolicy(SpannerDatabaseId{
6969
Project: u.project,
7070
Database: u.database,
7171
Instance: u.instance,
7272
}.databaseUri(), &spanner.GetIamPolicyRequest{
7373
Options: &spanner.GetPolicyOptions{RequestedPolicyVersion: tpgiamresource.IamPolicyVersion},
74-
}).Do()
74+
})
75+
if u.Config.UserProjectOverride {
76+
billingProject := u.project
77+
if u.Config.BillingProject != "" {
78+
billingProject = u.Config.BillingProject
79+
}
80+
call.Header().Set("X-Goog-User-Project", billingProject)
81+
}
82+
p, err := call.Do()
7583

7684
if err != nil {
7785
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
@@ -102,13 +110,21 @@ func (u *SpannerDatabaseIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
102110
return err
103111
}
104112

105-
_, err = u.Config.NewSpannerClient(userAgent).Projects.Instances.Databases.SetIamPolicy(SpannerDatabaseId{
113+
call := u.Config.NewSpannerClient(userAgent).Projects.Instances.Databases.SetIamPolicy(SpannerDatabaseId{
106114
Project: u.project,
107115
Database: u.database,
108116
Instance: u.instance,
109117
}.databaseUri(), &spanner.SetIamPolicyRequest{
110118
Policy: spannerPolicy,
111-
}).Do()
119+
})
120+
if u.Config.UserProjectOverride {
121+
billingProject := u.project
122+
if u.Config.BillingProject != "" {
123+
billingProject = u.Config.BillingProject
124+
}
125+
call.Header("X-Goog-User-Project", billingProject)
126+
}
127+
_, err = call.Do()
112128

113129
if err != nil {
114130
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)

mmv1/third_party/terraform/services/spanner/iam_spanner_instance.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,20 @@ func (u *SpannerInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
7575
return nil, err
7676
}
7777

78-
p, err := u.Config.NewSpannerClient(userAgent).Projects.Instances.GetIamPolicy(SpannerInstanceId{
78+
call := u.Config.NewSpannerClient(userAgent).Projects.Instances.GetIamPolicy(SpannerInstanceId{
7979
Project: u.project,
8080
Instance: u.instance,
8181
}.instanceUri(), &spanner.GetIamPolicyRequest{
8282
Options: &spanner.GetPolicyOptions{RequestedPolicyVersion: tpgiamresource.IamPolicyVersion},
83-
}).Do()
83+
})
84+
if u.Config.UserProjectOverride {
85+
billingProject := u.project
86+
if u.Config.BillingProject != "" {
87+
billingProject = u.Config.BillingProject
88+
}
89+
call.Header().Set("X-Goog-User-Project", billingProject)
90+
}
91+
p, err := call.Do()
8492

8593
if err != nil {
8694
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
@@ -111,12 +119,20 @@ func (u *SpannerInstanceIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
111119
return err
112120
}
113121

114-
_, err = u.Config.NewSpannerClient(userAgent).Projects.Instances.SetIamPolicy(SpannerInstanceId{
122+
call := u.Config.NewSpannerClient(userAgent).Projects.Instances.SetIamPolicy(SpannerInstanceId{
115123
Project: u.project,
116124
Instance: u.instance,
117125
}.instanceUri(), &spanner.SetIamPolicyRequest{
118126
Policy: spannerPolicy,
119-
}).Do()
127+
})
128+
if u.Config.UserProjectOverride {
129+
billingProject := u.project
130+
if u.Config.BillingProject != "" {
131+
billingProject = u.Config.BillingProject
132+
}
133+
call.Header("X-Goog-User-Project", billingProject)
134+
}
135+
_, err = call.Do()
120136

121137
if err != nil {
122138
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)

mmv1/third_party/terraform/website/docs/r/spanner_database_iam.html.markdown

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ data "google_iam_policy" "admin" {
4949
members = [
5050
"user:jane@example.com",
5151
]
52-
52+
5353
condition {
5454
title = "My Role"
5555
description = "Grant permissions on my_role"
@@ -90,7 +90,7 @@ resource "google_spanner_database_iam_binding" "database" {
9090
members = [
9191
"user:jane@example.com",
9292
]
93-
93+
9494
condition {
9595
title = "My Role"
9696
description = "Grant permissions on my_role"
@@ -118,7 +118,7 @@ resource "google_spanner_database_iam_member" "database" {
118118
database = "your-database-name"
119119
role = "roles/compute.networkUser"
120120
member = "user:jane@example.com"
121-
121+
122122
condition {
123123
title = "My Role"
124124
description = "Grant permissions on my_role"
@@ -250,4 +250,8 @@ The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/c
250250

251251
```
252252
$ terraform import google_spanner_database_iam_policy.default {{project}}/{{instance}}/{{database}}
253-
```
253+
```
254+
255+
## User Project Overrides
256+
257+
This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).

mmv1/third_party/terraform/website/docs/r/spanner_instance_iam.html.markdown

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,8 @@ The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/c
162162

163163
```
164164
$ terraform import google_spanner_instance_iam_policy.default {{project}}/{{instance}}
165-
```
165+
```
166+
167+
## User Project Overrides
168+
169+
This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).

0 commit comments

Comments
 (0)