pulumi-gcp 7.29.0a1719298381__py3-none-any.whl → 7.29.0a1719365805__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 (36) hide show
  1. pulumi_gcp/__init__.py +8 -0
  2. pulumi_gcp/activedirectory/domain.py +14 -14
  3. pulumi_gcp/activedirectory/domain_trust.py +14 -14
  4. pulumi_gcp/artifactregistry/__init__.py +1 -0
  5. pulumi_gcp/artifactregistry/_inputs.py +4 -4
  6. pulumi_gcp/artifactregistry/get_docker_image.py +244 -0
  7. pulumi_gcp/artifactregistry/outputs.py +6 -6
  8. pulumi_gcp/artifactregistry/repository.py +8 -8
  9. pulumi_gcp/bigquery/dataset.py +75 -0
  10. pulumi_gcp/bigquery/get_dataset.py +11 -1
  11. pulumi_gcp/billing/_inputs.py +22 -0
  12. pulumi_gcp/billing/budget.py +50 -0
  13. pulumi_gcp/billing/outputs.py +20 -0
  14. pulumi_gcp/cloudrunv2/get_job.py +21 -1
  15. pulumi_gcp/cloudrunv2/job.py +157 -13
  16. pulumi_gcp/compute/_inputs.py +83 -0
  17. pulumi_gcp/compute/outputs.py +166 -1
  18. pulumi_gcp/dataproc/_inputs.py +100 -0
  19. pulumi_gcp/dataproc/metastore_service.py +172 -0
  20. pulumi_gcp/dataproc/outputs.py +192 -1
  21. pulumi_gcp/gkehub/_inputs.py +2 -2
  22. pulumi_gcp/gkehub/outputs.py +2 -2
  23. pulumi_gcp/pubsub/_inputs.py +40 -0
  24. pulumi_gcp/pubsub/outputs.py +66 -0
  25. pulumi_gcp/pubsub/subscription.py +166 -0
  26. pulumi_gcp/pulumi-plugin.json +1 -1
  27. pulumi_gcp/redis/get_instance.py +11 -1
  28. pulumi_gcp/redis/instance.py +47 -0
  29. pulumi_gcp/servicenetworking/__init__.py +1 -0
  30. pulumi_gcp/servicenetworking/vpc_service_controls.py +511 -0
  31. pulumi_gcp/sql/user.py +21 -7
  32. pulumi_gcp/vpcaccess/connector.py +2 -8
  33. {pulumi_gcp-7.29.0a1719298381.dist-info → pulumi_gcp-7.29.0a1719365805.dist-info}/METADATA +1 -1
  34. {pulumi_gcp-7.29.0a1719298381.dist-info → pulumi_gcp-7.29.0a1719365805.dist-info}/RECORD +36 -34
  35. {pulumi_gcp-7.29.0a1719298381.dist-info → pulumi_gcp-7.29.0a1719365805.dist-info}/WHEEL +1 -1
  36. {pulumi_gcp-7.29.0a1719298381.dist-info → pulumi_gcp-7.29.0a1719365805.dist-info}/top_level.txt +0 -0
@@ -31,6 +31,7 @@ class DatasetArgs:
31
31
  location: Optional[pulumi.Input[str]] = None,
32
32
  max_time_travel_hours: Optional[pulumi.Input[str]] = None,
33
33
  project: Optional[pulumi.Input[str]] = None,
34
+ resource_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
34
35
  storage_billing_model: Optional[pulumi.Input[str]] = None):
35
36
  """
36
37
  The set of arguments for constructing a Dataset resource.
@@ -109,6 +110,11 @@ class DatasetArgs:
109
110
  :param pulumi.Input[str] max_time_travel_hours: Defines the time travel window in hours. The value can be from 48 to 168 hours (2 to 7 days).
110
111
  :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
111
112
  If it is not provided, the provider project is used.
113
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_tags: The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
114
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
115
+ ID of the parent organization or project resource for this tag key. Tag value is expected
116
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
117
+ for more details.
112
118
  :param pulumi.Input[str] storage_billing_model: Specifies the storage billing model for the dataset.
113
119
  Set this flag value to LOGICAL to use logical bytes for storage billing,
114
120
  or to PHYSICAL to use physical bytes instead.
@@ -143,6 +149,8 @@ class DatasetArgs:
143
149
  pulumi.set(__self__, "max_time_travel_hours", max_time_travel_hours)
144
150
  if project is not None:
145
151
  pulumi.set(__self__, "project", project)
152
+ if resource_tags is not None:
153
+ pulumi.set(__self__, "resource_tags", resource_tags)
146
154
  if storage_billing_model is not None:
147
155
  pulumi.set(__self__, "storage_billing_model", storage_billing_model)
148
156
 
@@ -386,6 +394,22 @@ class DatasetArgs:
386
394
  def project(self, value: Optional[pulumi.Input[str]]):
387
395
  pulumi.set(self, "project", value)
388
396
 
397
+ @property
398
+ @pulumi.getter(name="resourceTags")
399
+ def resource_tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
400
+ """
401
+ The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
402
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
403
+ ID of the parent organization or project resource for this tag key. Tag value is expected
404
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
405
+ for more details.
406
+ """
407
+ return pulumi.get(self, "resource_tags")
408
+
409
+ @resource_tags.setter
410
+ def resource_tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
411
+ pulumi.set(self, "resource_tags", value)
412
+
389
413
  @property
390
414
  @pulumi.getter(name="storageBillingModel")
391
415
  def storage_billing_model(self) -> Optional[pulumi.Input[str]]:
@@ -425,6 +449,7 @@ class _DatasetState:
425
449
  max_time_travel_hours: Optional[pulumi.Input[str]] = None,
426
450
  project: Optional[pulumi.Input[str]] = None,
427
451
  pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
452
+ resource_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
428
453
  self_link: Optional[pulumi.Input[str]] = None,
429
454
  storage_billing_model: Optional[pulumi.Input[str]] = None):
430
455
  """
@@ -512,6 +537,11 @@ class _DatasetState:
512
537
  If it is not provided, the provider project is used.
513
538
  :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource
514
539
  and default labels configured on the provider.
540
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_tags: The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
541
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
542
+ ID of the parent organization or project resource for this tag key. Tag value is expected
543
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
544
+ for more details.
515
545
  :param pulumi.Input[str] self_link: The URI of the created resource.
516
546
  :param pulumi.Input[str] storage_billing_model: Specifies the storage billing model for the dataset.
517
547
  Set this flag value to LOGICAL to use logical bytes for storage billing,
@@ -558,6 +588,8 @@ class _DatasetState:
558
588
  pulumi.set(__self__, "project", project)
559
589
  if pulumi_labels is not None:
560
590
  pulumi.set(__self__, "pulumi_labels", pulumi_labels)
591
+ if resource_tags is not None:
592
+ pulumi.set(__self__, "resource_tags", resource_tags)
561
593
  if self_link is not None:
562
594
  pulumi.set(__self__, "self_link", self_link)
563
595
  if storage_billing_model is not None:
@@ -866,6 +898,22 @@ class _DatasetState:
866
898
  def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
867
899
  pulumi.set(self, "pulumi_labels", value)
868
900
 
901
+ @property
902
+ @pulumi.getter(name="resourceTags")
903
+ def resource_tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
904
+ """
905
+ The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
906
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
907
+ ID of the parent organization or project resource for this tag key. Tag value is expected
908
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
909
+ for more details.
910
+ """
911
+ return pulumi.get(self, "resource_tags")
912
+
913
+ @resource_tags.setter
914
+ def resource_tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
915
+ pulumi.set(self, "resource_tags", value)
916
+
869
917
  @property
870
918
  @pulumi.getter(name="selfLink")
871
919
  def self_link(self) -> Optional[pulumi.Input[str]]:
@@ -914,6 +962,7 @@ class Dataset(pulumi.CustomResource):
914
962
  location: Optional[pulumi.Input[str]] = None,
915
963
  max_time_travel_hours: Optional[pulumi.Input[str]] = None,
916
964
  project: Optional[pulumi.Input[str]] = None,
965
+ resource_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
917
966
  storage_billing_model: Optional[pulumi.Input[str]] = None,
918
967
  __props__=None):
919
968
  """
@@ -1189,6 +1238,11 @@ class Dataset(pulumi.CustomResource):
1189
1238
  :param pulumi.Input[str] max_time_travel_hours: Defines the time travel window in hours. The value can be from 48 to 168 hours (2 to 7 days).
1190
1239
  :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
1191
1240
  If it is not provided, the provider project is used.
1241
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_tags: The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
1242
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
1243
+ ID of the parent organization or project resource for this tag key. Tag value is expected
1244
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
1245
+ for more details.
1192
1246
  :param pulumi.Input[str] storage_billing_model: Specifies the storage billing model for the dataset.
1193
1247
  Set this flag value to LOGICAL to use logical bytes for storage billing,
1194
1248
  or to PHYSICAL to use physical bytes instead.
@@ -1426,6 +1480,7 @@ class Dataset(pulumi.CustomResource):
1426
1480
  location: Optional[pulumi.Input[str]] = None,
1427
1481
  max_time_travel_hours: Optional[pulumi.Input[str]] = None,
1428
1482
  project: Optional[pulumi.Input[str]] = None,
1483
+ resource_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
1429
1484
  storage_billing_model: Optional[pulumi.Input[str]] = None,
1430
1485
  __props__=None):
1431
1486
  opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
@@ -1453,6 +1508,7 @@ class Dataset(pulumi.CustomResource):
1453
1508
  __props__.__dict__["location"] = location
1454
1509
  __props__.__dict__["max_time_travel_hours"] = max_time_travel_hours
1455
1510
  __props__.__dict__["project"] = project
1511
+ __props__.__dict__["resource_tags"] = resource_tags
1456
1512
  __props__.__dict__["storage_billing_model"] = storage_billing_model
1457
1513
  __props__.__dict__["creation_time"] = None
1458
1514
  __props__.__dict__["effective_labels"] = None
@@ -1492,6 +1548,7 @@ class Dataset(pulumi.CustomResource):
1492
1548
  max_time_travel_hours: Optional[pulumi.Input[str]] = None,
1493
1549
  project: Optional[pulumi.Input[str]] = None,
1494
1550
  pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
1551
+ resource_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
1495
1552
  self_link: Optional[pulumi.Input[str]] = None,
1496
1553
  storage_billing_model: Optional[pulumi.Input[str]] = None) -> 'Dataset':
1497
1554
  """
@@ -1584,6 +1641,11 @@ class Dataset(pulumi.CustomResource):
1584
1641
  If it is not provided, the provider project is used.
1585
1642
  :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource
1586
1643
  and default labels configured on the provider.
1644
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_tags: The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
1645
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
1646
+ ID of the parent organization or project resource for this tag key. Tag value is expected
1647
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
1648
+ for more details.
1587
1649
  :param pulumi.Input[str] self_link: The URI of the created resource.
1588
1650
  :param pulumi.Input[str] storage_billing_model: Specifies the storage billing model for the dataset.
1589
1651
  Set this flag value to LOGICAL to use logical bytes for storage billing,
@@ -1614,6 +1676,7 @@ class Dataset(pulumi.CustomResource):
1614
1676
  __props__.__dict__["max_time_travel_hours"] = max_time_travel_hours
1615
1677
  __props__.__dict__["project"] = project
1616
1678
  __props__.__dict__["pulumi_labels"] = pulumi_labels
1679
+ __props__.__dict__["resource_tags"] = resource_tags
1617
1680
  __props__.__dict__["self_link"] = self_link
1618
1681
  __props__.__dict__["storage_billing_model"] = storage_billing_model
1619
1682
  return Dataset(resource_name, opts=opts, __props__=__props__)
@@ -1841,6 +1904,18 @@ class Dataset(pulumi.CustomResource):
1841
1904
  """
1842
1905
  return pulumi.get(self, "pulumi_labels")
1843
1906
 
1907
+ @property
1908
+ @pulumi.getter(name="resourceTags")
1909
+ def resource_tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
1910
+ """
1911
+ The tags attached to this table. Tag keys are globally unique. Tag key is expected to be
1912
+ in the namespaced format, for example "123456789012/environment" where 123456789012 is the
1913
+ ID of the parent organization or project resource for this tag key. Tag value is expected
1914
+ to be the short name, for example "Production". See [Tag definitions](https://www.terraform.io/iam/docs/tags-access-control#definitions)
1915
+ for more details.
1916
+ """
1917
+ return pulumi.get(self, "resource_tags")
1918
+
1844
1919
  @property
1845
1920
  @pulumi.getter(name="selfLink")
1846
1921
  def self_link(self) -> pulumi.Output[str]:
@@ -22,7 +22,7 @@ class GetDatasetResult:
22
22
  """
23
23
  A collection of values returned by getDataset.
24
24
  """
25
- def __init__(__self__, accesses=None, creation_time=None, dataset_id=None, default_collation=None, default_encryption_configurations=None, default_partition_expiration_ms=None, default_table_expiration_ms=None, delete_contents_on_destroy=None, description=None, effective_labels=None, etag=None, external_dataset_references=None, friendly_name=None, id=None, is_case_insensitive=None, labels=None, last_modified_time=None, location=None, max_time_travel_hours=None, project=None, pulumi_labels=None, self_link=None, storage_billing_model=None):
25
+ def __init__(__self__, accesses=None, creation_time=None, dataset_id=None, default_collation=None, default_encryption_configurations=None, default_partition_expiration_ms=None, default_table_expiration_ms=None, delete_contents_on_destroy=None, description=None, effective_labels=None, etag=None, external_dataset_references=None, friendly_name=None, id=None, is_case_insensitive=None, labels=None, last_modified_time=None, location=None, max_time_travel_hours=None, project=None, pulumi_labels=None, resource_tags=None, self_link=None, storage_billing_model=None):
26
26
  if accesses and not isinstance(accesses, list):
27
27
  raise TypeError("Expected argument 'accesses' to be a list")
28
28
  pulumi.set(__self__, "accesses", accesses)
@@ -86,6 +86,9 @@ class GetDatasetResult:
86
86
  if pulumi_labels and not isinstance(pulumi_labels, dict):
87
87
  raise TypeError("Expected argument 'pulumi_labels' to be a dict")
88
88
  pulumi.set(__self__, "pulumi_labels", pulumi_labels)
89
+ if resource_tags and not isinstance(resource_tags, dict):
90
+ raise TypeError("Expected argument 'resource_tags' to be a dict")
91
+ pulumi.set(__self__, "resource_tags", resource_tags)
89
92
  if self_link and not isinstance(self_link, str):
90
93
  raise TypeError("Expected argument 'self_link' to be a str")
91
94
  pulumi.set(__self__, "self_link", self_link)
@@ -201,6 +204,11 @@ class GetDatasetResult:
201
204
  def pulumi_labels(self) -> Mapping[str, str]:
202
205
  return pulumi.get(self, "pulumi_labels")
203
206
 
207
+ @property
208
+ @pulumi.getter(name="resourceTags")
209
+ def resource_tags(self) -> Mapping[str, str]:
210
+ return pulumi.get(self, "resource_tags")
211
+
204
212
  @property
205
213
  @pulumi.getter(name="selfLink")
206
214
  def self_link(self) -> str:
@@ -239,6 +247,7 @@ class AwaitableGetDatasetResult(GetDatasetResult):
239
247
  max_time_travel_hours=self.max_time_travel_hours,
240
248
  project=self.project,
241
249
  pulumi_labels=self.pulumi_labels,
250
+ resource_tags=self.resource_tags,
242
251
  self_link=self.self_link,
243
252
  storage_billing_model=self.storage_billing_model)
244
253
 
@@ -294,6 +303,7 @@ def get_dataset(dataset_id: Optional[str] = None,
294
303
  max_time_travel_hours=pulumi.get(__ret__, 'max_time_travel_hours'),
295
304
  project=pulumi.get(__ret__, 'project'),
296
305
  pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'),
306
+ resource_tags=pulumi.get(__ret__, 'resource_tags'),
297
307
  self_link=pulumi.get(__ret__, 'self_link'),
298
308
  storage_billing_model=pulumi.get(__ret__, 'storage_billing_model'))
299
309
 
@@ -104,6 +104,7 @@ class AccountIamMemberConditionArgs:
104
104
  class BudgetAllUpdatesRuleArgs:
105
105
  def __init__(__self__, *,
106
106
  disable_default_iam_recipients: Optional[pulumi.Input[bool]] = None,
107
+ enable_project_level_recipients: Optional[pulumi.Input[bool]] = None,
107
108
  monitoring_notification_channels: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
108
109
  pubsub_topic: Optional[pulumi.Input[str]] = None,
109
110
  schema_version: Optional[pulumi.Input[str]] = None):
@@ -112,6 +113,10 @@ class BudgetAllUpdatesRuleArgs:
112
113
  when a threshold is exceeded. Default recipients are
113
114
  those with Billing Account Administrators and Billing
114
115
  Account Users IAM roles for the target account.
116
+ :param pulumi.Input[bool] enable_project_level_recipients: When set to true, and when the budget has a single project configured,
117
+ notifications will be sent to project level recipients of that project.
118
+ This field will be ignored if the budget has multiple or no project configured.
119
+ Currently, project level recipients are the users with Owner role on a cloud project.
115
120
  :param pulumi.Input[Sequence[pulumi.Input[str]]] monitoring_notification_channels: The full resource name of a monitoring notification
116
121
  channel in the form
117
122
  projects/{project_id}/notificationChannels/{channel_id}.
@@ -126,6 +131,8 @@ class BudgetAllUpdatesRuleArgs:
126
131
  """
127
132
  if disable_default_iam_recipients is not None:
128
133
  pulumi.set(__self__, "disable_default_iam_recipients", disable_default_iam_recipients)
134
+ if enable_project_level_recipients is not None:
135
+ pulumi.set(__self__, "enable_project_level_recipients", enable_project_level_recipients)
129
136
  if monitoring_notification_channels is not None:
130
137
  pulumi.set(__self__, "monitoring_notification_channels", monitoring_notification_channels)
131
138
  if pubsub_topic is not None:
@@ -148,6 +155,21 @@ class BudgetAllUpdatesRuleArgs:
148
155
  def disable_default_iam_recipients(self, value: Optional[pulumi.Input[bool]]):
149
156
  pulumi.set(self, "disable_default_iam_recipients", value)
150
157
 
158
+ @property
159
+ @pulumi.getter(name="enableProjectLevelRecipients")
160
+ def enable_project_level_recipients(self) -> Optional[pulumi.Input[bool]]:
161
+ """
162
+ When set to true, and when the budget has a single project configured,
163
+ notifications will be sent to project level recipients of that project.
164
+ This field will be ignored if the budget has multiple or no project configured.
165
+ Currently, project level recipients are the users with Owner role on a cloud project.
166
+ """
167
+ return pulumi.get(self, "enable_project_level_recipients")
168
+
169
+ @enable_project_level_recipients.setter
170
+ def enable_project_level_recipients(self, value: Optional[pulumi.Input[bool]]):
171
+ pulumi.set(self, "enable_project_level_recipients", value)
172
+
151
173
  @property
152
174
  @pulumi.getter(name="monitoringNotificationChannels")
153
175
  def monitoring_notification_channels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
@@ -435,6 +435,31 @@ class Budget(pulumi.CustomResource):
435
435
  disable_default_iam_recipients=True,
436
436
  ))
437
437
  ```
438
+ ### Billing Budget Notify Project Recipient
439
+
440
+ ```python
441
+ import pulumi
442
+ import pulumi_gcp as gcp
443
+
444
+ account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
445
+ project = gcp.organizations.get_project()
446
+ budget = gcp.billing.Budget("budget",
447
+ billing_account=account.id,
448
+ display_name="Example Billing Budget",
449
+ budget_filter=gcp.billing.BudgetBudgetFilterArgs(
450
+ projects=[f"projects/{project.number}"],
451
+ ),
452
+ amount=gcp.billing.BudgetAmountArgs(
453
+ specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(
454
+ currency_code="USD",
455
+ units="100000",
456
+ ),
457
+ ),
458
+ all_updates_rule=gcp.billing.BudgetAllUpdatesRuleArgs(
459
+ monitoring_notification_channels=[],
460
+ enable_project_level_recipients=True,
461
+ ))
462
+ ```
438
463
  ### Billing Budget Customperiod
439
464
 
440
465
  ```python
@@ -658,6 +683,31 @@ class Budget(pulumi.CustomResource):
658
683
  disable_default_iam_recipients=True,
659
684
  ))
660
685
  ```
686
+ ### Billing Budget Notify Project Recipient
687
+
688
+ ```python
689
+ import pulumi
690
+ import pulumi_gcp as gcp
691
+
692
+ account = gcp.organizations.get_billing_account(billing_account="000000-0000000-0000000-000000")
693
+ project = gcp.organizations.get_project()
694
+ budget = gcp.billing.Budget("budget",
695
+ billing_account=account.id,
696
+ display_name="Example Billing Budget",
697
+ budget_filter=gcp.billing.BudgetBudgetFilterArgs(
698
+ projects=[f"projects/{project.number}"],
699
+ ),
700
+ amount=gcp.billing.BudgetAmountArgs(
701
+ specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(
702
+ currency_code="USD",
703
+ units="100000",
704
+ ),
705
+ ),
706
+ all_updates_rule=gcp.billing.BudgetAllUpdatesRuleArgs(
707
+ monitoring_notification_channels=[],
708
+ enable_project_level_recipients=True,
709
+ ))
710
+ ```
661
711
  ### Billing Budget Customperiod
662
712
 
663
713
  ```python
@@ -84,6 +84,8 @@ class BudgetAllUpdatesRule(dict):
84
84
  suggest = None
85
85
  if key == "disableDefaultIamRecipients":
86
86
  suggest = "disable_default_iam_recipients"
87
+ elif key == "enableProjectLevelRecipients":
88
+ suggest = "enable_project_level_recipients"
87
89
  elif key == "monitoringNotificationChannels":
88
90
  suggest = "monitoring_notification_channels"
89
91
  elif key == "pubsubTopic":
@@ -104,6 +106,7 @@ class BudgetAllUpdatesRule(dict):
104
106
 
105
107
  def __init__(__self__, *,
106
108
  disable_default_iam_recipients: Optional[bool] = None,
109
+ enable_project_level_recipients: Optional[bool] = None,
107
110
  monitoring_notification_channels: Optional[Sequence[str]] = None,
108
111
  pubsub_topic: Optional[str] = None,
109
112
  schema_version: Optional[str] = None):
@@ -112,6 +115,10 @@ class BudgetAllUpdatesRule(dict):
112
115
  when a threshold is exceeded. Default recipients are
113
116
  those with Billing Account Administrators and Billing
114
117
  Account Users IAM roles for the target account.
118
+ :param bool enable_project_level_recipients: When set to true, and when the budget has a single project configured,
119
+ notifications will be sent to project level recipients of that project.
120
+ This field will be ignored if the budget has multiple or no project configured.
121
+ Currently, project level recipients are the users with Owner role on a cloud project.
115
122
  :param Sequence[str] monitoring_notification_channels: The full resource name of a monitoring notification
116
123
  channel in the form
117
124
  projects/{project_id}/notificationChannels/{channel_id}.
@@ -126,6 +133,8 @@ class BudgetAllUpdatesRule(dict):
126
133
  """
127
134
  if disable_default_iam_recipients is not None:
128
135
  pulumi.set(__self__, "disable_default_iam_recipients", disable_default_iam_recipients)
136
+ if enable_project_level_recipients is not None:
137
+ pulumi.set(__self__, "enable_project_level_recipients", enable_project_level_recipients)
129
138
  if monitoring_notification_channels is not None:
130
139
  pulumi.set(__self__, "monitoring_notification_channels", monitoring_notification_channels)
131
140
  if pubsub_topic is not None:
@@ -144,6 +153,17 @@ class BudgetAllUpdatesRule(dict):
144
153
  """
145
154
  return pulumi.get(self, "disable_default_iam_recipients")
146
155
 
156
+ @property
157
+ @pulumi.getter(name="enableProjectLevelRecipients")
158
+ def enable_project_level_recipients(self) -> Optional[bool]:
159
+ """
160
+ When set to true, and when the budget has a single project configured,
161
+ notifications will be sent to project level recipients of that project.
162
+ This field will be ignored if the budget has multiple or no project configured.
163
+ Currently, project level recipients are the users with Owner role on a cloud project.
164
+ """
165
+ return pulumi.get(self, "enable_project_level_recipients")
166
+
147
167
  @property
148
168
  @pulumi.getter(name="monitoringNotificationChannels")
149
169
  def monitoring_notification_channels(self) -> Optional[Sequence[str]]:
@@ -22,7 +22,7 @@ class GetJobResult:
22
22
  """
23
23
  A collection of values returned by getJob.
24
24
  """
25
- def __init__(__self__, annotations=None, binary_authorizations=None, client=None, client_version=None, conditions=None, create_time=None, creator=None, delete_time=None, effective_annotations=None, effective_labels=None, etag=None, execution_count=None, expire_time=None, generation=None, id=None, labels=None, last_modifier=None, latest_created_executions=None, launch_stage=None, location=None, name=None, observed_generation=None, project=None, pulumi_labels=None, reconciling=None, templates=None, terminal_conditions=None, uid=None, update_time=None):
25
+ def __init__(__self__, annotations=None, binary_authorizations=None, client=None, client_version=None, conditions=None, create_time=None, creator=None, delete_time=None, effective_annotations=None, effective_labels=None, etag=None, execution_count=None, expire_time=None, generation=None, id=None, labels=None, last_modifier=None, latest_created_executions=None, launch_stage=None, location=None, name=None, observed_generation=None, project=None, pulumi_labels=None, reconciling=None, run_execution_token=None, start_execution_token=None, templates=None, terminal_conditions=None, uid=None, update_time=None):
26
26
  if annotations and not isinstance(annotations, dict):
27
27
  raise TypeError("Expected argument 'annotations' to be a dict")
28
28
  pulumi.set(__self__, "annotations", annotations)
@@ -98,6 +98,12 @@ class GetJobResult:
98
98
  if reconciling and not isinstance(reconciling, bool):
99
99
  raise TypeError("Expected argument 'reconciling' to be a bool")
100
100
  pulumi.set(__self__, "reconciling", reconciling)
101
+ if run_execution_token and not isinstance(run_execution_token, str):
102
+ raise TypeError("Expected argument 'run_execution_token' to be a str")
103
+ pulumi.set(__self__, "run_execution_token", run_execution_token)
104
+ if start_execution_token and not isinstance(start_execution_token, str):
105
+ raise TypeError("Expected argument 'start_execution_token' to be a str")
106
+ pulumi.set(__self__, "start_execution_token", start_execution_token)
101
107
  if templates and not isinstance(templates, list):
102
108
  raise TypeError("Expected argument 'templates' to be a list")
103
109
  pulumi.set(__self__, "templates", templates)
@@ -239,6 +245,16 @@ class GetJobResult:
239
245
  def reconciling(self) -> bool:
240
246
  return pulumi.get(self, "reconciling")
241
247
 
248
+ @property
249
+ @pulumi.getter(name="runExecutionToken")
250
+ def run_execution_token(self) -> str:
251
+ return pulumi.get(self, "run_execution_token")
252
+
253
+ @property
254
+ @pulumi.getter(name="startExecutionToken")
255
+ def start_execution_token(self) -> str:
256
+ return pulumi.get(self, "start_execution_token")
257
+
242
258
  @property
243
259
  @pulumi.getter
244
260
  def templates(self) -> Sequence['outputs.GetJobTemplateResult']:
@@ -291,6 +307,8 @@ class AwaitableGetJobResult(GetJobResult):
291
307
  project=self.project,
292
308
  pulumi_labels=self.pulumi_labels,
293
309
  reconciling=self.reconciling,
310
+ run_execution_token=self.run_execution_token,
311
+ start_execution_token=self.start_execution_token,
294
312
  templates=self.templates,
295
313
  terminal_conditions=self.terminal_conditions,
296
314
  uid=self.uid,
@@ -357,6 +375,8 @@ def get_job(location: Optional[str] = None,
357
375
  project=pulumi.get(__ret__, 'project'),
358
376
  pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'),
359
377
  reconciling=pulumi.get(__ret__, 'reconciling'),
378
+ run_execution_token=pulumi.get(__ret__, 'run_execution_token'),
379
+ start_execution_token=pulumi.get(__ret__, 'start_execution_token'),
360
380
  templates=pulumi.get(__ret__, 'templates'),
361
381
  terminal_conditions=pulumi.get(__ret__, 'terminal_conditions'),
362
382
  uid=pulumi.get(__ret__, 'uid'),