pulumi-gcp 7.21.1__py3-none-any.whl → 7.22.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. pulumi_gcp/__init__.py +11 -0
  2. pulumi_gcp/alloydb/_inputs.py +139 -0
  3. pulumi_gcp/alloydb/cluster.py +54 -0
  4. pulumi_gcp/alloydb/outputs.py +145 -0
  5. pulumi_gcp/applicationintegration/auth_config.py +2 -6
  6. pulumi_gcp/applicationintegration/client.py +133 -18
  7. pulumi_gcp/bigquery/dataset.py +2 -2
  8. pulumi_gcp/bigquery/job.py +16 -20
  9. pulumi_gcp/cloudrunv2/job.py +2 -4
  10. pulumi_gcp/cloudrunv2/service.py +2 -4
  11. pulumi_gcp/compute/_inputs.py +4 -0
  12. pulumi_gcp/compute/outputs.py +4 -0
  13. pulumi_gcp/compute/router_peer.py +54 -14
  14. pulumi_gcp/config/__init__.pyi +2 -0
  15. pulumi_gcp/config/vars.py +4 -0
  16. pulumi_gcp/container/_inputs.py +169 -0
  17. pulumi_gcp/container/outputs.py +272 -0
  18. pulumi_gcp/dataflow/flex_template_job.py +21 -21
  19. pulumi_gcp/dataflow/job.py +21 -7
  20. pulumi_gcp/essentialcontacts/document_ai_warehouse_document_schema.py +0 -528
  21. pulumi_gcp/firebaserules/release.py +2 -2
  22. pulumi_gcp/privilegedaccessmanager/__init__.py +10 -0
  23. pulumi_gcp/privilegedaccessmanager/_inputs.py +420 -0
  24. pulumi_gcp/privilegedaccessmanager/entitlement.py +852 -0
  25. pulumi_gcp/privilegedaccessmanager/outputs.py +491 -0
  26. pulumi_gcp/provider.py +20 -0
  27. pulumi_gcp/redis/cluster.py +69 -2
  28. pulumi_gcp/storage/__init__.py +1 -0
  29. pulumi_gcp/storage/get_buckets.py +138 -0
  30. pulumi_gcp/storage/outputs.py +63 -0
  31. {pulumi_gcp-7.21.1.dist-info → pulumi_gcp-7.22.0.dist-info}/METADATA +1 -1
  32. {pulumi_gcp-7.21.1.dist-info → pulumi_gcp-7.22.0.dist-info}/RECORD +34 -29
  33. {pulumi_gcp-7.21.1.dist-info → pulumi_gcp-7.22.0.dist-info}/WHEEL +0 -0
  34. {pulumi_gcp-7.21.1.dist-info → pulumi_gcp-7.22.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,420 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import copy
6
+ import warnings
7
+ import pulumi
8
+ import pulumi.runtime
9
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
10
+ from .. import _utilities
11
+
12
+ __all__ = [
13
+ 'EntitlementAdditionalNotificationTargetsArgs',
14
+ 'EntitlementApprovalWorkflowArgs',
15
+ 'EntitlementApprovalWorkflowManualApprovalsArgs',
16
+ 'EntitlementApprovalWorkflowManualApprovalsStepArgs',
17
+ 'EntitlementApprovalWorkflowManualApprovalsStepApproversArgs',
18
+ 'EntitlementEligibleUserArgs',
19
+ 'EntitlementPrivilegedAccessArgs',
20
+ 'EntitlementPrivilegedAccessGcpIamAccessArgs',
21
+ 'EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs',
22
+ 'EntitlementRequesterJustificationConfigArgs',
23
+ 'EntitlementRequesterJustificationConfigNotMandatoryArgs',
24
+ 'EntitlementRequesterJustificationConfigUnstructuredArgs',
25
+ ]
26
+
27
+ @pulumi.input_type
28
+ class EntitlementAdditionalNotificationTargetsArgs:
29
+ def __init__(__self__, *,
30
+ admin_email_recipients: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
31
+ requester_email_recipients: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
32
+ """
33
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] admin_email_recipients: Optional. Additional email addresses to be notified when a principal(requester) is granted access.
34
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] requester_email_recipients: Optional. Additional email address to be notified about an eligible entitlement.
35
+ """
36
+ if admin_email_recipients is not None:
37
+ pulumi.set(__self__, "admin_email_recipients", admin_email_recipients)
38
+ if requester_email_recipients is not None:
39
+ pulumi.set(__self__, "requester_email_recipients", requester_email_recipients)
40
+
41
+ @property
42
+ @pulumi.getter(name="adminEmailRecipients")
43
+ def admin_email_recipients(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
44
+ """
45
+ Optional. Additional email addresses to be notified when a principal(requester) is granted access.
46
+ """
47
+ return pulumi.get(self, "admin_email_recipients")
48
+
49
+ @admin_email_recipients.setter
50
+ def admin_email_recipients(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
51
+ pulumi.set(self, "admin_email_recipients", value)
52
+
53
+ @property
54
+ @pulumi.getter(name="requesterEmailRecipients")
55
+ def requester_email_recipients(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
56
+ """
57
+ Optional. Additional email address to be notified about an eligible entitlement.
58
+ """
59
+ return pulumi.get(self, "requester_email_recipients")
60
+
61
+ @requester_email_recipients.setter
62
+ def requester_email_recipients(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
63
+ pulumi.set(self, "requester_email_recipients", value)
64
+
65
+
66
+ @pulumi.input_type
67
+ class EntitlementApprovalWorkflowArgs:
68
+ def __init__(__self__, *,
69
+ manual_approvals: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs']):
70
+ """
71
+ :param pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs'] manual_approvals: A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant.
72
+ The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step.
73
+ This can be used to create approval workflows such as
74
+ * Require an approval from any user in a group G.
75
+ * Require an approval from any k number of users from a Group G.
76
+ * Require an approval from any user in a group G and then from a user U. etc.
77
+ A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted.
78
+ Structure is documented below.
79
+ """
80
+ pulumi.set(__self__, "manual_approvals", manual_approvals)
81
+
82
+ @property
83
+ @pulumi.getter(name="manualApprovals")
84
+ def manual_approvals(self) -> pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs']:
85
+ """
86
+ A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant.
87
+ The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step.
88
+ This can be used to create approval workflows such as
89
+ * Require an approval from any user in a group G.
90
+ * Require an approval from any k number of users from a Group G.
91
+ * Require an approval from any user in a group G and then from a user U. etc.
92
+ A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted.
93
+ Structure is documented below.
94
+ """
95
+ return pulumi.get(self, "manual_approvals")
96
+
97
+ @manual_approvals.setter
98
+ def manual_approvals(self, value: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs']):
99
+ pulumi.set(self, "manual_approvals", value)
100
+
101
+
102
+ @pulumi.input_type
103
+ class EntitlementApprovalWorkflowManualApprovalsArgs:
104
+ def __init__(__self__, *,
105
+ steps: pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]],
106
+ require_approver_justification: Optional[pulumi.Input[bool]] = None):
107
+ """
108
+ :param pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]] steps: List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now.
109
+ Structure is documented below.
110
+ :param pulumi.Input[bool] require_approver_justification: Optional. Do the approvers need to provide a justification for their actions?
111
+ """
112
+ pulumi.set(__self__, "steps", steps)
113
+ if require_approver_justification is not None:
114
+ pulumi.set(__self__, "require_approver_justification", require_approver_justification)
115
+
116
+ @property
117
+ @pulumi.getter
118
+ def steps(self) -> pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]]:
119
+ """
120
+ List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now.
121
+ Structure is documented below.
122
+ """
123
+ return pulumi.get(self, "steps")
124
+
125
+ @steps.setter
126
+ def steps(self, value: pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]]):
127
+ pulumi.set(self, "steps", value)
128
+
129
+ @property
130
+ @pulumi.getter(name="requireApproverJustification")
131
+ def require_approver_justification(self) -> Optional[pulumi.Input[bool]]:
132
+ """
133
+ Optional. Do the approvers need to provide a justification for their actions?
134
+ """
135
+ return pulumi.get(self, "require_approver_justification")
136
+
137
+ @require_approver_justification.setter
138
+ def require_approver_justification(self, value: Optional[pulumi.Input[bool]]):
139
+ pulumi.set(self, "require_approver_justification", value)
140
+
141
+
142
+ @pulumi.input_type
143
+ class EntitlementApprovalWorkflowManualApprovalsStepArgs:
144
+ def __init__(__self__, *,
145
+ approvers: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs'],
146
+ approvals_needed: Optional[pulumi.Input[int]] = None,
147
+ approver_email_recipients: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
148
+ """
149
+ :param pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs'] approvers: The potential set of approvers in this step. This list should contain at only one entry.
150
+ Structure is documented below.
151
+ :param pulumi.Input[int] approvals_needed: How many users from the above list need to approve.
152
+ If there are not enough distinct users in the list above then the workflow
153
+ will indefinitely block. Should always be greater than 0. Currently 1 is the only
154
+ supported value.
155
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] approver_email_recipients: Optional. Additional email addresses to be notified when a grant is pending approval.
156
+ """
157
+ pulumi.set(__self__, "approvers", approvers)
158
+ if approvals_needed is not None:
159
+ pulumi.set(__self__, "approvals_needed", approvals_needed)
160
+ if approver_email_recipients is not None:
161
+ pulumi.set(__self__, "approver_email_recipients", approver_email_recipients)
162
+
163
+ @property
164
+ @pulumi.getter
165
+ def approvers(self) -> pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs']:
166
+ """
167
+ The potential set of approvers in this step. This list should contain at only one entry.
168
+ Structure is documented below.
169
+ """
170
+ return pulumi.get(self, "approvers")
171
+
172
+ @approvers.setter
173
+ def approvers(self, value: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs']):
174
+ pulumi.set(self, "approvers", value)
175
+
176
+ @property
177
+ @pulumi.getter(name="approvalsNeeded")
178
+ def approvals_needed(self) -> Optional[pulumi.Input[int]]:
179
+ """
180
+ How many users from the above list need to approve.
181
+ If there are not enough distinct users in the list above then the workflow
182
+ will indefinitely block. Should always be greater than 0. Currently 1 is the only
183
+ supported value.
184
+ """
185
+ return pulumi.get(self, "approvals_needed")
186
+
187
+ @approvals_needed.setter
188
+ def approvals_needed(self, value: Optional[pulumi.Input[int]]):
189
+ pulumi.set(self, "approvals_needed", value)
190
+
191
+ @property
192
+ @pulumi.getter(name="approverEmailRecipients")
193
+ def approver_email_recipients(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
194
+ """
195
+ Optional. Additional email addresses to be notified when a grant is pending approval.
196
+ """
197
+ return pulumi.get(self, "approver_email_recipients")
198
+
199
+ @approver_email_recipients.setter
200
+ def approver_email_recipients(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
201
+ pulumi.set(self, "approver_email_recipients", value)
202
+
203
+
204
+ @pulumi.input_type
205
+ class EntitlementApprovalWorkflowManualApprovalsStepApproversArgs:
206
+ def __init__(__self__, *,
207
+ principals: pulumi.Input[Sequence[pulumi.Input[str]]]):
208
+ """
209
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] principals: Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1
210
+ """
211
+ pulumi.set(__self__, "principals", principals)
212
+
213
+ @property
214
+ @pulumi.getter
215
+ def principals(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
216
+ """
217
+ Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1
218
+ """
219
+ return pulumi.get(self, "principals")
220
+
221
+ @principals.setter
222
+ def principals(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
223
+ pulumi.set(self, "principals", value)
224
+
225
+
226
+ @pulumi.input_type
227
+ class EntitlementEligibleUserArgs:
228
+ def __init__(__self__, *,
229
+ principals: pulumi.Input[Sequence[pulumi.Input[str]]]):
230
+ """
231
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] principals: Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1"
232
+ """
233
+ pulumi.set(__self__, "principals", principals)
234
+
235
+ @property
236
+ @pulumi.getter
237
+ def principals(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
238
+ """
239
+ Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1"
240
+ """
241
+ return pulumi.get(self, "principals")
242
+
243
+ @principals.setter
244
+ def principals(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
245
+ pulumi.set(self, "principals", value)
246
+
247
+
248
+ @pulumi.input_type
249
+ class EntitlementPrivilegedAccessArgs:
250
+ def __init__(__self__, *,
251
+ gcp_iam_access: pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs']):
252
+ """
253
+ :param pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs'] gcp_iam_access: GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM.
254
+ Structure is documented below.
255
+ """
256
+ pulumi.set(__self__, "gcp_iam_access", gcp_iam_access)
257
+
258
+ @property
259
+ @pulumi.getter(name="gcpIamAccess")
260
+ def gcp_iam_access(self) -> pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs']:
261
+ """
262
+ GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM.
263
+ Structure is documented below.
264
+ """
265
+ return pulumi.get(self, "gcp_iam_access")
266
+
267
+ @gcp_iam_access.setter
268
+ def gcp_iam_access(self, value: pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs']):
269
+ pulumi.set(self, "gcp_iam_access", value)
270
+
271
+
272
+ @pulumi.input_type
273
+ class EntitlementPrivilegedAccessGcpIamAccessArgs:
274
+ def __init__(__self__, *,
275
+ resource: pulumi.Input[str],
276
+ resource_type: pulumi.Input[str],
277
+ role_bindings: pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]]):
278
+ """
279
+ :param pulumi.Input[str] resource: Name of the resource.
280
+ :param pulumi.Input[str] resource_type: The type of this resource.
281
+ :param pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]] role_bindings: Role bindings to be created on successful grant.
282
+ Structure is documented below.
283
+ """
284
+ pulumi.set(__self__, "resource", resource)
285
+ pulumi.set(__self__, "resource_type", resource_type)
286
+ pulumi.set(__self__, "role_bindings", role_bindings)
287
+
288
+ @property
289
+ @pulumi.getter
290
+ def resource(self) -> pulumi.Input[str]:
291
+ """
292
+ Name of the resource.
293
+ """
294
+ return pulumi.get(self, "resource")
295
+
296
+ @resource.setter
297
+ def resource(self, value: pulumi.Input[str]):
298
+ pulumi.set(self, "resource", value)
299
+
300
+ @property
301
+ @pulumi.getter(name="resourceType")
302
+ def resource_type(self) -> pulumi.Input[str]:
303
+ """
304
+ The type of this resource.
305
+ """
306
+ return pulumi.get(self, "resource_type")
307
+
308
+ @resource_type.setter
309
+ def resource_type(self, value: pulumi.Input[str]):
310
+ pulumi.set(self, "resource_type", value)
311
+
312
+ @property
313
+ @pulumi.getter(name="roleBindings")
314
+ def role_bindings(self) -> pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]]:
315
+ """
316
+ Role bindings to be created on successful grant.
317
+ Structure is documented below.
318
+ """
319
+ return pulumi.get(self, "role_bindings")
320
+
321
+ @role_bindings.setter
322
+ def role_bindings(self, value: pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]]):
323
+ pulumi.set(self, "role_bindings", value)
324
+
325
+
326
+ @pulumi.input_type
327
+ class EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs:
328
+ def __init__(__self__, *,
329
+ role: pulumi.Input[str],
330
+ condition_expression: Optional[pulumi.Input[str]] = None):
331
+ """
332
+ :param pulumi.Input[str] role: IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview.
333
+ :param pulumi.Input[str] condition_expression: 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.
334
+ https://cloud.google.com/iam/docs/conditions-overview#attributes.
335
+ """
336
+ pulumi.set(__self__, "role", role)
337
+ if condition_expression is not None:
338
+ pulumi.set(__self__, "condition_expression", condition_expression)
339
+
340
+ @property
341
+ @pulumi.getter
342
+ def role(self) -> pulumi.Input[str]:
343
+ """
344
+ IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview.
345
+ """
346
+ return pulumi.get(self, "role")
347
+
348
+ @role.setter
349
+ def role(self, value: pulumi.Input[str]):
350
+ pulumi.set(self, "role", value)
351
+
352
+ @property
353
+ @pulumi.getter(name="conditionExpression")
354
+ def condition_expression(self) -> Optional[pulumi.Input[str]]:
355
+ """
356
+ 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.
357
+ https://cloud.google.com/iam/docs/conditions-overview#attributes.
358
+ """
359
+ return pulumi.get(self, "condition_expression")
360
+
361
+ @condition_expression.setter
362
+ def condition_expression(self, value: Optional[pulumi.Input[str]]):
363
+ pulumi.set(self, "condition_expression", value)
364
+
365
+
366
+ @pulumi.input_type
367
+ class EntitlementRequesterJustificationConfigArgs:
368
+ def __init__(__self__, *,
369
+ not_mandatory: Optional[pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs']] = None,
370
+ unstructured: Optional[pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs']] = None):
371
+ """
372
+ :param pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs'] not_mandatory: The justification is not mandatory but can be provided in any of the supported formats.
373
+ :param pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs'] unstructured: The requester has to provide a justification in the form of free flowing text.
374
+
375
+ - - -
376
+ """
377
+ if not_mandatory is not None:
378
+ pulumi.set(__self__, "not_mandatory", not_mandatory)
379
+ if unstructured is not None:
380
+ pulumi.set(__self__, "unstructured", unstructured)
381
+
382
+ @property
383
+ @pulumi.getter(name="notMandatory")
384
+ def not_mandatory(self) -> Optional[pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs']]:
385
+ """
386
+ The justification is not mandatory but can be provided in any of the supported formats.
387
+ """
388
+ return pulumi.get(self, "not_mandatory")
389
+
390
+ @not_mandatory.setter
391
+ def not_mandatory(self, value: Optional[pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs']]):
392
+ pulumi.set(self, "not_mandatory", value)
393
+
394
+ @property
395
+ @pulumi.getter
396
+ def unstructured(self) -> Optional[pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs']]:
397
+ """
398
+ The requester has to provide a justification in the form of free flowing text.
399
+
400
+ - - -
401
+ """
402
+ return pulumi.get(self, "unstructured")
403
+
404
+ @unstructured.setter
405
+ def unstructured(self, value: Optional[pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs']]):
406
+ pulumi.set(self, "unstructured", value)
407
+
408
+
409
+ @pulumi.input_type
410
+ class EntitlementRequesterJustificationConfigNotMandatoryArgs:
411
+ def __init__(__self__):
412
+ pass
413
+
414
+
415
+ @pulumi.input_type
416
+ class EntitlementRequesterJustificationConfigUnstructuredArgs:
417
+ def __init__(__self__):
418
+ pass
419
+
420
+