pulumi-alicloud 3.62.0a1725945881__py3-none-any.whl → 3.62.1__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.

Potentially problematic release.


This version of pulumi-alicloud might be problematic. Click here for more details.

Files changed (80) hide show
  1. pulumi_alicloud/__init__.py +80 -0
  2. pulumi_alicloud/actiontrail/trail.py +2 -2
  3. pulumi_alicloud/adb/cluster.py +34 -0
  4. pulumi_alicloud/adb/db_cluster.py +47 -0
  5. pulumi_alicloud/amqp/binding.py +30 -36
  6. pulumi_alicloud/amqp/static_account.py +12 -12
  7. pulumi_alicloud/cen/_inputs.py +180 -14
  8. pulumi_alicloud/cen/outputs.py +173 -12
  9. pulumi_alicloud/cen/traffic_marking_policy.py +116 -53
  10. pulumi_alicloud/cen/transit_router_peer_attachment.py +38 -20
  11. pulumi_alicloud/cen/transit_router_vpc_attachment.py +338 -119
  12. pulumi_alicloud/cen/transit_router_vpn_attachment.py +2 -2
  13. pulumi_alicloud/cr/chart_namespace.py +14 -6
  14. pulumi_alicloud/cr/endpoint_acl_policy.py +10 -2
  15. pulumi_alicloud/cr/namespace.py +10 -2
  16. pulumi_alicloud/cs/registry_enterprise_repo.py +4 -4
  17. pulumi_alicloud/cs/registry_enterprise_sync_rule.py +10 -10
  18. pulumi_alicloud/ddos/_inputs.py +24 -0
  19. pulumi_alicloud/ddos/bgp_ip.py +1 -1
  20. pulumi_alicloud/ddos/outputs.py +37 -0
  21. pulumi_alicloud/ddos/port.py +110 -40
  22. pulumi_alicloud/ecs/_inputs.py +28 -0
  23. pulumi_alicloud/ecs/outputs.py +20 -0
  24. pulumi_alicloud/emrv2/_inputs.py +20 -20
  25. pulumi_alicloud/emrv2/get_clusters.py +25 -4
  26. pulumi_alicloud/emrv2/outputs.py +24 -24
  27. pulumi_alicloud/ens/_inputs.py +137 -2
  28. pulumi_alicloud/ens/instance.py +428 -184
  29. pulumi_alicloud/ens/load_balancer.py +74 -25
  30. pulumi_alicloud/ens/outputs.py +141 -2
  31. pulumi_alicloud/expressconnect/physical_connection.py +321 -185
  32. pulumi_alicloud/fc/__init__.py +3 -0
  33. pulumi_alicloud/fc/_inputs.py +320 -8
  34. pulumi_alicloud/fc/outputs.py +321 -8
  35. pulumi_alicloud/fc/trigger.py +22 -24
  36. pulumi_alicloud/fc/v3_layer_version.py +511 -0
  37. pulumi_alicloud/fc/v3_provision_config.py +676 -0
  38. pulumi_alicloud/fc/v3_vpc_binding.py +283 -0
  39. pulumi_alicloud/ga/endpoint_group.py +68 -14
  40. pulumi_alicloud/ga/get_endpoint_group_ip_address_cidr_blocks.py +18 -3
  41. pulumi_alicloud/gpdb/__init__.py +2 -0
  42. pulumi_alicloud/gpdb/account.py +172 -83
  43. pulumi_alicloud/gpdb/db_resource_group.py +54 -9
  44. pulumi_alicloud/gpdb/hadoop_data_source.py +1135 -0
  45. pulumi_alicloud/gpdb/jdbc_data_source.py +643 -0
  46. pulumi_alicloud/hbr/_inputs.py +14 -14
  47. pulumi_alicloud/hbr/outputs.py +14 -14
  48. pulumi_alicloud/hbr/policy.py +18 -18
  49. pulumi_alicloud/hbr/policy_binding.py +203 -62
  50. pulumi_alicloud/mongodb/instance.py +94 -0
  51. pulumi_alicloud/nlb/_inputs.py +120 -64
  52. pulumi_alicloud/nlb/get_listeners.py +32 -2
  53. pulumi_alicloud/nlb/get_server_group_server_attachments.py +8 -2
  54. pulumi_alicloud/nlb/listener.py +315 -245
  55. pulumi_alicloud/nlb/listener_additional_certificate_attachment.py +25 -25
  56. pulumi_alicloud/nlb/load_balancer.py +181 -212
  57. pulumi_alicloud/nlb/load_balancer_security_group_attachment.py +29 -39
  58. pulumi_alicloud/nlb/loadbalancer_common_bandwidth_package_attachment.py +22 -18
  59. pulumi_alicloud/nlb/outputs.py +122 -66
  60. pulumi_alicloud/nlb/security_policy.py +53 -25
  61. pulumi_alicloud/nlb/server_group.py +196 -133
  62. pulumi_alicloud/ocean/base_instance.py +498 -163
  63. pulumi_alicloud/pulumi-plugin.json +1 -1
  64. pulumi_alicloud/quotas/__init__.py +1 -0
  65. pulumi_alicloud/quotas/template_service.py +165 -0
  66. pulumi_alicloud/rds/rds_db_proxy.py +61 -0
  67. pulumi_alicloud/servicecatalog/__init__.py +4 -0
  68. pulumi_alicloud/servicecatalog/portfolio.py +31 -31
  69. pulumi_alicloud/servicecatalog/principal_portfolio_association.py +354 -0
  70. pulumi_alicloud/servicecatalog/product.py +383 -0
  71. pulumi_alicloud/servicecatalog/product_portfolio_association.py +222 -0
  72. pulumi_alicloud/servicecatalog/product_version.py +539 -0
  73. pulumi_alicloud/servicemesh/extension_provider.py +2 -2
  74. pulumi_alicloud/vpc/common_bandwith_package_attachment.py +2 -2
  75. pulumi_alicloud/vpc/get_route_tables.py +28 -5
  76. pulumi_alicloud/vpc/outputs.py +2 -2
  77. {pulumi_alicloud-3.62.0a1725945881.dist-info → pulumi_alicloud-3.62.1.dist-info}/METADATA +1 -1
  78. {pulumi_alicloud-3.62.0a1725945881.dist-info → pulumi_alicloud-3.62.1.dist-info}/RECORD +80 -70
  79. {pulumi_alicloud-3.62.0a1725945881.dist-info → pulumi_alicloud-3.62.1.dist-info}/WHEEL +1 -1
  80. {pulumi_alicloud-3.62.0a1725945881.dist-info → pulumi_alicloud-3.62.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,383 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import copy
6
+ import warnings
7
+ import pulumi
8
+ import pulumi.runtime
9
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
10
+ from .. import _utilities
11
+
12
+ __all__ = ['ProductArgs', 'Product']
13
+
14
+ @pulumi.input_type
15
+ class ProductArgs:
16
+ def __init__(__self__, *,
17
+ product_name: pulumi.Input[str],
18
+ product_type: pulumi.Input[str],
19
+ provider_name: pulumi.Input[str],
20
+ description: Optional[pulumi.Input[str]] = None):
21
+ """
22
+ The set of arguments for constructing a Product resource.
23
+ :param pulumi.Input[str] product_name: The name of the product
24
+ :param pulumi.Input[str] product_type: The type of the product
25
+ :param pulumi.Input[str] provider_name: The provider name of the product
26
+ :param pulumi.Input[str] description: The description of the product
27
+ """
28
+ pulumi.set(__self__, "product_name", product_name)
29
+ pulumi.set(__self__, "product_type", product_type)
30
+ pulumi.set(__self__, "provider_name", provider_name)
31
+ if description is not None:
32
+ pulumi.set(__self__, "description", description)
33
+
34
+ @property
35
+ @pulumi.getter(name="productName")
36
+ def product_name(self) -> pulumi.Input[str]:
37
+ """
38
+ The name of the product
39
+ """
40
+ return pulumi.get(self, "product_name")
41
+
42
+ @product_name.setter
43
+ def product_name(self, value: pulumi.Input[str]):
44
+ pulumi.set(self, "product_name", value)
45
+
46
+ @property
47
+ @pulumi.getter(name="productType")
48
+ def product_type(self) -> pulumi.Input[str]:
49
+ """
50
+ The type of the product
51
+ """
52
+ return pulumi.get(self, "product_type")
53
+
54
+ @product_type.setter
55
+ def product_type(self, value: pulumi.Input[str]):
56
+ pulumi.set(self, "product_type", value)
57
+
58
+ @property
59
+ @pulumi.getter(name="providerName")
60
+ def provider_name(self) -> pulumi.Input[str]:
61
+ """
62
+ The provider name of the product
63
+ """
64
+ return pulumi.get(self, "provider_name")
65
+
66
+ @provider_name.setter
67
+ def provider_name(self, value: pulumi.Input[str]):
68
+ pulumi.set(self, "provider_name", value)
69
+
70
+ @property
71
+ @pulumi.getter
72
+ def description(self) -> Optional[pulumi.Input[str]]:
73
+ """
74
+ The description of the product
75
+ """
76
+ return pulumi.get(self, "description")
77
+
78
+ @description.setter
79
+ def description(self, value: Optional[pulumi.Input[str]]):
80
+ pulumi.set(self, "description", value)
81
+
82
+
83
+ @pulumi.input_type
84
+ class _ProductState:
85
+ def __init__(__self__, *,
86
+ create_time: Optional[pulumi.Input[str]] = None,
87
+ description: Optional[pulumi.Input[str]] = None,
88
+ product_name: Optional[pulumi.Input[str]] = None,
89
+ product_type: Optional[pulumi.Input[str]] = None,
90
+ provider_name: Optional[pulumi.Input[str]] = None):
91
+ """
92
+ Input properties used for looking up and filtering Product resources.
93
+ :param pulumi.Input[str] create_time: The creation time of the product
94
+ :param pulumi.Input[str] description: The description of the product
95
+ :param pulumi.Input[str] product_name: The name of the product
96
+ :param pulumi.Input[str] product_type: The type of the product
97
+ :param pulumi.Input[str] provider_name: The provider name of the product
98
+ """
99
+ if create_time is not None:
100
+ pulumi.set(__self__, "create_time", create_time)
101
+ if description is not None:
102
+ pulumi.set(__self__, "description", description)
103
+ if product_name is not None:
104
+ pulumi.set(__self__, "product_name", product_name)
105
+ if product_type is not None:
106
+ pulumi.set(__self__, "product_type", product_type)
107
+ if provider_name is not None:
108
+ pulumi.set(__self__, "provider_name", provider_name)
109
+
110
+ @property
111
+ @pulumi.getter(name="createTime")
112
+ def create_time(self) -> Optional[pulumi.Input[str]]:
113
+ """
114
+ The creation time of the product
115
+ """
116
+ return pulumi.get(self, "create_time")
117
+
118
+ @create_time.setter
119
+ def create_time(self, value: Optional[pulumi.Input[str]]):
120
+ pulumi.set(self, "create_time", value)
121
+
122
+ @property
123
+ @pulumi.getter
124
+ def description(self) -> Optional[pulumi.Input[str]]:
125
+ """
126
+ The description of the product
127
+ """
128
+ return pulumi.get(self, "description")
129
+
130
+ @description.setter
131
+ def description(self, value: Optional[pulumi.Input[str]]):
132
+ pulumi.set(self, "description", value)
133
+
134
+ @property
135
+ @pulumi.getter(name="productName")
136
+ def product_name(self) -> Optional[pulumi.Input[str]]:
137
+ """
138
+ The name of the product
139
+ """
140
+ return pulumi.get(self, "product_name")
141
+
142
+ @product_name.setter
143
+ def product_name(self, value: Optional[pulumi.Input[str]]):
144
+ pulumi.set(self, "product_name", value)
145
+
146
+ @property
147
+ @pulumi.getter(name="productType")
148
+ def product_type(self) -> Optional[pulumi.Input[str]]:
149
+ """
150
+ The type of the product
151
+ """
152
+ return pulumi.get(self, "product_type")
153
+
154
+ @product_type.setter
155
+ def product_type(self, value: Optional[pulumi.Input[str]]):
156
+ pulumi.set(self, "product_type", value)
157
+
158
+ @property
159
+ @pulumi.getter(name="providerName")
160
+ def provider_name(self) -> Optional[pulumi.Input[str]]:
161
+ """
162
+ The provider name of the product
163
+ """
164
+ return pulumi.get(self, "provider_name")
165
+
166
+ @provider_name.setter
167
+ def provider_name(self, value: Optional[pulumi.Input[str]]):
168
+ pulumi.set(self, "provider_name", value)
169
+
170
+
171
+ class Product(pulumi.CustomResource):
172
+ @overload
173
+ def __init__(__self__,
174
+ resource_name: str,
175
+ opts: Optional[pulumi.ResourceOptions] = None,
176
+ description: Optional[pulumi.Input[str]] = None,
177
+ product_name: Optional[pulumi.Input[str]] = None,
178
+ product_type: Optional[pulumi.Input[str]] = None,
179
+ provider_name: Optional[pulumi.Input[str]] = None,
180
+ __props__=None):
181
+ """
182
+ Provides a Service Catalog Product resource.
183
+
184
+ Service catalog product, IaC template encapsulation concept.
185
+
186
+ For information about Service Catalog Product and how to use it, see [What is Product](https://www.alibabacloud.com/help/en/service-catalog/developer-reference/api-servicecatalog-2021-09-01-createproduct).
187
+
188
+ > **NOTE:** Available since v1.230.0.
189
+
190
+ ## Example Usage
191
+
192
+ Basic Usage
193
+
194
+ ```python
195
+ import pulumi
196
+ import pulumi_alicloud as alicloud
197
+
198
+ config = pulumi.Config()
199
+ name = config.get("name")
200
+ if name is None:
201
+ name = "terraform-example"
202
+ default = alicloud.servicecatalog.Product("default",
203
+ provider_name=name,
204
+ description="desc",
205
+ product_name=name,
206
+ product_type="Ros")
207
+ ```
208
+
209
+ ## Import
210
+
211
+ Service Catalog Product can be imported using the id, e.g.
212
+
213
+ ```sh
214
+ $ pulumi import alicloud:servicecatalog/product:Product example <id>
215
+ ```
216
+
217
+ :param str resource_name: The name of the resource.
218
+ :param pulumi.ResourceOptions opts: Options for the resource.
219
+ :param pulumi.Input[str] description: The description of the product
220
+ :param pulumi.Input[str] product_name: The name of the product
221
+ :param pulumi.Input[str] product_type: The type of the product
222
+ :param pulumi.Input[str] provider_name: The provider name of the product
223
+ """
224
+ ...
225
+ @overload
226
+ def __init__(__self__,
227
+ resource_name: str,
228
+ args: ProductArgs,
229
+ opts: Optional[pulumi.ResourceOptions] = None):
230
+ """
231
+ Provides a Service Catalog Product resource.
232
+
233
+ Service catalog product, IaC template encapsulation concept.
234
+
235
+ For information about Service Catalog Product and how to use it, see [What is Product](https://www.alibabacloud.com/help/en/service-catalog/developer-reference/api-servicecatalog-2021-09-01-createproduct).
236
+
237
+ > **NOTE:** Available since v1.230.0.
238
+
239
+ ## Example Usage
240
+
241
+ Basic Usage
242
+
243
+ ```python
244
+ import pulumi
245
+ import pulumi_alicloud as alicloud
246
+
247
+ config = pulumi.Config()
248
+ name = config.get("name")
249
+ if name is None:
250
+ name = "terraform-example"
251
+ default = alicloud.servicecatalog.Product("default",
252
+ provider_name=name,
253
+ description="desc",
254
+ product_name=name,
255
+ product_type="Ros")
256
+ ```
257
+
258
+ ## Import
259
+
260
+ Service Catalog Product can be imported using the id, e.g.
261
+
262
+ ```sh
263
+ $ pulumi import alicloud:servicecatalog/product:Product example <id>
264
+ ```
265
+
266
+ :param str resource_name: The name of the resource.
267
+ :param ProductArgs args: The arguments to use to populate this resource's properties.
268
+ :param pulumi.ResourceOptions opts: Options for the resource.
269
+ """
270
+ ...
271
+ def __init__(__self__, resource_name: str, *args, **kwargs):
272
+ resource_args, opts = _utilities.get_resource_args_opts(ProductArgs, pulumi.ResourceOptions, *args, **kwargs)
273
+ if resource_args is not None:
274
+ __self__._internal_init(resource_name, opts, **resource_args.__dict__)
275
+ else:
276
+ __self__._internal_init(resource_name, *args, **kwargs)
277
+
278
+ def _internal_init(__self__,
279
+ resource_name: str,
280
+ opts: Optional[pulumi.ResourceOptions] = None,
281
+ description: Optional[pulumi.Input[str]] = None,
282
+ product_name: Optional[pulumi.Input[str]] = None,
283
+ product_type: Optional[pulumi.Input[str]] = None,
284
+ provider_name: Optional[pulumi.Input[str]] = None,
285
+ __props__=None):
286
+ opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
287
+ if not isinstance(opts, pulumi.ResourceOptions):
288
+ raise TypeError('Expected resource options to be a ResourceOptions instance')
289
+ if opts.id is None:
290
+ if __props__ is not None:
291
+ raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
292
+ __props__ = ProductArgs.__new__(ProductArgs)
293
+
294
+ __props__.__dict__["description"] = description
295
+ if product_name is None and not opts.urn:
296
+ raise TypeError("Missing required property 'product_name'")
297
+ __props__.__dict__["product_name"] = product_name
298
+ if product_type is None and not opts.urn:
299
+ raise TypeError("Missing required property 'product_type'")
300
+ __props__.__dict__["product_type"] = product_type
301
+ if provider_name is None and not opts.urn:
302
+ raise TypeError("Missing required property 'provider_name'")
303
+ __props__.__dict__["provider_name"] = provider_name
304
+ __props__.__dict__["create_time"] = None
305
+ super(Product, __self__).__init__(
306
+ 'alicloud:servicecatalog/product:Product',
307
+ resource_name,
308
+ __props__,
309
+ opts)
310
+
311
+ @staticmethod
312
+ def get(resource_name: str,
313
+ id: pulumi.Input[str],
314
+ opts: Optional[pulumi.ResourceOptions] = None,
315
+ create_time: Optional[pulumi.Input[str]] = None,
316
+ description: Optional[pulumi.Input[str]] = None,
317
+ product_name: Optional[pulumi.Input[str]] = None,
318
+ product_type: Optional[pulumi.Input[str]] = None,
319
+ provider_name: Optional[pulumi.Input[str]] = None) -> 'Product':
320
+ """
321
+ Get an existing Product resource's state with the given name, id, and optional extra
322
+ properties used to qualify the lookup.
323
+
324
+ :param str resource_name: The unique name of the resulting resource.
325
+ :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
326
+ :param pulumi.ResourceOptions opts: Options for the resource.
327
+ :param pulumi.Input[str] create_time: The creation time of the product
328
+ :param pulumi.Input[str] description: The description of the product
329
+ :param pulumi.Input[str] product_name: The name of the product
330
+ :param pulumi.Input[str] product_type: The type of the product
331
+ :param pulumi.Input[str] provider_name: The provider name of the product
332
+ """
333
+ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
334
+
335
+ __props__ = _ProductState.__new__(_ProductState)
336
+
337
+ __props__.__dict__["create_time"] = create_time
338
+ __props__.__dict__["description"] = description
339
+ __props__.__dict__["product_name"] = product_name
340
+ __props__.__dict__["product_type"] = product_type
341
+ __props__.__dict__["provider_name"] = provider_name
342
+ return Product(resource_name, opts=opts, __props__=__props__)
343
+
344
+ @property
345
+ @pulumi.getter(name="createTime")
346
+ def create_time(self) -> pulumi.Output[str]:
347
+ """
348
+ The creation time of the product
349
+ """
350
+ return pulumi.get(self, "create_time")
351
+
352
+ @property
353
+ @pulumi.getter
354
+ def description(self) -> pulumi.Output[Optional[str]]:
355
+ """
356
+ The description of the product
357
+ """
358
+ return pulumi.get(self, "description")
359
+
360
+ @property
361
+ @pulumi.getter(name="productName")
362
+ def product_name(self) -> pulumi.Output[str]:
363
+ """
364
+ The name of the product
365
+ """
366
+ return pulumi.get(self, "product_name")
367
+
368
+ @property
369
+ @pulumi.getter(name="productType")
370
+ def product_type(self) -> pulumi.Output[str]:
371
+ """
372
+ The type of the product
373
+ """
374
+ return pulumi.get(self, "product_type")
375
+
376
+ @property
377
+ @pulumi.getter(name="providerName")
378
+ def provider_name(self) -> pulumi.Output[str]:
379
+ """
380
+ The provider name of the product
381
+ """
382
+ return pulumi.get(self, "provider_name")
383
+
@@ -0,0 +1,222 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import copy
6
+ import warnings
7
+ import pulumi
8
+ import pulumi.runtime
9
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
10
+ from .. import _utilities
11
+
12
+ __all__ = ['ProductPortfolioAssociationArgs', 'ProductPortfolioAssociation']
13
+
14
+ @pulumi.input_type
15
+ class ProductPortfolioAssociationArgs:
16
+ def __init__(__self__, *,
17
+ portfolio_id: pulumi.Input[str],
18
+ product_id: pulumi.Input[str]):
19
+ """
20
+ The set of arguments for constructing a ProductPortfolioAssociation resource.
21
+ :param pulumi.Input[str] portfolio_id: Product Portfolio ID
22
+ :param pulumi.Input[str] product_id: Product ID
23
+ """
24
+ pulumi.set(__self__, "portfolio_id", portfolio_id)
25
+ pulumi.set(__self__, "product_id", product_id)
26
+
27
+ @property
28
+ @pulumi.getter(name="portfolioId")
29
+ def portfolio_id(self) -> pulumi.Input[str]:
30
+ """
31
+ Product Portfolio ID
32
+ """
33
+ return pulumi.get(self, "portfolio_id")
34
+
35
+ @portfolio_id.setter
36
+ def portfolio_id(self, value: pulumi.Input[str]):
37
+ pulumi.set(self, "portfolio_id", value)
38
+
39
+ @property
40
+ @pulumi.getter(name="productId")
41
+ def product_id(self) -> pulumi.Input[str]:
42
+ """
43
+ Product ID
44
+ """
45
+ return pulumi.get(self, "product_id")
46
+
47
+ @product_id.setter
48
+ def product_id(self, value: pulumi.Input[str]):
49
+ pulumi.set(self, "product_id", value)
50
+
51
+
52
+ @pulumi.input_type
53
+ class _ProductPortfolioAssociationState:
54
+ def __init__(__self__, *,
55
+ portfolio_id: Optional[pulumi.Input[str]] = None,
56
+ product_id: Optional[pulumi.Input[str]] = None):
57
+ """
58
+ Input properties used for looking up and filtering ProductPortfolioAssociation resources.
59
+ :param pulumi.Input[str] portfolio_id: Product Portfolio ID
60
+ :param pulumi.Input[str] product_id: Product ID
61
+ """
62
+ if portfolio_id is not None:
63
+ pulumi.set(__self__, "portfolio_id", portfolio_id)
64
+ if product_id is not None:
65
+ pulumi.set(__self__, "product_id", product_id)
66
+
67
+ @property
68
+ @pulumi.getter(name="portfolioId")
69
+ def portfolio_id(self) -> Optional[pulumi.Input[str]]:
70
+ """
71
+ Product Portfolio ID
72
+ """
73
+ return pulumi.get(self, "portfolio_id")
74
+
75
+ @portfolio_id.setter
76
+ def portfolio_id(self, value: Optional[pulumi.Input[str]]):
77
+ pulumi.set(self, "portfolio_id", value)
78
+
79
+ @property
80
+ @pulumi.getter(name="productId")
81
+ def product_id(self) -> Optional[pulumi.Input[str]]:
82
+ """
83
+ Product ID
84
+ """
85
+ return pulumi.get(self, "product_id")
86
+
87
+ @product_id.setter
88
+ def product_id(self, value: Optional[pulumi.Input[str]]):
89
+ pulumi.set(self, "product_id", value)
90
+
91
+
92
+ class ProductPortfolioAssociation(pulumi.CustomResource):
93
+ @overload
94
+ def __init__(__self__,
95
+ resource_name: str,
96
+ opts: Optional[pulumi.ResourceOptions] = None,
97
+ portfolio_id: Optional[pulumi.Input[str]] = None,
98
+ product_id: Optional[pulumi.Input[str]] = None,
99
+ __props__=None):
100
+ """
101
+ Provides a Service Catalog Product Portfolio Association resource.
102
+
103
+ Product portfolio association.
104
+
105
+ For information about Service Catalog Product Portfolio Association and how to use it, see [What is Product Portfolio Association](https://www.alibabacloud.com/help/en/service-catalog/developer-reference/api-servicecatalog-2021-09-01-associateproductwithportfolio).
106
+
107
+ > **NOTE:** Available since v1.230.0.
108
+
109
+ ## Import
110
+
111
+ Service Catalog Product Portfolio Association can be imported using the id, e.g.
112
+
113
+ ```sh
114
+ $ pulumi import alicloud:servicecatalog/productPortfolioAssociation:ProductPortfolioAssociation example <product_id>:<portfolio_id>
115
+ ```
116
+
117
+ :param str resource_name: The name of the resource.
118
+ :param pulumi.ResourceOptions opts: Options for the resource.
119
+ :param pulumi.Input[str] portfolio_id: Product Portfolio ID
120
+ :param pulumi.Input[str] product_id: Product ID
121
+ """
122
+ ...
123
+ @overload
124
+ def __init__(__self__,
125
+ resource_name: str,
126
+ args: ProductPortfolioAssociationArgs,
127
+ opts: Optional[pulumi.ResourceOptions] = None):
128
+ """
129
+ Provides a Service Catalog Product Portfolio Association resource.
130
+
131
+ Product portfolio association.
132
+
133
+ For information about Service Catalog Product Portfolio Association and how to use it, see [What is Product Portfolio Association](https://www.alibabacloud.com/help/en/service-catalog/developer-reference/api-servicecatalog-2021-09-01-associateproductwithportfolio).
134
+
135
+ > **NOTE:** Available since v1.230.0.
136
+
137
+ ## Import
138
+
139
+ Service Catalog Product Portfolio Association can be imported using the id, e.g.
140
+
141
+ ```sh
142
+ $ pulumi import alicloud:servicecatalog/productPortfolioAssociation:ProductPortfolioAssociation example <product_id>:<portfolio_id>
143
+ ```
144
+
145
+ :param str resource_name: The name of the resource.
146
+ :param ProductPortfolioAssociationArgs args: The arguments to use to populate this resource's properties.
147
+ :param pulumi.ResourceOptions opts: Options for the resource.
148
+ """
149
+ ...
150
+ def __init__(__self__, resource_name: str, *args, **kwargs):
151
+ resource_args, opts = _utilities.get_resource_args_opts(ProductPortfolioAssociationArgs, pulumi.ResourceOptions, *args, **kwargs)
152
+ if resource_args is not None:
153
+ __self__._internal_init(resource_name, opts, **resource_args.__dict__)
154
+ else:
155
+ __self__._internal_init(resource_name, *args, **kwargs)
156
+
157
+ def _internal_init(__self__,
158
+ resource_name: str,
159
+ opts: Optional[pulumi.ResourceOptions] = None,
160
+ portfolio_id: Optional[pulumi.Input[str]] = None,
161
+ product_id: Optional[pulumi.Input[str]] = None,
162
+ __props__=None):
163
+ opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
164
+ if not isinstance(opts, pulumi.ResourceOptions):
165
+ raise TypeError('Expected resource options to be a ResourceOptions instance')
166
+ if opts.id is None:
167
+ if __props__ is not None:
168
+ raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
169
+ __props__ = ProductPortfolioAssociationArgs.__new__(ProductPortfolioAssociationArgs)
170
+
171
+ if portfolio_id is None and not opts.urn:
172
+ raise TypeError("Missing required property 'portfolio_id'")
173
+ __props__.__dict__["portfolio_id"] = portfolio_id
174
+ if product_id is None and not opts.urn:
175
+ raise TypeError("Missing required property 'product_id'")
176
+ __props__.__dict__["product_id"] = product_id
177
+ super(ProductPortfolioAssociation, __self__).__init__(
178
+ 'alicloud:servicecatalog/productPortfolioAssociation:ProductPortfolioAssociation',
179
+ resource_name,
180
+ __props__,
181
+ opts)
182
+
183
+ @staticmethod
184
+ def get(resource_name: str,
185
+ id: pulumi.Input[str],
186
+ opts: Optional[pulumi.ResourceOptions] = None,
187
+ portfolio_id: Optional[pulumi.Input[str]] = None,
188
+ product_id: Optional[pulumi.Input[str]] = None) -> 'ProductPortfolioAssociation':
189
+ """
190
+ Get an existing ProductPortfolioAssociation resource's state with the given name, id, and optional extra
191
+ properties used to qualify the lookup.
192
+
193
+ :param str resource_name: The unique name of the resulting resource.
194
+ :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
195
+ :param pulumi.ResourceOptions opts: Options for the resource.
196
+ :param pulumi.Input[str] portfolio_id: Product Portfolio ID
197
+ :param pulumi.Input[str] product_id: Product ID
198
+ """
199
+ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
200
+
201
+ __props__ = _ProductPortfolioAssociationState.__new__(_ProductPortfolioAssociationState)
202
+
203
+ __props__.__dict__["portfolio_id"] = portfolio_id
204
+ __props__.__dict__["product_id"] = product_id
205
+ return ProductPortfolioAssociation(resource_name, opts=opts, __props__=__props__)
206
+
207
+ @property
208
+ @pulumi.getter(name="portfolioId")
209
+ def portfolio_id(self) -> pulumi.Output[str]:
210
+ """
211
+ Product Portfolio ID
212
+ """
213
+ return pulumi.get(self, "portfolio_id")
214
+
215
+ @property
216
+ @pulumi.getter(name="productId")
217
+ def product_id(self) -> pulumi.Output[str]:
218
+ """
219
+ Product ID
220
+ """
221
+ return pulumi.get(self, "product_id")
222
+