pulumi-gcp 7.31.0a1720850808__py3-none-any.whl → 7.32.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 (103) hide show
  1. pulumi_gcp/__init__.py +51 -0
  2. pulumi_gcp/alloydb/cluster.py +0 -24
  3. pulumi_gcp/applicationintegration/auth_config.py +2 -2
  4. pulumi_gcp/bigquery/_inputs.py +0 -12
  5. pulumi_gcp/bigquery/dataset.py +0 -28
  6. pulumi_gcp/bigquery/dataset_access.py +0 -28
  7. pulumi_gcp/bigquery/outputs.py +0 -24
  8. pulumi_gcp/bigquery/reservation_assignment.py +48 -30
  9. pulumi_gcp/bigtable/authorized_view.py +104 -0
  10. pulumi_gcp/certificateauthority/certificate_template.py +2 -2
  11. pulumi_gcp/certificatemanager/_inputs.py +33 -0
  12. pulumi_gcp/certificatemanager/outputs.py +36 -0
  13. pulumi_gcp/certificatemanager/trust_config.py +107 -0
  14. pulumi_gcp/compute/_inputs.py +3 -6
  15. pulumi_gcp/compute/ca_external_account_key.py +2 -2
  16. pulumi_gcp/compute/get_health_check.py +11 -1
  17. pulumi_gcp/compute/global_address.py +16 -4
  18. pulumi_gcp/compute/global_forwarding_rule.py +2 -4
  19. pulumi_gcp/compute/health_check.py +124 -0
  20. pulumi_gcp/compute/instance.py +14 -14
  21. pulumi_gcp/compute/instance_group_membership.py +2 -2
  22. pulumi_gcp/compute/outputs.py +4 -8
  23. pulumi_gcp/compute/region_network_endpoint.py +2 -2
  24. pulumi_gcp/compute/region_network_endpoint_group.py +2 -2
  25. pulumi_gcp/compute/subnetwork.py +2 -2
  26. pulumi_gcp/compute/target_instance.py +2 -2
  27. pulumi_gcp/config/__init__.pyi +4 -0
  28. pulumi_gcp/config/vars.py +8 -0
  29. pulumi_gcp/container/_inputs.py +3 -3
  30. pulumi_gcp/container/outputs.py +4 -4
  31. pulumi_gcp/containeranalysis/note.py +2 -2
  32. pulumi_gcp/dataloss/_inputs.py +3 -0
  33. pulumi_gcp/dataloss/outputs.py +2 -0
  34. pulumi_gcp/dataloss/prevention_job_trigger.py +90 -0
  35. pulumi_gcp/dataplex/_inputs.py +56 -0
  36. pulumi_gcp/dataplex/datascan.py +12 -0
  37. pulumi_gcp/dataplex/outputs.py +52 -0
  38. pulumi_gcp/filestore/backup.py +2 -2
  39. pulumi_gcp/filestore/instance.py +2 -2
  40. pulumi_gcp/filestore/snapshot.py +2 -2
  41. pulumi_gcp/gkehub/__init__.py +1 -0
  42. pulumi_gcp/gkehub/_inputs.py +20 -0
  43. pulumi_gcp/gkehub/get_membership_binding.py +222 -0
  44. pulumi_gcp/gkehub/outputs.py +31 -0
  45. pulumi_gcp/iap/client.py +7 -7
  46. pulumi_gcp/kms/__init__.py +2 -0
  47. pulumi_gcp/kms/_inputs.py +40 -0
  48. pulumi_gcp/kms/crypto_key.py +110 -7
  49. pulumi_gcp/kms/get_crypto_keys.py +143 -0
  50. pulumi_gcp/kms/get_key_rings.py +119 -0
  51. pulumi_gcp/kms/get_kms_crypto_key.py +11 -1
  52. pulumi_gcp/kms/outputs.py +382 -0
  53. pulumi_gcp/logging/_inputs.py +12 -12
  54. pulumi_gcp/logging/folder_bucket_config.py +6 -6
  55. pulumi_gcp/logging/organization_bucket_config.py +6 -6
  56. pulumi_gcp/logging/outputs.py +8 -8
  57. pulumi_gcp/logging/project_bucket_config.py +6 -6
  58. pulumi_gcp/looker/instance.py +2 -2
  59. pulumi_gcp/monitoring/custom_service.py +2 -2
  60. pulumi_gcp/monitoring/generic_service.py +2 -2
  61. pulumi_gcp/monitoring/notification_channel.py +2 -2
  62. pulumi_gcp/monitoring/slo.py +2 -2
  63. pulumi_gcp/netapp/storage_pool.py +132 -53
  64. pulumi_gcp/netapp/volume.py +60 -4
  65. pulumi_gcp/networksecurity/address_group.py +85 -1
  66. pulumi_gcp/networksecurity/firewall_endpoint.py +2 -2
  67. pulumi_gcp/networksecurity/firewall_endpoint_association.py +2 -2
  68. pulumi_gcp/networksecurity/security_profile_group.py +2 -2
  69. pulumi_gcp/orgpolicy/_inputs.py +40 -10
  70. pulumi_gcp/orgpolicy/outputs.py +28 -8
  71. pulumi_gcp/orgpolicy/policy.py +52 -35
  72. pulumi_gcp/privilegedaccessmanager/entitlement.py +4 -0
  73. pulumi_gcp/provider.py +40 -0
  74. pulumi_gcp/pubsub/_inputs.py +3 -3
  75. pulumi_gcp/pubsub/outputs.py +4 -4
  76. pulumi_gcp/pulumi-plugin.json +1 -1
  77. pulumi_gcp/securesourcemanager/__init__.py +5 -0
  78. pulumi_gcp/securesourcemanager/_inputs.py +284 -0
  79. pulumi_gcp/securesourcemanager/get_repository_iam_policy.py +177 -0
  80. pulumi_gcp/securesourcemanager/outputs.py +202 -0
  81. pulumi_gcp/securesourcemanager/repository.py +715 -0
  82. pulumi_gcp/securesourcemanager/repository_iam_binding.py +804 -0
  83. pulumi_gcp/securesourcemanager/repository_iam_member.py +804 -0
  84. pulumi_gcp/securesourcemanager/repository_iam_policy.py +643 -0
  85. pulumi_gcp/securitycenter/__init__.py +2 -0
  86. pulumi_gcp/securitycenter/_inputs.py +186 -0
  87. pulumi_gcp/securitycenter/outputs.py +118 -0
  88. pulumi_gcp/securitycenter/project_notification_config.py +518 -0
  89. pulumi_gcp/securitycenter/v2_organization_notification_config.py +576 -0
  90. pulumi_gcp/securityposture/posture_deployment.py +0 -78
  91. pulumi_gcp/servicenetworking/vpc_service_controls.py +2 -2
  92. pulumi_gcp/siteverification/__init__.py +8 -0
  93. pulumi_gcp/siteverification/get_token.py +221 -0
  94. pulumi_gcp/vertex/_inputs.py +21 -1
  95. pulumi_gcp/vertex/ai_feature_online_store_featureview.py +222 -0
  96. pulumi_gcp/vertex/outputs.py +15 -1
  97. pulumi_gcp/workstations/_inputs.py +33 -1
  98. pulumi_gcp/workstations/outputs.py +23 -1
  99. pulumi_gcp/workstations/workstation_config.py +18 -0
  100. {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/METADATA +1 -1
  101. {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/RECORD +103 -91
  102. {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/WHEEL +0 -0
  103. {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/top_level.txt +0 -0
@@ -221,9 +221,9 @@ class VpcServiceControls(pulumi.CustomResource):
221
221
 
222
222
  * [API documentation](https://cloud.google.com/service-infrastructure/docs/service-networking/reference/rest/v1/services)
223
223
  * How-to Guides
224
+ * [Enable VPC Service Controls for service networking](https://cloud.google.com/sdk/gcloud/reference/services/vpc-peerings/enable-vpc-service-controls)
224
225
  * [Private Google Access with VPC Service Controls](https://cloud.google.com/vpc-service-controls/docs/private-connectivity)
225
226
  * [Set up private connectivity to Google APIs and services](https://cloud.google.com/vpc-service-controls/docs/set-up-private-connectivity)
226
- * [Enable VPC Service Controls for service networking](https://cloud.google.com/sdk/gcloud/reference/services/vpc-peerings/enable-vpc-service-controls)
227
227
 
228
228
  > **Note:** Destroying a `servicenetworking.VpcServiceControls`
229
229
  resource will remove it from state, but will not change the
@@ -333,9 +333,9 @@ class VpcServiceControls(pulumi.CustomResource):
333
333
 
334
334
  * [API documentation](https://cloud.google.com/service-infrastructure/docs/service-networking/reference/rest/v1/services)
335
335
  * How-to Guides
336
+ * [Enable VPC Service Controls for service networking](https://cloud.google.com/sdk/gcloud/reference/services/vpc-peerings/enable-vpc-service-controls)
336
337
  * [Private Google Access with VPC Service Controls](https://cloud.google.com/vpc-service-controls/docs/private-connectivity)
337
338
  * [Set up private connectivity to Google APIs and services](https://cloud.google.com/vpc-service-controls/docs/set-up-private-connectivity)
338
- * [Enable VPC Service Controls for service networking](https://cloud.google.com/sdk/gcloud/reference/services/vpc-peerings/enable-vpc-service-controls)
339
339
 
340
340
  > **Note:** Destroying a `servicenetworking.VpcServiceControls`
341
341
  resource will remove it from state, but will not change the
@@ -0,0 +1,8 @@
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
+ from .. import _utilities
6
+ import typing
7
+ # Export this package's modules as members:
8
+ from .get_token import *
@@ -0,0 +1,221 @@
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 sys
8
+ import pulumi
9
+ import pulumi.runtime
10
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
11
+ if sys.version_info >= (3, 11):
12
+ from typing import NotRequired, TypedDict, TypeAlias
13
+ else:
14
+ from typing_extensions import NotRequired, TypedDict, TypeAlias
15
+ from .. import _utilities
16
+
17
+ __all__ = [
18
+ 'GetTokenResult',
19
+ 'AwaitableGetTokenResult',
20
+ 'get_token',
21
+ 'get_token_output',
22
+ ]
23
+
24
+ @pulumi.output_type
25
+ class GetTokenResult:
26
+ """
27
+ A collection of values returned by getToken.
28
+ """
29
+ def __init__(__self__, id=None, identifier=None, token=None, type=None, verification_method=None):
30
+ if id and not isinstance(id, str):
31
+ raise TypeError("Expected argument 'id' to be a str")
32
+ pulumi.set(__self__, "id", id)
33
+ if identifier and not isinstance(identifier, str):
34
+ raise TypeError("Expected argument 'identifier' to be a str")
35
+ pulumi.set(__self__, "identifier", identifier)
36
+ if token and not isinstance(token, str):
37
+ raise TypeError("Expected argument 'token' to be a str")
38
+ pulumi.set(__self__, "token", token)
39
+ if type and not isinstance(type, str):
40
+ raise TypeError("Expected argument 'type' to be a str")
41
+ pulumi.set(__self__, "type", type)
42
+ if verification_method and not isinstance(verification_method, str):
43
+ raise TypeError("Expected argument 'verification_method' to be a str")
44
+ pulumi.set(__self__, "verification_method", verification_method)
45
+
46
+ @property
47
+ @pulumi.getter
48
+ def id(self) -> str:
49
+ """
50
+ The provider-assigned unique ID for this managed resource.
51
+ """
52
+ return pulumi.get(self, "id")
53
+
54
+ @property
55
+ @pulumi.getter
56
+ def identifier(self) -> str:
57
+ return pulumi.get(self, "identifier")
58
+
59
+ @property
60
+ @pulumi.getter
61
+ def token(self) -> str:
62
+ """
63
+ The generated token for use in subsequent verification steps.
64
+ """
65
+ return pulumi.get(self, "token")
66
+
67
+ @property
68
+ @pulumi.getter
69
+ def type(self) -> str:
70
+ return pulumi.get(self, "type")
71
+
72
+ @property
73
+ @pulumi.getter(name="verificationMethod")
74
+ def verification_method(self) -> str:
75
+ return pulumi.get(self, "verification_method")
76
+
77
+
78
+ class AwaitableGetTokenResult(GetTokenResult):
79
+ # pylint: disable=using-constant-test
80
+ def __await__(self):
81
+ if False:
82
+ yield self
83
+ return GetTokenResult(
84
+ id=self.id,
85
+ identifier=self.identifier,
86
+ token=self.token,
87
+ type=self.type,
88
+ verification_method=self.verification_method)
89
+
90
+
91
+ def get_token(identifier: Optional[str] = None,
92
+ type: Optional[str] = None,
93
+ verification_method: Optional[str] = None,
94
+ opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTokenResult:
95
+ """
96
+ ## subcategory: "Site Verification"
97
+
98
+ description: |-
99
+ A verification token is used to demonstrate ownership of a website or domain.
100
+ ---
101
+
102
+ # siteverification_get_token
103
+
104
+ A verification token is used to demonstrate ownership of a website or domain.
105
+
106
+ To get more information about Token, see:
107
+
108
+ * [API documentation](https://developers.google.com/site-verification/v1)
109
+ * How-to Guides
110
+ * [Getting Started](https://developers.google.com/site-verification/v1/getting_started)
111
+
112
+ ## Example Usage
113
+
114
+ ### Site Verification Via Site META Tag
115
+
116
+ ```python
117
+ import pulumi
118
+ import pulumi_gcp as gcp
119
+
120
+ example = gcp.siteverification.get_token(type="SITE",
121
+ identifier="https://www.example.com",
122
+ verification_method="META")
123
+ ```
124
+
125
+ ### Site Verification Via DNS TXT Record
126
+
127
+ ```python
128
+ import pulumi
129
+ import pulumi_gcp as gcp
130
+
131
+ example = gcp.siteverification.get_token(type="INET_DOMAIN",
132
+ identifier="www.example.com",
133
+ verification_method="DNS_TXT")
134
+ ```
135
+
136
+
137
+ :param str identifier: The site identifier. If the type is set to SITE, the identifier is a URL. If the type is
138
+ set to INET_DOMAIN, the identifier is a domain name.
139
+ :param str type: The type of resource to be verified, either a domain or a web site.
140
+ Possible values are: `INET_DOMAIN`, `SITE`.
141
+ :param str verification_method: The verification method for the Site Verification system to use to verify
142
+ this site or domain.
143
+ Possible values are: `ANALYTICS`, `DNS_CNAME`, `DNS_TXT`, `FILE`, `META`, `TAG_MANAGER`.
144
+
145
+
146
+ - - -
147
+ """
148
+ __args__ = dict()
149
+ __args__['identifier'] = identifier
150
+ __args__['type'] = type
151
+ __args__['verificationMethod'] = verification_method
152
+ opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
153
+ __ret__ = pulumi.runtime.invoke('gcp:siteverification/getToken:getToken', __args__, opts=opts, typ=GetTokenResult).value
154
+
155
+ return AwaitableGetTokenResult(
156
+ id=pulumi.get(__ret__, 'id'),
157
+ identifier=pulumi.get(__ret__, 'identifier'),
158
+ token=pulumi.get(__ret__, 'token'),
159
+ type=pulumi.get(__ret__, 'type'),
160
+ verification_method=pulumi.get(__ret__, 'verification_method'))
161
+
162
+
163
+ @_utilities.lift_output_func(get_token)
164
+ def get_token_output(identifier: Optional[pulumi.Input[str]] = None,
165
+ type: Optional[pulumi.Input[str]] = None,
166
+ verification_method: Optional[pulumi.Input[str]] = None,
167
+ opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTokenResult]:
168
+ """
169
+ ## subcategory: "Site Verification"
170
+
171
+ description: |-
172
+ A verification token is used to demonstrate ownership of a website or domain.
173
+ ---
174
+
175
+ # siteverification_get_token
176
+
177
+ A verification token is used to demonstrate ownership of a website or domain.
178
+
179
+ To get more information about Token, see:
180
+
181
+ * [API documentation](https://developers.google.com/site-verification/v1)
182
+ * How-to Guides
183
+ * [Getting Started](https://developers.google.com/site-verification/v1/getting_started)
184
+
185
+ ## Example Usage
186
+
187
+ ### Site Verification Via Site META Tag
188
+
189
+ ```python
190
+ import pulumi
191
+ import pulumi_gcp as gcp
192
+
193
+ example = gcp.siteverification.get_token(type="SITE",
194
+ identifier="https://www.example.com",
195
+ verification_method="META")
196
+ ```
197
+
198
+ ### Site Verification Via DNS TXT Record
199
+
200
+ ```python
201
+ import pulumi
202
+ import pulumi_gcp as gcp
203
+
204
+ example = gcp.siteverification.get_token(type="INET_DOMAIN",
205
+ identifier="www.example.com",
206
+ verification_method="DNS_TXT")
207
+ ```
208
+
209
+
210
+ :param str identifier: The site identifier. If the type is set to SITE, the identifier is a URL. If the type is
211
+ set to INET_DOMAIN, the identifier is a domain name.
212
+ :param str type: The type of resource to be verified, either a domain or a web site.
213
+ Possible values are: `INET_DOMAIN`, `SITE`.
214
+ :param str verification_method: The verification method for the Site Verification system to use to verify
215
+ this site or domain.
216
+ Possible values are: `ANALYTICS`, `DNS_CNAME`, `DNS_TXT`, `FILE`, `META`, `TAG_MANAGER`.
217
+
218
+
219
+ - - -
220
+ """
221
+ ...
@@ -1615,18 +1615,26 @@ if not MYPY:
1615
1615
  List of features that need to be synced to Online Store.
1616
1616
  Structure is documented below.
1617
1617
  """
1618
+ project_number: NotRequired[pulumi.Input[str]]
1619
+ """
1620
+ The project number of the parent project of the feature Groups.
1621
+ """
1618
1622
  elif False:
1619
1623
  AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgsDict: TypeAlias = Mapping[str, Any]
1620
1624
 
1621
1625
  @pulumi.input_type
1622
1626
  class AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs:
1623
1627
  def __init__(__self__, *,
1624
- feature_groups: pulumi.Input[Sequence[pulumi.Input['AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs']]]):
1628
+ feature_groups: pulumi.Input[Sequence[pulumi.Input['AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs']]],
1629
+ project_number: Optional[pulumi.Input[str]] = None):
1625
1630
  """
1626
1631
  :param pulumi.Input[Sequence[pulumi.Input['AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs']]] feature_groups: List of features that need to be synced to Online Store.
1627
1632
  Structure is documented below.
1633
+ :param pulumi.Input[str] project_number: The project number of the parent project of the feature Groups.
1628
1634
  """
1629
1635
  pulumi.set(__self__, "feature_groups", feature_groups)
1636
+ if project_number is not None:
1637
+ pulumi.set(__self__, "project_number", project_number)
1630
1638
 
1631
1639
  @property
1632
1640
  @pulumi.getter(name="featureGroups")
@@ -1641,6 +1649,18 @@ class AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs:
1641
1649
  def feature_groups(self, value: pulumi.Input[Sequence[pulumi.Input['AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs']]]):
1642
1650
  pulumi.set(self, "feature_groups", value)
1643
1651
 
1652
+ @property
1653
+ @pulumi.getter(name="projectNumber")
1654
+ def project_number(self) -> Optional[pulumi.Input[str]]:
1655
+ """
1656
+ The project number of the parent project of the feature Groups.
1657
+ """
1658
+ return pulumi.get(self, "project_number")
1659
+
1660
+ @project_number.setter
1661
+ def project_number(self, value: Optional[pulumi.Input[str]]):
1662
+ pulumi.set(self, "project_number", value)
1663
+
1644
1664
 
1645
1665
  if not MYPY:
1646
1666
  class AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgsDict(TypedDict):
@@ -599,6 +599,117 @@ class AiFeatureOnlineStoreFeatureview(pulumi.CustomResource):
599
599
  }],
600
600
  })
601
601
  ```
602
+ ### Vertex Ai Featureonlinestore Featureview Cross Project
603
+
604
+ ```python
605
+ import pulumi
606
+ import pulumi_gcp as gcp
607
+ import pulumi_time as time
608
+
609
+ test_project = gcp.organizations.get_project()
610
+ project = gcp.organizations.Project("project",
611
+ project_id="tf-test_55138",
612
+ name="tf-test_37559",
613
+ org_id="123456789",
614
+ billing_account="000000-0000000-0000000-000000")
615
+ wait60_seconds = time.index.Sleep("wait_60_seconds", create_duration=60s,
616
+ opts = pulumi.ResourceOptions(depends_on=[project]))
617
+ vertexai = gcp.projects.Service("vertexai",
618
+ service="aiplatform.googleapis.com",
619
+ project=project.project_id,
620
+ disable_on_destroy=False,
621
+ opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))
622
+ featureonlinestore = gcp.vertex.AiFeatureOnlineStore("featureonlinestore",
623
+ name="example_cross_project_featureview",
624
+ project=project.project_id,
625
+ labels={
626
+ "foo": "bar",
627
+ },
628
+ region="us-central1",
629
+ bigtable={
630
+ "autoScaling": {
631
+ "minNodeCount": 1,
632
+ "maxNodeCount": 2,
633
+ "cpuUtilizationTarget": 80,
634
+ },
635
+ },
636
+ opts = pulumi.ResourceOptions(depends_on=[vertexai]))
637
+ sample_dataset = gcp.bigquery.Dataset("sample_dataset",
638
+ dataset_id="example_cross_project_featureview",
639
+ friendly_name="test",
640
+ description="This is a test description",
641
+ location="US")
642
+ viewer = gcp.bigquery.DatasetIamMember("viewer",
643
+ project=test_project.project_id,
644
+ dataset_id=sample_dataset.dataset_id,
645
+ role="roles/bigquery.dataViewer",
646
+ member=project.number.apply(lambda number: f"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com"),
647
+ opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))
648
+ wait30_seconds = time.index.Sleep("wait_30_seconds", create_duration=30s,
649
+ opts = pulumi.ResourceOptions(depends_on=[viewer]))
650
+ sample_table = gcp.bigquery.Table("sample_table",
651
+ deletion_protection=False,
652
+ dataset_id=sample_dataset.dataset_id,
653
+ table_id="example_cross_project_featureview",
654
+ schema=\"\"\"[
655
+ {
656
+ "name": "feature_id",
657
+ "type": "STRING",
658
+ "mode": "NULLABLE"
659
+ },
660
+ {
661
+ "name": "example_cross_project_featureview",
662
+ "type": "STRING",
663
+ "mode": "NULLABLE"
664
+ },
665
+ {
666
+ "name": "feature_timestamp",
667
+ "type": "TIMESTAMP",
668
+ "mode": "NULLABLE"
669
+ }
670
+ ]
671
+ \"\"\")
672
+ sample_feature_group = gcp.vertex.AiFeatureGroup("sample_feature_group",
673
+ name="example_cross_project_featureview",
674
+ description="A sample feature group",
675
+ region="us-central1",
676
+ labels={
677
+ "label-one": "value-one",
678
+ },
679
+ big_query={
680
+ "bigQuerySource": {
681
+ "inputUri": pulumi.Output.all(sample_table.project, sample_table.dataset_id, sample_table.table_id).apply(lambda project, dataset_id, table_id: f"bq://{project}.{dataset_id}.{table_id}"),
682
+ },
683
+ "entityIdColumns": ["feature_id"],
684
+ })
685
+ sample_feature = gcp.vertex.AiFeatureGroupFeature("sample_feature",
686
+ name="example_cross_project_featureview",
687
+ region="us-central1",
688
+ feature_group=sample_feature_group.name,
689
+ description="A sample feature",
690
+ labels={
691
+ "label-one": "value-one",
692
+ })
693
+ cross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview("cross_project_featureview",
694
+ name="example_cross_project_featureview",
695
+ project=project.project_id,
696
+ region="us-central1",
697
+ feature_online_store=featureonlinestore.name,
698
+ sync_config={
699
+ "cron": "0 0 * * *",
700
+ },
701
+ feature_registry_source={
702
+ "featureGroups": [{
703
+ "featureGroupId": sample_feature_group.name,
704
+ "featureIds": [sample_feature.name],
705
+ }],
706
+ "projectNumber": test_project.number,
707
+ },
708
+ opts = pulumi.ResourceOptions(depends_on=[
709
+ vertexai,
710
+ wait30_seconds,
711
+ ]))
712
+ ```
602
713
  ### Vertex Ai Featureonlinestore Featureview With Vector Search
603
714
 
604
715
  ```python
@@ -912,6 +1023,117 @@ class AiFeatureOnlineStoreFeatureview(pulumi.CustomResource):
912
1023
  }],
913
1024
  })
914
1025
  ```
1026
+ ### Vertex Ai Featureonlinestore Featureview Cross Project
1027
+
1028
+ ```python
1029
+ import pulumi
1030
+ import pulumi_gcp as gcp
1031
+ import pulumi_time as time
1032
+
1033
+ test_project = gcp.organizations.get_project()
1034
+ project = gcp.organizations.Project("project",
1035
+ project_id="tf-test_55138",
1036
+ name="tf-test_37559",
1037
+ org_id="123456789",
1038
+ billing_account="000000-0000000-0000000-000000")
1039
+ wait60_seconds = time.index.Sleep("wait_60_seconds", create_duration=60s,
1040
+ opts = pulumi.ResourceOptions(depends_on=[project]))
1041
+ vertexai = gcp.projects.Service("vertexai",
1042
+ service="aiplatform.googleapis.com",
1043
+ project=project.project_id,
1044
+ disable_on_destroy=False,
1045
+ opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))
1046
+ featureonlinestore = gcp.vertex.AiFeatureOnlineStore("featureonlinestore",
1047
+ name="example_cross_project_featureview",
1048
+ project=project.project_id,
1049
+ labels={
1050
+ "foo": "bar",
1051
+ },
1052
+ region="us-central1",
1053
+ bigtable={
1054
+ "autoScaling": {
1055
+ "minNodeCount": 1,
1056
+ "maxNodeCount": 2,
1057
+ "cpuUtilizationTarget": 80,
1058
+ },
1059
+ },
1060
+ opts = pulumi.ResourceOptions(depends_on=[vertexai]))
1061
+ sample_dataset = gcp.bigquery.Dataset("sample_dataset",
1062
+ dataset_id="example_cross_project_featureview",
1063
+ friendly_name="test",
1064
+ description="This is a test description",
1065
+ location="US")
1066
+ viewer = gcp.bigquery.DatasetIamMember("viewer",
1067
+ project=test_project.project_id,
1068
+ dataset_id=sample_dataset.dataset_id,
1069
+ role="roles/bigquery.dataViewer",
1070
+ member=project.number.apply(lambda number: f"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com"),
1071
+ opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))
1072
+ wait30_seconds = time.index.Sleep("wait_30_seconds", create_duration=30s,
1073
+ opts = pulumi.ResourceOptions(depends_on=[viewer]))
1074
+ sample_table = gcp.bigquery.Table("sample_table",
1075
+ deletion_protection=False,
1076
+ dataset_id=sample_dataset.dataset_id,
1077
+ table_id="example_cross_project_featureview",
1078
+ schema=\"\"\"[
1079
+ {
1080
+ "name": "feature_id",
1081
+ "type": "STRING",
1082
+ "mode": "NULLABLE"
1083
+ },
1084
+ {
1085
+ "name": "example_cross_project_featureview",
1086
+ "type": "STRING",
1087
+ "mode": "NULLABLE"
1088
+ },
1089
+ {
1090
+ "name": "feature_timestamp",
1091
+ "type": "TIMESTAMP",
1092
+ "mode": "NULLABLE"
1093
+ }
1094
+ ]
1095
+ \"\"\")
1096
+ sample_feature_group = gcp.vertex.AiFeatureGroup("sample_feature_group",
1097
+ name="example_cross_project_featureview",
1098
+ description="A sample feature group",
1099
+ region="us-central1",
1100
+ labels={
1101
+ "label-one": "value-one",
1102
+ },
1103
+ big_query={
1104
+ "bigQuerySource": {
1105
+ "inputUri": pulumi.Output.all(sample_table.project, sample_table.dataset_id, sample_table.table_id).apply(lambda project, dataset_id, table_id: f"bq://{project}.{dataset_id}.{table_id}"),
1106
+ },
1107
+ "entityIdColumns": ["feature_id"],
1108
+ })
1109
+ sample_feature = gcp.vertex.AiFeatureGroupFeature("sample_feature",
1110
+ name="example_cross_project_featureview",
1111
+ region="us-central1",
1112
+ feature_group=sample_feature_group.name,
1113
+ description="A sample feature",
1114
+ labels={
1115
+ "label-one": "value-one",
1116
+ })
1117
+ cross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview("cross_project_featureview",
1118
+ name="example_cross_project_featureview",
1119
+ project=project.project_id,
1120
+ region="us-central1",
1121
+ feature_online_store=featureonlinestore.name,
1122
+ sync_config={
1123
+ "cron": "0 0 * * *",
1124
+ },
1125
+ feature_registry_source={
1126
+ "featureGroups": [{
1127
+ "featureGroupId": sample_feature_group.name,
1128
+ "featureIds": [sample_feature.name],
1129
+ }],
1130
+ "projectNumber": test_project.number,
1131
+ },
1132
+ opts = pulumi.ResourceOptions(depends_on=[
1133
+ vertexai,
1134
+ wait30_seconds,
1135
+ ]))
1136
+ ```
915
1137
  ### Vertex Ai Featureonlinestore Featureview With Vector Search
916
1138
 
917
1139
  ```python
@@ -1336,6 +1336,8 @@ class AiFeatureOnlineStoreFeatureviewFeatureRegistrySource(dict):
1336
1336
  suggest = None
1337
1337
  if key == "featureGroups":
1338
1338
  suggest = "feature_groups"
1339
+ elif key == "projectNumber":
1340
+ suggest = "project_number"
1339
1341
 
1340
1342
  if suggest:
1341
1343
  pulumi.log.warn(f"Key '{key}' not found in AiFeatureOnlineStoreFeatureviewFeatureRegistrySource. Access the value via the '{suggest}' property getter instead.")
@@ -1349,12 +1351,16 @@ class AiFeatureOnlineStoreFeatureviewFeatureRegistrySource(dict):
1349
1351
  return super().get(key, default)
1350
1352
 
1351
1353
  def __init__(__self__, *,
1352
- feature_groups: Sequence['outputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroup']):
1354
+ feature_groups: Sequence['outputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroup'],
1355
+ project_number: Optional[str] = None):
1353
1356
  """
1354
1357
  :param Sequence['AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs'] feature_groups: List of features that need to be synced to Online Store.
1355
1358
  Structure is documented below.
1359
+ :param str project_number: The project number of the parent project of the feature Groups.
1356
1360
  """
1357
1361
  pulumi.set(__self__, "feature_groups", feature_groups)
1362
+ if project_number is not None:
1363
+ pulumi.set(__self__, "project_number", project_number)
1358
1364
 
1359
1365
  @property
1360
1366
  @pulumi.getter(name="featureGroups")
@@ -1365,6 +1371,14 @@ class AiFeatureOnlineStoreFeatureviewFeatureRegistrySource(dict):
1365
1371
  """
1366
1372
  return pulumi.get(self, "feature_groups")
1367
1373
 
1374
+ @property
1375
+ @pulumi.getter(name="projectNumber")
1376
+ def project_number(self) -> Optional[str]:
1377
+ """
1378
+ The project number of the parent project of the feature Groups.
1379
+ """
1380
+ return pulumi.get(self, "project_number")
1381
+
1368
1382
 
1369
1383
  @pulumi.output_type
1370
1384
  class AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroup(dict):
@@ -809,6 +809,14 @@ if not MYPY:
809
809
  """
810
810
  Network tags to add to the Compute Engine machines backing the Workstations.
811
811
  """
812
+ vm_tags: NotRequired[pulumi.Input[Mapping[str, pulumi.Input[str]]]]
813
+ """
814
+ Resource manager tags to be bound to the VM instances backing the Workstations.
815
+ Tag keys and values have the same definition as
816
+ https://cloud.google.com/resource-manager/docs/tags/tags-overview
817
+ Keys must be in the format `tagKeys/{tag_key_id}`, and
818
+ values are in the format `tagValues/456`.
819
+ """
812
820
  elif False:
813
821
  WorkstationConfigHostGceInstanceArgsDict: TypeAlias = Mapping[str, Any]
814
822
 
@@ -827,7 +835,8 @@ class WorkstationConfigHostGceInstanceArgs:
827
835
  service_account: Optional[pulumi.Input[str]] = None,
828
836
  service_account_scopes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
829
837
  shielded_instance_config: Optional[pulumi.Input['WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs']] = None,
830
- tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
838
+ tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
839
+ vm_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
831
840
  """
832
841
  :param pulumi.Input[Sequence[pulumi.Input['WorkstationConfigHostGceInstanceAcceleratorArgs']]] accelerators: An accelerator card attached to the instance.
833
842
  Structure is documented below.
@@ -847,6 +856,11 @@ class WorkstationConfigHostGceInstanceArgs:
847
856
  :param pulumi.Input['WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs'] shielded_instance_config: A set of Compute Engine Shielded instance options.
848
857
  Structure is documented below.
849
858
  :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: Network tags to add to the Compute Engine machines backing the Workstations.
859
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] vm_tags: Resource manager tags to be bound to the VM instances backing the Workstations.
860
+ Tag keys and values have the same definition as
861
+ https://cloud.google.com/resource-manager/docs/tags/tags-overview
862
+ Keys must be in the format `tagKeys/{tag_key_id}`, and
863
+ values are in the format `tagValues/456`.
850
864
  """
851
865
  if accelerators is not None:
852
866
  pulumi.set(__self__, "accelerators", accelerators)
@@ -874,6 +888,8 @@ class WorkstationConfigHostGceInstanceArgs:
874
888
  pulumi.set(__self__, "shielded_instance_config", shielded_instance_config)
875
889
  if tags is not None:
876
890
  pulumi.set(__self__, "tags", tags)
891
+ if vm_tags is not None:
892
+ pulumi.set(__self__, "vm_tags", vm_tags)
877
893
 
878
894
  @property
879
895
  @pulumi.getter
@@ -1036,6 +1052,22 @@ class WorkstationConfigHostGceInstanceArgs:
1036
1052
  def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
1037
1053
  pulumi.set(self, "tags", value)
1038
1054
 
1055
+ @property
1056
+ @pulumi.getter(name="vmTags")
1057
+ def vm_tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
1058
+ """
1059
+ Resource manager tags to be bound to the VM instances backing the Workstations.
1060
+ Tag keys and values have the same definition as
1061
+ https://cloud.google.com/resource-manager/docs/tags/tags-overview
1062
+ Keys must be in the format `tagKeys/{tag_key_id}`, and
1063
+ values are in the format `tagValues/456`.
1064
+ """
1065
+ return pulumi.get(self, "vm_tags")
1066
+
1067
+ @vm_tags.setter
1068
+ def vm_tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
1069
+ pulumi.set(self, "vm_tags", value)
1070
+
1039
1071
 
1040
1072
  if not MYPY:
1041
1073
  class WorkstationConfigHostGceInstanceAcceleratorArgsDict(TypedDict):