pulumi-gcp 8.27.0a1744872023__py3-none-any.whl → 8.28.0a1745044764__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 (76) hide show
  1. pulumi_gcp/__init__.py +80 -0
  2. pulumi_gcp/bigquery/_inputs.py +87 -30
  3. pulumi_gcp/bigquery/outputs.py +58 -20
  4. pulumi_gcp/bigquery/table.py +28 -14
  5. pulumi_gcp/cloudrun/service.py +46 -0
  6. pulumi_gcp/cloudrunv2/get_service.py +12 -1
  7. pulumi_gcp/cloudrunv2/service.py +85 -0
  8. pulumi_gcp/compute/_inputs.py +428 -1
  9. pulumi_gcp/compute/image.py +183 -0
  10. pulumi_gcp/compute/outputs.py +362 -3
  11. pulumi_gcp/compute/region_backend_service.py +6 -2
  12. pulumi_gcp/compute/snapshot.py +6 -0
  13. pulumi_gcp/databasemigrationservice/_inputs.py +27 -24
  14. pulumi_gcp/databasemigrationservice/connection_profile.py +168 -0
  15. pulumi_gcp/databasemigrationservice/migration_job.py +6 -0
  16. pulumi_gcp/databasemigrationservice/outputs.py +18 -15
  17. pulumi_gcp/developerconnect/__init__.py +1 -0
  18. pulumi_gcp/developerconnect/_inputs.py +77 -0
  19. pulumi_gcp/developerconnect/account_connector.py +866 -0
  20. pulumi_gcp/developerconnect/outputs.py +64 -0
  21. pulumi_gcp/firestore/database.py +82 -0
  22. pulumi_gcp/firestore/index.py +263 -7
  23. pulumi_gcp/folder/service_identity.py +0 -26
  24. pulumi_gcp/managedkafka/_inputs.py +6 -6
  25. pulumi_gcp/managedkafka/connect_cluster.py +84 -40
  26. pulumi_gcp/managedkafka/connector.py +98 -44
  27. pulumi_gcp/managedkafka/outputs.py +4 -4
  28. pulumi_gcp/memorystore/_inputs.py +69 -0
  29. pulumi_gcp/memorystore/get_instance.py +34 -1
  30. pulumi_gcp/memorystore/instance.py +140 -0
  31. pulumi_gcp/memorystore/outputs.py +80 -0
  32. pulumi_gcp/ml/engine_model.py +0 -22
  33. pulumi_gcp/monitoring/_inputs.py +37 -19
  34. pulumi_gcp/monitoring/outputs.py +39 -11
  35. pulumi_gcp/monitoring/uptime_check_config.py +8 -0
  36. pulumi_gcp/netapp/_inputs.py +3 -3
  37. pulumi_gcp/netapp/outputs.py +2 -2
  38. pulumi_gcp/networkconnectivity/spoke.py +14 -14
  39. pulumi_gcp/orgpolicy/policy.py +2 -2
  40. pulumi_gcp/osconfig/v2_policy_orchestrator.py +8 -0
  41. pulumi_gcp/osconfig/v2_policy_orchestrator_for_organization.py +8 -0
  42. pulumi_gcp/pubsub/subscription.py +6 -6
  43. pulumi_gcp/pulumi-plugin.json +1 -1
  44. pulumi_gcp/redis/_inputs.py +69 -0
  45. pulumi_gcp/redis/cluster.py +140 -0
  46. pulumi_gcp/redis/outputs.py +40 -0
  47. pulumi_gcp/storage/_inputs.py +111 -0
  48. pulumi_gcp/storage/control_folder_intelligence_config.py +32 -0
  49. pulumi_gcp/storage/control_organization_intelligence_config.py +32 -0
  50. pulumi_gcp/storage/control_project_intelligence_config.py +32 -0
  51. pulumi_gcp/storage/get_control_folder_intelligence_config.py +12 -1
  52. pulumi_gcp/storage/get_control_organization_intelligence_config.py +12 -1
  53. pulumi_gcp/storage/get_control_project_intelligence_config.py +12 -1
  54. pulumi_gcp/storage/outputs.py +174 -0
  55. pulumi_gcp/vertex/__init__.py +12 -0
  56. pulumi_gcp/vertex/_inputs.py +294 -0
  57. pulumi_gcp/vertex/ai_endpoint.py +4 -4
  58. pulumi_gcp/vertex/ai_feature_group.py +1 -1
  59. pulumi_gcp/vertex/ai_feature_group_iam_binding.py +583 -0
  60. pulumi_gcp/vertex/ai_feature_group_iam_member.py +583 -0
  61. pulumi_gcp/vertex/ai_feature_group_iam_policy.py +422 -0
  62. pulumi_gcp/vertex/ai_feature_online_store_featureview.py +26 -27
  63. pulumi_gcp/vertex/ai_feature_online_store_featureview_iam_binding.py +614 -0
  64. pulumi_gcp/vertex/ai_feature_online_store_featureview_iam_member.py +614 -0
  65. pulumi_gcp/vertex/ai_feature_online_store_featureview_iam_policy.py +453 -0
  66. pulumi_gcp/vertex/ai_feature_online_store_iam_binding.py +583 -0
  67. pulumi_gcp/vertex/ai_feature_online_store_iam_member.py +583 -0
  68. pulumi_gcp/vertex/ai_feature_online_store_iam_policy.py +422 -0
  69. pulumi_gcp/vertex/get_ai_feature_group_iam_policy.py +177 -0
  70. pulumi_gcp/vertex/get_ai_feature_online_store_featureview_iam_policy.py +194 -0
  71. pulumi_gcp/vertex/get_ai_feature_online_store_iam_policy.py +177 -0
  72. pulumi_gcp/vertex/outputs.py +168 -0
  73. {pulumi_gcp-8.27.0a1744872023.dist-info → pulumi_gcp-8.28.0a1745044764.dist-info}/METADATA +1 -1
  74. {pulumi_gcp-8.27.0a1744872023.dist-info → pulumi_gcp-8.28.0a1745044764.dist-info}/RECORD +76 -63
  75. {pulumi_gcp-8.27.0a1744872023.dist-info → pulumi_gcp-8.28.0a1745044764.dist-info}/WHEEL +0 -0
  76. {pulumi_gcp-8.27.0a1744872023.dist-info → pulumi_gcp-8.28.0a1745044764.dist-info}/top_level.txt +0 -0
@@ -26,6 +26,8 @@ class IndexArgs:
26
26
  fields: pulumi.Input[Sequence[pulumi.Input['IndexFieldArgs']]],
27
27
  api_scope: Optional[pulumi.Input[builtins.str]] = None,
28
28
  database: Optional[pulumi.Input[builtins.str]] = None,
29
+ density: Optional[pulumi.Input[builtins.str]] = None,
30
+ multikey: Optional[pulumi.Input[builtins.bool]] = None,
29
31
  project: Optional[pulumi.Input[builtins.str]] = None,
30
32
  query_scope: Optional[pulumi.Input[builtins.str]] = None):
31
33
  """
@@ -38,8 +40,14 @@ class IndexArgs:
38
40
  composite index is not directional, the `__name__` will be ordered
39
41
  `"ASCENDING"` (unless explicitly specified otherwise).
40
42
  Structure is documented below.
41
- :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
43
+ :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
44
+ "MONGODB_COMPATIBLE_API"]
42
45
  :param pulumi.Input[builtins.str] database: The Firestore database id. Defaults to '"(default)"'.
46
+ :param pulumi.Input[builtins.str] density: The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
47
+ :param pulumi.Input[builtins.bool] multikey: Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
48
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
49
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
50
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
43
51
  :param pulumi.Input[builtins.str] query_scope: The scope at which a query is run. Default value: "COLLECTION" Possible values: ["COLLECTION", "COLLECTION_GROUP",
44
52
  "COLLECTION_RECURSIVE"]
45
53
  """
@@ -49,6 +57,10 @@ class IndexArgs:
49
57
  pulumi.set(__self__, "api_scope", api_scope)
50
58
  if database is not None:
51
59
  pulumi.set(__self__, "database", database)
60
+ if density is not None:
61
+ pulumi.set(__self__, "density", density)
62
+ if multikey is not None:
63
+ pulumi.set(__self__, "multikey", multikey)
52
64
  if project is not None:
53
65
  pulumi.set(__self__, "project", project)
54
66
  if query_scope is not None:
@@ -88,7 +100,8 @@ class IndexArgs:
88
100
  @pulumi.getter(name="apiScope")
89
101
  def api_scope(self) -> Optional[pulumi.Input[builtins.str]]:
90
102
  """
91
- The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
103
+ The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
104
+ "MONGODB_COMPATIBLE_API"]
92
105
  """
93
106
  return pulumi.get(self, "api_scope")
94
107
 
@@ -108,6 +121,33 @@ class IndexArgs:
108
121
  def database(self, value: Optional[pulumi.Input[builtins.str]]):
109
122
  pulumi.set(self, "database", value)
110
123
 
124
+ @property
125
+ @pulumi.getter
126
+ def density(self) -> Optional[pulumi.Input[builtins.str]]:
127
+ """
128
+ The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
129
+ """
130
+ return pulumi.get(self, "density")
131
+
132
+ @density.setter
133
+ def density(self, value: Optional[pulumi.Input[builtins.str]]):
134
+ pulumi.set(self, "density", value)
135
+
136
+ @property
137
+ @pulumi.getter
138
+ def multikey(self) -> Optional[pulumi.Input[builtins.bool]]:
139
+ """
140
+ Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
141
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
142
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
143
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
144
+ """
145
+ return pulumi.get(self, "multikey")
146
+
147
+ @multikey.setter
148
+ def multikey(self, value: Optional[pulumi.Input[builtins.bool]]):
149
+ pulumi.set(self, "multikey", value)
150
+
111
151
  @property
112
152
  @pulumi.getter
113
153
  def project(self) -> Optional[pulumi.Input[builtins.str]]:
@@ -137,15 +177,19 @@ class _IndexState:
137
177
  api_scope: Optional[pulumi.Input[builtins.str]] = None,
138
178
  collection: Optional[pulumi.Input[builtins.str]] = None,
139
179
  database: Optional[pulumi.Input[builtins.str]] = None,
180
+ density: Optional[pulumi.Input[builtins.str]] = None,
140
181
  fields: Optional[pulumi.Input[Sequence[pulumi.Input['IndexFieldArgs']]]] = None,
182
+ multikey: Optional[pulumi.Input[builtins.bool]] = None,
141
183
  name: Optional[pulumi.Input[builtins.str]] = None,
142
184
  project: Optional[pulumi.Input[builtins.str]] = None,
143
185
  query_scope: Optional[pulumi.Input[builtins.str]] = None):
144
186
  """
145
187
  Input properties used for looking up and filtering Index resources.
146
- :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
188
+ :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
189
+ "MONGODB_COMPATIBLE_API"]
147
190
  :param pulumi.Input[builtins.str] collection: The collection being indexed.
148
191
  :param pulumi.Input[builtins.str] database: The Firestore database id. Defaults to '"(default)"'.
192
+ :param pulumi.Input[builtins.str] density: The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
149
193
  :param pulumi.Input[Sequence[pulumi.Input['IndexFieldArgs']]] fields: The fields supported by this index. The last non-stored field entry is
150
194
  always for the field path `__name__`. If, on creation, `__name__` was not
151
195
  specified as the last field, it will be added automatically with the same
@@ -153,6 +197,10 @@ class _IndexState:
153
197
  composite index is not directional, the `__name__` will be ordered
154
198
  `"ASCENDING"` (unless explicitly specified otherwise).
155
199
  Structure is documented below.
200
+ :param pulumi.Input[builtins.bool] multikey: Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
201
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
202
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
203
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
156
204
  :param pulumi.Input[builtins.str] name: A server defined name for this index. Format:
157
205
  `projects/{{project}}/databases/{{database}}/collectionGroups/{{collection}}/indexes/{{server_generated_id}}`
158
206
  :param pulumi.Input[builtins.str] query_scope: The scope at which a query is run. Default value: "COLLECTION" Possible values: ["COLLECTION", "COLLECTION_GROUP",
@@ -164,8 +212,12 @@ class _IndexState:
164
212
  pulumi.set(__self__, "collection", collection)
165
213
  if database is not None:
166
214
  pulumi.set(__self__, "database", database)
215
+ if density is not None:
216
+ pulumi.set(__self__, "density", density)
167
217
  if fields is not None:
168
218
  pulumi.set(__self__, "fields", fields)
219
+ if multikey is not None:
220
+ pulumi.set(__self__, "multikey", multikey)
169
221
  if name is not None:
170
222
  pulumi.set(__self__, "name", name)
171
223
  if project is not None:
@@ -177,7 +229,8 @@ class _IndexState:
177
229
  @pulumi.getter(name="apiScope")
178
230
  def api_scope(self) -> Optional[pulumi.Input[builtins.str]]:
179
231
  """
180
- The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
232
+ The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
233
+ "MONGODB_COMPATIBLE_API"]
181
234
  """
182
235
  return pulumi.get(self, "api_scope")
183
236
 
@@ -209,6 +262,18 @@ class _IndexState:
209
262
  def database(self, value: Optional[pulumi.Input[builtins.str]]):
210
263
  pulumi.set(self, "database", value)
211
264
 
265
+ @property
266
+ @pulumi.getter
267
+ def density(self) -> Optional[pulumi.Input[builtins.str]]:
268
+ """
269
+ The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
270
+ """
271
+ return pulumi.get(self, "density")
272
+
273
+ @density.setter
274
+ def density(self, value: Optional[pulumi.Input[builtins.str]]):
275
+ pulumi.set(self, "density", value)
276
+
212
277
  @property
213
278
  @pulumi.getter
214
279
  def fields(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['IndexFieldArgs']]]]:
@@ -227,6 +292,21 @@ class _IndexState:
227
292
  def fields(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['IndexFieldArgs']]]]):
228
293
  pulumi.set(self, "fields", value)
229
294
 
295
+ @property
296
+ @pulumi.getter
297
+ def multikey(self) -> Optional[pulumi.Input[builtins.bool]]:
298
+ """
299
+ Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
300
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
301
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
302
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
303
+ """
304
+ return pulumi.get(self, "multikey")
305
+
306
+ @multikey.setter
307
+ def multikey(self, value: Optional[pulumi.Input[builtins.bool]]):
308
+ pulumi.set(self, "multikey", value)
309
+
230
310
  @property
231
311
  @pulumi.getter
232
312
  def name(self) -> Optional[pulumi.Input[builtins.str]]:
@@ -271,7 +351,9 @@ class Index(pulumi.CustomResource):
271
351
  api_scope: Optional[pulumi.Input[builtins.str]] = None,
272
352
  collection: Optional[pulumi.Input[builtins.str]] = None,
273
353
  database: Optional[pulumi.Input[builtins.str]] = None,
354
+ density: Optional[pulumi.Input[builtins.str]] = None,
274
355
  fields: Optional[pulumi.Input[Sequence[pulumi.Input[Union['IndexFieldArgs', 'IndexFieldArgsDict']]]]] = None,
356
+ multikey: Optional[pulumi.Input[builtins.bool]] = None,
275
357
  project: Optional[pulumi.Input[builtins.str]] = None,
276
358
  query_scope: Optional[pulumi.Input[builtins.str]] = None,
277
359
  __props__=None):
@@ -343,6 +425,7 @@ class Index(pulumi.CustomResource):
343
425
  collection="atestcollection",
344
426
  query_scope="COLLECTION_RECURSIVE",
345
427
  api_scope="DATASTORE_MODE_API",
428
+ density="SPARSE_ALL",
346
429
  fields=[
347
430
  {
348
431
  "field_path": "name",
@@ -411,6 +494,72 @@ class Index(pulumi.CustomResource):
411
494
  "order": "DESCENDING",
412
495
  }])
413
496
  ```
497
+ ### Firestore Index Mongodb Compatible Scope
498
+
499
+ ```python
500
+ import pulumi
501
+ import pulumi_gcp as gcp
502
+
503
+ database = gcp.firestore.Database("database",
504
+ project="my-project-name",
505
+ name="database-id-mongodb-compatible",
506
+ location_id="nam5",
507
+ type="FIRESTORE_NATIVE",
508
+ database_edition="ENTERPRISE",
509
+ delete_protection_state="DELETE_PROTECTION_DISABLED",
510
+ deletion_policy="DELETE")
511
+ my_index = gcp.firestore.Index("my-index",
512
+ project="my-project-name",
513
+ database=database.name,
514
+ collection="atestcollection",
515
+ api_scope="MONGODB_COMPATIBLE_API",
516
+ query_scope="COLLECTION_GROUP",
517
+ multikey=True,
518
+ density="DENSE",
519
+ fields=[
520
+ {
521
+ "field_path": "name",
522
+ "order": "ASCENDING",
523
+ },
524
+ {
525
+ "field_path": "description",
526
+ "order": "DESCENDING",
527
+ },
528
+ ])
529
+ ```
530
+ ### Firestore Index Sparse Any
531
+
532
+ ```python
533
+ import pulumi
534
+ import pulumi_gcp as gcp
535
+
536
+ database = gcp.firestore.Database("database",
537
+ project="my-project-name",
538
+ name="database-id-sparse-any",
539
+ location_id="nam5",
540
+ type="FIRESTORE_NATIVE",
541
+ database_edition="ENTERPRISE",
542
+ delete_protection_state="DELETE_PROTECTION_DISABLED",
543
+ deletion_policy="DELETE")
544
+ my_index = gcp.firestore.Index("my-index",
545
+ project="my-project-name",
546
+ database=database.name,
547
+ collection="atestcollection",
548
+ api_scope="MONGODB_COMPATIBLE_API",
549
+ query_scope="COLLECTION_GROUP",
550
+ multikey=True,
551
+ density="SPARSE_ANY",
552
+ fields=[
553
+ {
554
+ "field_path": "name",
555
+ "order": "ASCENDING",
556
+ },
557
+ {
558
+ "field_path": "description",
559
+ "order": "DESCENDING",
560
+ },
561
+ ])
562
+ ```
414
563
 
415
564
  ## Import
416
565
 
@@ -426,9 +575,11 @@ class Index(pulumi.CustomResource):
426
575
 
427
576
  :param str resource_name: The name of the resource.
428
577
  :param pulumi.ResourceOptions opts: Options for the resource.
429
- :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
578
+ :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
579
+ "MONGODB_COMPATIBLE_API"]
430
580
  :param pulumi.Input[builtins.str] collection: The collection being indexed.
431
581
  :param pulumi.Input[builtins.str] database: The Firestore database id. Defaults to '"(default)"'.
582
+ :param pulumi.Input[builtins.str] density: The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
432
583
  :param pulumi.Input[Sequence[pulumi.Input[Union['IndexFieldArgs', 'IndexFieldArgsDict']]]] fields: The fields supported by this index. The last non-stored field entry is
433
584
  always for the field path `__name__`. If, on creation, `__name__` was not
434
585
  specified as the last field, it will be added automatically with the same
@@ -436,6 +587,10 @@ class Index(pulumi.CustomResource):
436
587
  composite index is not directional, the `__name__` will be ordered
437
588
  `"ASCENDING"` (unless explicitly specified otherwise).
438
589
  Structure is documented below.
590
+ :param pulumi.Input[builtins.bool] multikey: Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
591
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
592
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
593
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
439
594
  :param pulumi.Input[builtins.str] query_scope: The scope at which a query is run. Default value: "COLLECTION" Possible values: ["COLLECTION", "COLLECTION_GROUP",
440
595
  "COLLECTION_RECURSIVE"]
441
596
  """
@@ -513,6 +668,7 @@ class Index(pulumi.CustomResource):
513
668
  collection="atestcollection",
514
669
  query_scope="COLLECTION_RECURSIVE",
515
670
  api_scope="DATASTORE_MODE_API",
671
+ density="SPARSE_ALL",
516
672
  fields=[
517
673
  {
518
674
  "field_path": "name",
@@ -581,6 +737,72 @@ class Index(pulumi.CustomResource):
581
737
  "order": "DESCENDING",
582
738
  }])
583
739
  ```
740
+ ### Firestore Index Mongodb Compatible Scope
741
+
742
+ ```python
743
+ import pulumi
744
+ import pulumi_gcp as gcp
745
+
746
+ database = gcp.firestore.Database("database",
747
+ project="my-project-name",
748
+ name="database-id-mongodb-compatible",
749
+ location_id="nam5",
750
+ type="FIRESTORE_NATIVE",
751
+ database_edition="ENTERPRISE",
752
+ delete_protection_state="DELETE_PROTECTION_DISABLED",
753
+ deletion_policy="DELETE")
754
+ my_index = gcp.firestore.Index("my-index",
755
+ project="my-project-name",
756
+ database=database.name,
757
+ collection="atestcollection",
758
+ api_scope="MONGODB_COMPATIBLE_API",
759
+ query_scope="COLLECTION_GROUP",
760
+ multikey=True,
761
+ density="DENSE",
762
+ fields=[
763
+ {
764
+ "field_path": "name",
765
+ "order": "ASCENDING",
766
+ },
767
+ {
768
+ "field_path": "description",
769
+ "order": "DESCENDING",
770
+ },
771
+ ])
772
+ ```
773
+ ### Firestore Index Sparse Any
774
+
775
+ ```python
776
+ import pulumi
777
+ import pulumi_gcp as gcp
778
+
779
+ database = gcp.firestore.Database("database",
780
+ project="my-project-name",
781
+ name="database-id-sparse-any",
782
+ location_id="nam5",
783
+ type="FIRESTORE_NATIVE",
784
+ database_edition="ENTERPRISE",
785
+ delete_protection_state="DELETE_PROTECTION_DISABLED",
786
+ deletion_policy="DELETE")
787
+ my_index = gcp.firestore.Index("my-index",
788
+ project="my-project-name",
789
+ database=database.name,
790
+ collection="atestcollection",
791
+ api_scope="MONGODB_COMPATIBLE_API",
792
+ query_scope="COLLECTION_GROUP",
793
+ multikey=True,
794
+ density="SPARSE_ANY",
795
+ fields=[
796
+ {
797
+ "field_path": "name",
798
+ "order": "ASCENDING",
799
+ },
800
+ {
801
+ "field_path": "description",
802
+ "order": "DESCENDING",
803
+ },
804
+ ])
805
+ ```
584
806
 
585
807
  ## Import
586
808
 
@@ -612,7 +834,9 @@ class Index(pulumi.CustomResource):
612
834
  api_scope: Optional[pulumi.Input[builtins.str]] = None,
613
835
  collection: Optional[pulumi.Input[builtins.str]] = None,
614
836
  database: Optional[pulumi.Input[builtins.str]] = None,
837
+ density: Optional[pulumi.Input[builtins.str]] = None,
615
838
  fields: Optional[pulumi.Input[Sequence[pulumi.Input[Union['IndexFieldArgs', 'IndexFieldArgsDict']]]]] = None,
839
+ multikey: Optional[pulumi.Input[builtins.bool]] = None,
616
840
  project: Optional[pulumi.Input[builtins.str]] = None,
617
841
  query_scope: Optional[pulumi.Input[builtins.str]] = None,
618
842
  __props__=None):
@@ -629,9 +853,11 @@ class Index(pulumi.CustomResource):
629
853
  raise TypeError("Missing required property 'collection'")
630
854
  __props__.__dict__["collection"] = collection
631
855
  __props__.__dict__["database"] = database
856
+ __props__.__dict__["density"] = density
632
857
  if fields is None and not opts.urn:
633
858
  raise TypeError("Missing required property 'fields'")
634
859
  __props__.__dict__["fields"] = fields
860
+ __props__.__dict__["multikey"] = multikey
635
861
  __props__.__dict__["project"] = project
636
862
  __props__.__dict__["query_scope"] = query_scope
637
863
  __props__.__dict__["name"] = None
@@ -648,7 +874,9 @@ class Index(pulumi.CustomResource):
648
874
  api_scope: Optional[pulumi.Input[builtins.str]] = None,
649
875
  collection: Optional[pulumi.Input[builtins.str]] = None,
650
876
  database: Optional[pulumi.Input[builtins.str]] = None,
877
+ density: Optional[pulumi.Input[builtins.str]] = None,
651
878
  fields: Optional[pulumi.Input[Sequence[pulumi.Input[Union['IndexFieldArgs', 'IndexFieldArgsDict']]]]] = None,
879
+ multikey: Optional[pulumi.Input[builtins.bool]] = None,
652
880
  name: Optional[pulumi.Input[builtins.str]] = None,
653
881
  project: Optional[pulumi.Input[builtins.str]] = None,
654
882
  query_scope: Optional[pulumi.Input[builtins.str]] = None) -> 'Index':
@@ -659,9 +887,11 @@ class Index(pulumi.CustomResource):
659
887
  :param str resource_name: The unique name of the resulting resource.
660
888
  :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
661
889
  :param pulumi.ResourceOptions opts: Options for the resource.
662
- :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
890
+ :param pulumi.Input[builtins.str] api_scope: The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
891
+ "MONGODB_COMPATIBLE_API"]
663
892
  :param pulumi.Input[builtins.str] collection: The collection being indexed.
664
893
  :param pulumi.Input[builtins.str] database: The Firestore database id. Defaults to '"(default)"'.
894
+ :param pulumi.Input[builtins.str] density: The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
665
895
  :param pulumi.Input[Sequence[pulumi.Input[Union['IndexFieldArgs', 'IndexFieldArgsDict']]]] fields: The fields supported by this index. The last non-stored field entry is
666
896
  always for the field path `__name__`. If, on creation, `__name__` was not
667
897
  specified as the last field, it will be added automatically with the same
@@ -669,6 +899,10 @@ class Index(pulumi.CustomResource):
669
899
  composite index is not directional, the `__name__` will be ordered
670
900
  `"ASCENDING"` (unless explicitly specified otherwise).
671
901
  Structure is documented below.
902
+ :param pulumi.Input[builtins.bool] multikey: Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
903
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
904
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
905
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
672
906
  :param pulumi.Input[builtins.str] name: A server defined name for this index. Format:
673
907
  `projects/{{project}}/databases/{{database}}/collectionGroups/{{collection}}/indexes/{{server_generated_id}}`
674
908
  :param pulumi.Input[builtins.str] query_scope: The scope at which a query is run. Default value: "COLLECTION" Possible values: ["COLLECTION", "COLLECTION_GROUP",
@@ -681,7 +915,9 @@ class Index(pulumi.CustomResource):
681
915
  __props__.__dict__["api_scope"] = api_scope
682
916
  __props__.__dict__["collection"] = collection
683
917
  __props__.__dict__["database"] = database
918
+ __props__.__dict__["density"] = density
684
919
  __props__.__dict__["fields"] = fields
920
+ __props__.__dict__["multikey"] = multikey
685
921
  __props__.__dict__["name"] = name
686
922
  __props__.__dict__["project"] = project
687
923
  __props__.__dict__["query_scope"] = query_scope
@@ -691,7 +927,8 @@ class Index(pulumi.CustomResource):
691
927
  @pulumi.getter(name="apiScope")
692
928
  def api_scope(self) -> pulumi.Output[Optional[builtins.str]]:
693
929
  """
694
- The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API"]
930
+ The API scope at which a query is run. Default value: "ANY_API" Possible values: ["ANY_API", "DATASTORE_MODE_API",
931
+ "MONGODB_COMPATIBLE_API"]
695
932
  """
696
933
  return pulumi.get(self, "api_scope")
697
934
 
@@ -711,6 +948,14 @@ class Index(pulumi.CustomResource):
711
948
  """
712
949
  return pulumi.get(self, "database")
713
950
 
951
+ @property
952
+ @pulumi.getter
953
+ def density(self) -> pulumi.Output[builtins.str]:
954
+ """
955
+ The density configuration for this index. Possible values: ["SPARSE_ALL", "SPARSE_ANY", "DENSE"]
956
+ """
957
+ return pulumi.get(self, "density")
958
+
714
959
  @property
715
960
  @pulumi.getter
716
961
  def fields(self) -> pulumi.Output[Sequence['outputs.IndexField']]:
@@ -725,6 +970,17 @@ class Index(pulumi.CustomResource):
725
970
  """
726
971
  return pulumi.get(self, "fields")
727
972
 
973
+ @property
974
+ @pulumi.getter
975
+ def multikey(self) -> pulumi.Output[Optional[builtins.bool]]:
976
+ """
977
+ Optional. Whether the index is multikey. By default, the index is not multikey. For non-multikey indexes, none of the
978
+ paths in the index definition reach or traverse an array, except via an explicit array index. For multikey indexes, at
979
+ most one of the paths in the index definition reach or traverse an array, except via an explicit array index. Violations
980
+ will result in errors. Note this field only applies to indexes with MONGODB_COMPATIBLE_API ApiScope.
981
+ """
982
+ return pulumi.get(self, "multikey")
983
+
728
984
  @property
729
985
  @pulumi.getter
730
986
  def name(self) -> pulumi.Output[builtins.str]:
@@ -144,19 +144,6 @@ class ServiceIdentity(pulumi.CustomResource):
144
144
  service: Optional[pulumi.Input[builtins.str]] = None,
145
145
  __props__=None):
146
146
  """
147
- Generate folder service identity for a service.
148
-
149
- > **Note:** Once created, this resource cannot be updated or destroyed. These
150
- actions are a no-op.
151
-
152
- > **Note:** This resource can be used to retrieve the emails of the [Google-managed folder service accounts](https://cloud.google.com/iam/docs/service-agents)
153
- of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com --folder FOLDER` to
154
- verify if an API supports this.
155
-
156
- To get more information about Service Identity, see:
157
-
158
- * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity)
159
-
160
147
  ## Example Usage
161
148
 
162
149
  ### Folder Service Identity Basic
@@ -195,19 +182,6 @@ class ServiceIdentity(pulumi.CustomResource):
195
182
  args: ServiceIdentityArgs,
196
183
  opts: Optional[pulumi.ResourceOptions] = None):
197
184
  """
198
- Generate folder service identity for a service.
199
-
200
- > **Note:** Once created, this resource cannot be updated or destroyed. These
201
- actions are a no-op.
202
-
203
- > **Note:** This resource can be used to retrieve the emails of the [Google-managed folder service accounts](https://cloud.google.com/iam/docs/service-agents)
204
- of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com --folder FOLDER` to
205
- verify if an API supports this.
206
-
207
- To get more information about Service Identity, see:
208
-
209
- * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity)
210
-
211
185
  ## Example Usage
212
186
 
213
187
  ### Folder Service Identity Basic
@@ -154,7 +154,7 @@ if not MYPY:
154
154
  class ClusterGcpConfigAccessConfigArgsDict(TypedDict):
155
155
  network_configs: pulumi.Input[Sequence[pulumi.Input['ClusterGcpConfigAccessConfigNetworkConfigArgsDict']]]
156
156
  """
157
- Virtual Private Cloud (VPC) subnets where IP addresses for the Kafka cluster are allocated. To make the cluster available in a VPC, you must specify at least one subnet per network. You must specify between 1 and 10 subnets. Additional subnets may be specified with additional `network_configs` blocks.
157
+ Virtual Private Cloud (VPC) subnets where IP addresses for the Kafka cluster are allocated. To make the cluster available in a VPC, you must specify at least one `network_configs` block. Max of 10 subnets per cluster. Additional subnets may be specified with additional `network_configs` blocks.
158
158
  Structure is documented below.
159
159
  """
160
160
  elif False:
@@ -165,7 +165,7 @@ class ClusterGcpConfigAccessConfigArgs:
165
165
  def __init__(__self__, *,
166
166
  network_configs: pulumi.Input[Sequence[pulumi.Input['ClusterGcpConfigAccessConfigNetworkConfigArgs']]]):
167
167
  """
168
- :param pulumi.Input[Sequence[pulumi.Input['ClusterGcpConfigAccessConfigNetworkConfigArgs']]] network_configs: Virtual Private Cloud (VPC) subnets where IP addresses for the Kafka cluster are allocated. To make the cluster available in a VPC, you must specify at least one subnet per network. You must specify between 1 and 10 subnets. Additional subnets may be specified with additional `network_configs` blocks.
168
+ :param pulumi.Input[Sequence[pulumi.Input['ClusterGcpConfigAccessConfigNetworkConfigArgs']]] network_configs: Virtual Private Cloud (VPC) subnets where IP addresses for the Kafka cluster are allocated. To make the cluster available in a VPC, you must specify at least one `network_configs` block. Max of 10 subnets per cluster. Additional subnets may be specified with additional `network_configs` blocks.
169
169
  Structure is documented below.
170
170
  """
171
171
  pulumi.set(__self__, "network_configs", network_configs)
@@ -174,7 +174,7 @@ class ClusterGcpConfigAccessConfigArgs:
174
174
  @pulumi.getter(name="networkConfigs")
175
175
  def network_configs(self) -> pulumi.Input[Sequence[pulumi.Input['ClusterGcpConfigAccessConfigNetworkConfigArgs']]]:
176
176
  """
177
- Virtual Private Cloud (VPC) subnets where IP addresses for the Kafka cluster are allocated. To make the cluster available in a VPC, you must specify at least one subnet per network. You must specify between 1 and 10 subnets. Additional subnets may be specified with additional `network_configs` blocks.
177
+ Virtual Private Cloud (VPC) subnets where IP addresses for the Kafka cluster are allocated. To make the cluster available in a VPC, you must specify at least one `network_configs` block. Max of 10 subnets per cluster. Additional subnets may be specified with additional `network_configs` blocks.
178
178
  Structure is documented below.
179
179
  """
180
180
  return pulumi.get(self, "network_configs")
@@ -188,7 +188,7 @@ if not MYPY:
188
188
  class ClusterGcpConfigAccessConfigNetworkConfigArgsDict(TypedDict):
189
189
  subnet: pulumi.Input[builtins.str]
190
190
  """
191
- Name of the VPC subnet from which the cluster is accessible. Both broker and bootstrap server IP addresses and DNS entries are automatically created in the subnet. The subnet must be located in the same region as the cluster. The project may differ. The name of the subnet must be in the format `projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET`.
191
+ Name of the VPC subnet from which the cluster is accessible. Both broker and bootstrap server IP addresses and DNS entries are automatically created in the subnet. There can only be one subnet per network, and the subnet must be located in the same region as the cluster. The project may differ. The name of the subnet must be in the format `projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET`.
192
192
  """
193
193
  elif False:
194
194
  ClusterGcpConfigAccessConfigNetworkConfigArgsDict: TypeAlias = Mapping[str, Any]
@@ -198,7 +198,7 @@ class ClusterGcpConfigAccessConfigNetworkConfigArgs:
198
198
  def __init__(__self__, *,
199
199
  subnet: pulumi.Input[builtins.str]):
200
200
  """
201
- :param pulumi.Input[builtins.str] subnet: Name of the VPC subnet from which the cluster is accessible. Both broker and bootstrap server IP addresses and DNS entries are automatically created in the subnet. The subnet must be located in the same region as the cluster. The project may differ. The name of the subnet must be in the format `projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET`.
201
+ :param pulumi.Input[builtins.str] subnet: Name of the VPC subnet from which the cluster is accessible. Both broker and bootstrap server IP addresses and DNS entries are automatically created in the subnet. There can only be one subnet per network, and the subnet must be located in the same region as the cluster. The project may differ. The name of the subnet must be in the format `projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET`.
202
202
  """
203
203
  pulumi.set(__self__, "subnet", subnet)
204
204
 
@@ -206,7 +206,7 @@ class ClusterGcpConfigAccessConfigNetworkConfigArgs:
206
206
  @pulumi.getter
207
207
  def subnet(self) -> pulumi.Input[builtins.str]:
208
208
  """
209
- Name of the VPC subnet from which the cluster is accessible. Both broker and bootstrap server IP addresses and DNS entries are automatically created in the subnet. The subnet must be located in the same region as the cluster. The project may differ. The name of the subnet must be in the format `projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET`.
209
+ Name of the VPC subnet from which the cluster is accessible. Both broker and bootstrap server IP addresses and DNS entries are automatically created in the subnet. There can only be one subnet per network, and the subnet must be located in the same region as the cluster. The project may differ. The name of the subnet must be in the format `projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET`.
210
210
  """
211
211
  return pulumi.get(self, "subnet")
212
212