Skip to content

Commit 0003f63

Browse files
Terraform integration for adding output only RoleBinding ID to entitlement resource (#14218) (#10743)
[upstream:f3d23903ca4d8a4b2eb104a8f9294946ddf71af3] Signed-off-by: Modular Magician <[email protected]>
1 parent 066bc4f commit 0003f63

File tree

5 files changed

+101
-1
lines changed

5 files changed

+101
-1
lines changed

.changelog/14218.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
privilegedaccessmanager: added RoleBinding `id` field to `google_privileged_access_manager_entitlement` resource
3+
```

google-beta/services/privilegedaccessmanager/resource_privileged_access_manager_entitlement.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,11 @@ Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours =
164164
Description: `The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request.
165165
https://cloud.google.com/iam/docs/conditions-overview#attributes.`,
166166
},
167+
"id": {
168+
Type: schema.TypeString,
169+
Computed: true,
170+
Description: `Output Only. The ID corresponding to this role binding in the policy binding. This will be unique within an entitlement across time. Gets re-generated each time the entitlement is updated.`,
171+
},
167172
},
168173
},
169174
},
@@ -909,6 +914,7 @@ func flattenPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBi
909914
transformed = append(transformed, map[string]interface{}{
910915
"role": flattenPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsRole(original["role"], d, config),
911916
"condition_expression": flattenPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsConditionExpression(original["conditionExpression"], d, config),
917+
"id": flattenPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsId(original["id"], d, config),
912918
})
913919
}
914920
return transformed
@@ -921,6 +927,10 @@ func flattenPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBi
921927
return v
922928
}
923929

930+
func flattenPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsId(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
931+
return v
932+
}
933+
924934
func flattenPrivilegedAccessManagerEntitlementMaxRequestDuration(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
925935
return v
926936
}
@@ -1219,6 +1229,13 @@ func expandPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBin
12191229
transformed["conditionExpression"] = transformedConditionExpression
12201230
}
12211231

1232+
transformedId, err := expandPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsId(original["id"], d, config)
1233+
if err != nil {
1234+
return nil, err
1235+
} else if val := reflect.ValueOf(transformedId); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1236+
transformed["id"] = transformedId
1237+
}
1238+
12221239
req = append(req, transformed)
12231240
}
12241241
return req, nil
@@ -1232,6 +1249,10 @@ func expandPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBin
12321249
return v, nil
12331250
}
12341251

1252+
func expandPrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsId(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1253+
return v, nil
1254+
}
1255+
12351256
func expandPrivilegedAccessManagerEntitlementMaxRequestDuration(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
12361257
return v, nil
12371258
}

google-beta/services/privilegedaccessmanager/resource_privileged_access_manager_entitlement_generated_meta.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ fields:
2929
- field: 'privileged_access.gcp_iam_access.resource'
3030
- field: 'privileged_access.gcp_iam_access.resource_type'
3131
- field: 'privileged_access.gcp_iam_access.role_bindings.condition_expression'
32+
- field: 'privileged_access.gcp_iam_access.role_bindings.id'
3233
- field: 'privileged_access.gcp_iam_access.role_bindings.role'
3334
- field: 'requester_justification_config.not_mandatory'
3435
- field: 'requester_justification_config.unstructured'

google-beta/services/privilegedaccessmanager/resource_privileged_access_manager_entitlement_test.go

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
//
99
// This code is generated by Magic Modules using the following:
1010
//
11-
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/privilegedaccessmanager/resource_privileged_access_manager_entitlement_test.go
11+
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/privilegedaccessmanager/resource_privileged_access_manager_entitlement_test.go.tmpl
1212
//
1313
// DO NOT EDIT this file directly. Any changes made to this file will be
1414
// overwritten during the next generation cycle.
@@ -60,6 +60,77 @@ func TestAccPrivilegedAccessManagerEntitlement_privilegedAccessManagerEntitlemen
6060
})
6161
}
6262

63+
func TestAccPrivilegedAccessManagerEntitlement_roleBindingId_beta(t *testing.T) {
64+
t.Parallel()
65+
66+
context := map[string]interface{}{
67+
"random_suffix": acctest.RandString(t, 10),
68+
"project_name": envvar.GetTestProjectFromEnv(),
69+
}
70+
71+
acctest.VcrTest(t, resource.TestCase{
72+
PreCheck: func() { acctest.AccTestPreCheck(t) },
73+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
74+
CheckDestroy: testAccCheckPrivilegedAccessManagerEntitlementDestroyProducer(t),
75+
Steps: []resource.TestStep{
76+
{
77+
Config: testAccPrivilegedAccessManagerEntitlement_privilegedAccessManagerEntitlementBasicExample_basic_beta(context),
78+
Check: resource.ComposeTestCheckFunc(
79+
// Checks the output-only role binding id field
80+
resource.TestCheckResourceAttrSet(
81+
"google_privileged_access_manager_entitlement.tfentitlement",
82+
"privileged_access.0.gcp_iam_access.0.role_bindings.0.id",
83+
),
84+
),
85+
},
86+
},
87+
})
88+
}
89+
90+
func testAccPrivilegedAccessManagerEntitlement_privilegedAccessManagerEntitlementBasicExample_basic_beta(context map[string]interface{}) string {
91+
return acctest.Nprintf(`
92+
resource "google_privileged_access_manager_entitlement" "tfentitlement" {
93+
provider = google-beta
94+
entitlement_id = "tf-test-example-entitlement%{random_suffix}"
95+
location = "global"
96+
max_request_duration = "43200s"
97+
parent = "projects/%{project_name}"
98+
requester_justification_config {
99+
unstructured{}
100+
}
101+
eligible_users {
102+
principals = ["group:[email protected]"]
103+
}
104+
privileged_access{
105+
gcp_iam_access{
106+
role_bindings{
107+
role = "roles/storage.admin"
108+
condition_expression = "request.time < timestamp(\"2024-04-23T18:30:00.000Z\")"
109+
}
110+
resource = "//cloudresourcemanager.googleapis.com/projects/%{project_name}"
111+
resource_type = "cloudresourcemanager.googleapis.com/Project"
112+
}
113+
}
114+
additional_notification_targets {
115+
admin_email_recipients = ["[email protected]"]
116+
requester_email_recipients = ["[email protected]"]
117+
}
118+
approval_workflow {
119+
manual_approvals {
120+
require_approver_justification = true
121+
steps {
122+
approvals_needed = 1
123+
approver_email_recipients = ["[email protected]"]
124+
approvers {
125+
principals = ["group:[email protected]"]
126+
}
127+
}
128+
}
129+
}
130+
}
131+
`, context)
132+
}
133+
63134
func testAccPrivilegedAccessManagerEntitlement_privilegedAccessManagerEntitlementBasicExample_basic(context map[string]interface{}) string {
64135
return acctest.Nprintf(`
65136
resource "google_privileged_access_manager_entitlement" "tfentitlement" {

website/docs/r/privileged_access_manager_entitlement.html.markdown

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ The following arguments are supported:
180180
The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request.
181181
https://cloud.google.com/iam/docs/conditions-overview#attributes.
182182

183+
* `id` -
184+
(Output, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html))
185+
Output Only. The ID corresponding to this role binding in the policy binding. This will be unique within an entitlement across time. Gets re-generated each time the entitlement is updated.
186+
183187
<a name="nested_requester_justification_config"></a>The `requester_justification_config` block supports:
184188

185189
* `not_mandatory` -

0 commit comments

Comments
 (0)