pulumi-kafka 3.11.0a1753336924__tar.gz → 3.11.0a1753501206__tar.gz

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 (28) hide show
  1. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/PKG-INFO +1 -1
  2. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/__init__.py +3 -1
  3. pulumi_kafka-3.11.0a1753501206/pulumi_kafka/acl.py +587 -0
  4. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/config/__init__.py +1 -1
  5. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/config/__init__.pyi +1 -2
  6. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/config/vars.py +29 -30
  7. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/get_topic.py +13 -14
  8. pulumi_kafka-3.11.0a1753501206/pulumi_kafka/get_topics.py +85 -0
  9. pulumi_kafka-3.11.0a1753501206/pulumi_kafka/outputs.py +71 -0
  10. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/provider.py +268 -269
  11. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/pulumi-plugin.json +1 -1
  12. pulumi_kafka-3.11.0a1753501206/pulumi_kafka/quota.py +486 -0
  13. pulumi_kafka-3.11.0a1753501206/pulumi_kafka/topic.py +514 -0
  14. pulumi_kafka-3.11.0a1753501206/pulumi_kafka/user_scram_credential.py +355 -0
  15. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka.egg-info/PKG-INFO +1 -1
  16. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka.egg-info/SOURCES.txt +2 -0
  17. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pyproject.toml +1 -1
  18. pulumi_kafka-3.11.0a1753336924/pulumi_kafka/acl.py +0 -360
  19. pulumi_kafka-3.11.0a1753336924/pulumi_kafka/quota.py +0 -245
  20. pulumi_kafka-3.11.0a1753336924/pulumi_kafka/topic.py +0 -293
  21. pulumi_kafka-3.11.0a1753336924/pulumi_kafka/user_scram_credential.py +0 -296
  22. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/README.md +0 -0
  23. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/_utilities.py +0 -0
  24. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka/py.typed +0 -0
  25. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka.egg-info/dependency_links.txt +0 -0
  26. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka.egg-info/requires.txt +0 -0
  27. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/pulumi_kafka.egg-info/top_level.txt +0 -0
  28. {pulumi_kafka-3.11.0a1753336924 → pulumi_kafka-3.11.0a1753501206}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulumi_kafka
3
- Version: 3.11.0a1753336924
3
+ Version: 3.11.0a1753501206
4
4
  Summary: A Pulumi package for creating and managing Kafka.
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://pulumi.io
@@ -2,16 +2,18 @@
2
2
  # *** WARNING: this file was generated by pulumi-language-python. ***
3
3
  # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
4
 
5
- import builtins
5
+ import builtins as _builtins
6
6
  from . import _utilities
7
7
  import typing
8
8
  # Export this package's modules as members:
9
9
  from .acl import *
10
10
  from .get_topic import *
11
+ from .get_topics import *
11
12
  from .provider import *
12
13
  from .quota import *
13
14
  from .topic import *
14
15
  from .user_scram_credential import *
16
+ from . import outputs
15
17
 
16
18
  # Make subpackages available:
17
19
  if typing.TYPE_CHECKING:
@@ -0,0 +1,587 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by pulumi-language-python. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import builtins as _builtins
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__ = ['AclArgs', 'Acl']
18
+
19
+ @pulumi.input_type
20
+ class AclArgs:
21
+ def __init__(__self__, *,
22
+ acl_host: pulumi.Input[_builtins.str],
23
+ acl_operation: pulumi.Input[_builtins.str],
24
+ acl_permission_type: pulumi.Input[_builtins.str],
25
+ acl_principal: pulumi.Input[_builtins.str],
26
+ acl_resource_name: pulumi.Input[_builtins.str],
27
+ acl_resource_type: pulumi.Input[_builtins.str],
28
+ resource_pattern_type_filter: Optional[pulumi.Input[_builtins.str]] = None):
29
+ """
30
+ The set of arguments for constructing a Acl resource.
31
+ :param pulumi.Input[_builtins.str] acl_resource_name: The name of the resource
32
+ """
33
+ pulumi.set(__self__, "acl_host", acl_host)
34
+ pulumi.set(__self__, "acl_operation", acl_operation)
35
+ pulumi.set(__self__, "acl_permission_type", acl_permission_type)
36
+ pulumi.set(__self__, "acl_principal", acl_principal)
37
+ pulumi.set(__self__, "acl_resource_name", acl_resource_name)
38
+ pulumi.set(__self__, "acl_resource_type", acl_resource_type)
39
+ if resource_pattern_type_filter is not None:
40
+ pulumi.set(__self__, "resource_pattern_type_filter", resource_pattern_type_filter)
41
+
42
+ @_builtins.property
43
+ @pulumi.getter(name="aclHost")
44
+ def acl_host(self) -> pulumi.Input[_builtins.str]:
45
+ return pulumi.get(self, "acl_host")
46
+
47
+ @acl_host.setter
48
+ def acl_host(self, value: pulumi.Input[_builtins.str]):
49
+ pulumi.set(self, "acl_host", value)
50
+
51
+ @_builtins.property
52
+ @pulumi.getter(name="aclOperation")
53
+ def acl_operation(self) -> pulumi.Input[_builtins.str]:
54
+ return pulumi.get(self, "acl_operation")
55
+
56
+ @acl_operation.setter
57
+ def acl_operation(self, value: pulumi.Input[_builtins.str]):
58
+ pulumi.set(self, "acl_operation", value)
59
+
60
+ @_builtins.property
61
+ @pulumi.getter(name="aclPermissionType")
62
+ def acl_permission_type(self) -> pulumi.Input[_builtins.str]:
63
+ return pulumi.get(self, "acl_permission_type")
64
+
65
+ @acl_permission_type.setter
66
+ def acl_permission_type(self, value: pulumi.Input[_builtins.str]):
67
+ pulumi.set(self, "acl_permission_type", value)
68
+
69
+ @_builtins.property
70
+ @pulumi.getter(name="aclPrincipal")
71
+ def acl_principal(self) -> pulumi.Input[_builtins.str]:
72
+ return pulumi.get(self, "acl_principal")
73
+
74
+ @acl_principal.setter
75
+ def acl_principal(self, value: pulumi.Input[_builtins.str]):
76
+ pulumi.set(self, "acl_principal", value)
77
+
78
+ @_builtins.property
79
+ @pulumi.getter(name="aclResourceName")
80
+ def acl_resource_name(self) -> pulumi.Input[_builtins.str]:
81
+ """
82
+ The name of the resource
83
+ """
84
+ return pulumi.get(self, "acl_resource_name")
85
+
86
+ @acl_resource_name.setter
87
+ def acl_resource_name(self, value: pulumi.Input[_builtins.str]):
88
+ pulumi.set(self, "acl_resource_name", value)
89
+
90
+ @_builtins.property
91
+ @pulumi.getter(name="aclResourceType")
92
+ def acl_resource_type(self) -> pulumi.Input[_builtins.str]:
93
+ return pulumi.get(self, "acl_resource_type")
94
+
95
+ @acl_resource_type.setter
96
+ def acl_resource_type(self, value: pulumi.Input[_builtins.str]):
97
+ pulumi.set(self, "acl_resource_type", value)
98
+
99
+ @_builtins.property
100
+ @pulumi.getter(name="resourcePatternTypeFilter")
101
+ def resource_pattern_type_filter(self) -> Optional[pulumi.Input[_builtins.str]]:
102
+ return pulumi.get(self, "resource_pattern_type_filter")
103
+
104
+ @resource_pattern_type_filter.setter
105
+ def resource_pattern_type_filter(self, value: Optional[pulumi.Input[_builtins.str]]):
106
+ pulumi.set(self, "resource_pattern_type_filter", value)
107
+
108
+
109
+ @pulumi.input_type
110
+ class _AclState:
111
+ def __init__(__self__, *,
112
+ acl_host: Optional[pulumi.Input[_builtins.str]] = None,
113
+ acl_operation: Optional[pulumi.Input[_builtins.str]] = None,
114
+ acl_permission_type: Optional[pulumi.Input[_builtins.str]] = None,
115
+ acl_principal: Optional[pulumi.Input[_builtins.str]] = None,
116
+ acl_resource_name: Optional[pulumi.Input[_builtins.str]] = None,
117
+ acl_resource_type: Optional[pulumi.Input[_builtins.str]] = None,
118
+ resource_pattern_type_filter: Optional[pulumi.Input[_builtins.str]] = None):
119
+ """
120
+ Input properties used for looking up and filtering Acl resources.
121
+ :param pulumi.Input[_builtins.str] acl_resource_name: The name of the resource
122
+ """
123
+ if acl_host is not None:
124
+ pulumi.set(__self__, "acl_host", acl_host)
125
+ if acl_operation is not None:
126
+ pulumi.set(__self__, "acl_operation", acl_operation)
127
+ if acl_permission_type is not None:
128
+ pulumi.set(__self__, "acl_permission_type", acl_permission_type)
129
+ if acl_principal is not None:
130
+ pulumi.set(__self__, "acl_principal", acl_principal)
131
+ if acl_resource_name is not None:
132
+ pulumi.set(__self__, "acl_resource_name", acl_resource_name)
133
+ if acl_resource_type is not None:
134
+ pulumi.set(__self__, "acl_resource_type", acl_resource_type)
135
+ if resource_pattern_type_filter is not None:
136
+ pulumi.set(__self__, "resource_pattern_type_filter", resource_pattern_type_filter)
137
+
138
+ @_builtins.property
139
+ @pulumi.getter(name="aclHost")
140
+ def acl_host(self) -> Optional[pulumi.Input[_builtins.str]]:
141
+ return pulumi.get(self, "acl_host")
142
+
143
+ @acl_host.setter
144
+ def acl_host(self, value: Optional[pulumi.Input[_builtins.str]]):
145
+ pulumi.set(self, "acl_host", value)
146
+
147
+ @_builtins.property
148
+ @pulumi.getter(name="aclOperation")
149
+ def acl_operation(self) -> Optional[pulumi.Input[_builtins.str]]:
150
+ return pulumi.get(self, "acl_operation")
151
+
152
+ @acl_operation.setter
153
+ def acl_operation(self, value: Optional[pulumi.Input[_builtins.str]]):
154
+ pulumi.set(self, "acl_operation", value)
155
+
156
+ @_builtins.property
157
+ @pulumi.getter(name="aclPermissionType")
158
+ def acl_permission_type(self) -> Optional[pulumi.Input[_builtins.str]]:
159
+ return pulumi.get(self, "acl_permission_type")
160
+
161
+ @acl_permission_type.setter
162
+ def acl_permission_type(self, value: Optional[pulumi.Input[_builtins.str]]):
163
+ pulumi.set(self, "acl_permission_type", value)
164
+
165
+ @_builtins.property
166
+ @pulumi.getter(name="aclPrincipal")
167
+ def acl_principal(self) -> Optional[pulumi.Input[_builtins.str]]:
168
+ return pulumi.get(self, "acl_principal")
169
+
170
+ @acl_principal.setter
171
+ def acl_principal(self, value: Optional[pulumi.Input[_builtins.str]]):
172
+ pulumi.set(self, "acl_principal", value)
173
+
174
+ @_builtins.property
175
+ @pulumi.getter(name="aclResourceName")
176
+ def acl_resource_name(self) -> Optional[pulumi.Input[_builtins.str]]:
177
+ """
178
+ The name of the resource
179
+ """
180
+ return pulumi.get(self, "acl_resource_name")
181
+
182
+ @acl_resource_name.setter
183
+ def acl_resource_name(self, value: Optional[pulumi.Input[_builtins.str]]):
184
+ pulumi.set(self, "acl_resource_name", value)
185
+
186
+ @_builtins.property
187
+ @pulumi.getter(name="aclResourceType")
188
+ def acl_resource_type(self) -> Optional[pulumi.Input[_builtins.str]]:
189
+ return pulumi.get(self, "acl_resource_type")
190
+
191
+ @acl_resource_type.setter
192
+ def acl_resource_type(self, value: Optional[pulumi.Input[_builtins.str]]):
193
+ pulumi.set(self, "acl_resource_type", value)
194
+
195
+ @_builtins.property
196
+ @pulumi.getter(name="resourcePatternTypeFilter")
197
+ def resource_pattern_type_filter(self) -> Optional[pulumi.Input[_builtins.str]]:
198
+ return pulumi.get(self, "resource_pattern_type_filter")
199
+
200
+ @resource_pattern_type_filter.setter
201
+ def resource_pattern_type_filter(self, value: Optional[pulumi.Input[_builtins.str]]):
202
+ pulumi.set(self, "resource_pattern_type_filter", value)
203
+
204
+
205
+ @pulumi.type_token("kafka:index/acl:Acl")
206
+ class Acl(pulumi.CustomResource):
207
+ @overload
208
+ def __init__(__self__,
209
+ resource_name: str,
210
+ opts: Optional[pulumi.ResourceOptions] = None,
211
+ acl_host: Optional[pulumi.Input[_builtins.str]] = None,
212
+ acl_operation: Optional[pulumi.Input[_builtins.str]] = None,
213
+ acl_permission_type: Optional[pulumi.Input[_builtins.str]] = None,
214
+ acl_principal: Optional[pulumi.Input[_builtins.str]] = None,
215
+ acl_resource_name: Optional[pulumi.Input[_builtins.str]] = None,
216
+ acl_resource_type: Optional[pulumi.Input[_builtins.str]] = None,
217
+ resource_pattern_type_filter: Optional[pulumi.Input[_builtins.str]] = None,
218
+ __props__=None):
219
+ """
220
+ The `Acl` resource manages Apache Kafka Access Control Lists (ACLs). ACLs control access to Kafka resources like topics, consumer groups, and clusters by defining which principals (users or services) can perform specific operations on these resources.
221
+
222
+ ## Example Usage
223
+
224
+ ### Allow Producer Access to Topic
225
+
226
+ ```python
227
+ import pulumi
228
+ import pulumi_kafka as kafka
229
+
230
+ producer = kafka.Acl("producer",
231
+ acl_resource_name="orders",
232
+ acl_resource_type="Topic",
233
+ acl_principal="User:producer-service",
234
+ acl_host="*",
235
+ acl_operation="Write",
236
+ acl_permission_type="Allow")
237
+ # Also grant describe permission for producers
238
+ producer_describe = kafka.Acl("producer_describe",
239
+ acl_resource_name="orders",
240
+ acl_resource_type="Topic",
241
+ acl_principal="User:producer-service",
242
+ acl_host="*",
243
+ acl_operation="Describe",
244
+ acl_permission_type="Allow")
245
+ ```
246
+
247
+ ### Allow Consumer Group Access
248
+
249
+ ```python
250
+ import pulumi
251
+ import pulumi_kafka as kafka
252
+
253
+ # Allow read access to topic
254
+ consumer_read = kafka.Acl("consumer_read",
255
+ acl_resource_name="orders",
256
+ acl_resource_type="Topic",
257
+ acl_principal="User:consumer-service",
258
+ acl_host="*",
259
+ acl_operation="Read",
260
+ acl_permission_type="Allow")
261
+ # Allow access to consumer group
262
+ consumer_group = kafka.Acl("consumer_group",
263
+ acl_resource_name="order-processors",
264
+ acl_resource_type="Group",
265
+ acl_principal="User:consumer-service",
266
+ acl_host="*",
267
+ acl_operation="Read",
268
+ acl_permission_type="Allow")
269
+ ```
270
+
271
+ ### Prefix-Based Access Control
272
+
273
+ ```python
274
+ import pulumi
275
+ import pulumi_kafka as kafka
276
+
277
+ # Grant access to all topics with prefix "logs-"
278
+ logs_access = kafka.Acl("logs_access",
279
+ acl_resource_name="logs-",
280
+ acl_resource_type="Topic",
281
+ resource_pattern_type_filter="Prefixed",
282
+ acl_principal="User:log-aggregator",
283
+ acl_host="*",
284
+ acl_operation="Read",
285
+ acl_permission_type="Allow")
286
+ ```
287
+
288
+ ### Admin User with Full Access
289
+
290
+ ```python
291
+ import pulumi
292
+ import pulumi_kafka as kafka
293
+
294
+ # Grant cluster-level admin access
295
+ admin_cluster = kafka.Acl("admin_cluster",
296
+ acl_resource_name="kafka-cluster",
297
+ acl_resource_type="Cluster",
298
+ acl_principal="User:admin",
299
+ acl_host="*",
300
+ acl_operation="All",
301
+ acl_permission_type="Allow")
302
+ ```
303
+
304
+ ## Common ACL Patterns
305
+
306
+ ### Producer ACLs
307
+ Producers typically need:
308
+ - `Write` and `Describe` on topics
309
+ - `Write` on `TransactionalID` (for transactional producers)
310
+ - `IdempotentWrite` on `Cluster` (for idempotent producers)
311
+
312
+ ### Consumer ACLs
313
+ Consumers typically need:
314
+ - `Read` on topics
315
+ - `Read` on consumer groups
316
+ - `Describe` on topics (optional, for metadata)
317
+
318
+ ### Admin ACLs
319
+ Administrators typically need:
320
+ - `All` on `Cluster`
321
+ - Or specific operations like `Alter`, `AlterConfigs`, `Create`, `Delete`
322
+
323
+ > **Warning:** Be cautious with `Deny` ACLs as they take precedence over `Allow` ACLs. A deny rule will block access even if an allow rule exists.
324
+
325
+ ## Import
326
+
327
+ Kafka ACLs can be imported using a pipe-delimited string containing all ACL properties:
328
+
329
+ Format: ${acl_principal}|${acl_host}|${acl_operation}|${acl_permission_type}|${resource_type}|${resource_name}|${resource_pattern_type_filter}
330
+
331
+ ```sh
332
+ $ pulumi import kafka:index/acl:Acl example 'User:producer|*|Write|Allow|Topic|orders|Literal'
333
+ ```
334
+
335
+ :param str resource_name: The name of the resource.
336
+ :param pulumi.ResourceOptions opts: Options for the resource.
337
+ :param pulumi.Input[_builtins.str] acl_resource_name: The name of the resource
338
+ """
339
+ ...
340
+ @overload
341
+ def __init__(__self__,
342
+ resource_name: str,
343
+ args: AclArgs,
344
+ opts: Optional[pulumi.ResourceOptions] = None):
345
+ """
346
+ The `Acl` resource manages Apache Kafka Access Control Lists (ACLs). ACLs control access to Kafka resources like topics, consumer groups, and clusters by defining which principals (users or services) can perform specific operations on these resources.
347
+
348
+ ## Example Usage
349
+
350
+ ### Allow Producer Access to Topic
351
+
352
+ ```python
353
+ import pulumi
354
+ import pulumi_kafka as kafka
355
+
356
+ producer = kafka.Acl("producer",
357
+ acl_resource_name="orders",
358
+ acl_resource_type="Topic",
359
+ acl_principal="User:producer-service",
360
+ acl_host="*",
361
+ acl_operation="Write",
362
+ acl_permission_type="Allow")
363
+ # Also grant describe permission for producers
364
+ producer_describe = kafka.Acl("producer_describe",
365
+ acl_resource_name="orders",
366
+ acl_resource_type="Topic",
367
+ acl_principal="User:producer-service",
368
+ acl_host="*",
369
+ acl_operation="Describe",
370
+ acl_permission_type="Allow")
371
+ ```
372
+
373
+ ### Allow Consumer Group Access
374
+
375
+ ```python
376
+ import pulumi
377
+ import pulumi_kafka as kafka
378
+
379
+ # Allow read access to topic
380
+ consumer_read = kafka.Acl("consumer_read",
381
+ acl_resource_name="orders",
382
+ acl_resource_type="Topic",
383
+ acl_principal="User:consumer-service",
384
+ acl_host="*",
385
+ acl_operation="Read",
386
+ acl_permission_type="Allow")
387
+ # Allow access to consumer group
388
+ consumer_group = kafka.Acl("consumer_group",
389
+ acl_resource_name="order-processors",
390
+ acl_resource_type="Group",
391
+ acl_principal="User:consumer-service",
392
+ acl_host="*",
393
+ acl_operation="Read",
394
+ acl_permission_type="Allow")
395
+ ```
396
+
397
+ ### Prefix-Based Access Control
398
+
399
+ ```python
400
+ import pulumi
401
+ import pulumi_kafka as kafka
402
+
403
+ # Grant access to all topics with prefix "logs-"
404
+ logs_access = kafka.Acl("logs_access",
405
+ acl_resource_name="logs-",
406
+ acl_resource_type="Topic",
407
+ resource_pattern_type_filter="Prefixed",
408
+ acl_principal="User:log-aggregator",
409
+ acl_host="*",
410
+ acl_operation="Read",
411
+ acl_permission_type="Allow")
412
+ ```
413
+
414
+ ### Admin User with Full Access
415
+
416
+ ```python
417
+ import pulumi
418
+ import pulumi_kafka as kafka
419
+
420
+ # Grant cluster-level admin access
421
+ admin_cluster = kafka.Acl("admin_cluster",
422
+ acl_resource_name="kafka-cluster",
423
+ acl_resource_type="Cluster",
424
+ acl_principal="User:admin",
425
+ acl_host="*",
426
+ acl_operation="All",
427
+ acl_permission_type="Allow")
428
+ ```
429
+
430
+ ## Common ACL Patterns
431
+
432
+ ### Producer ACLs
433
+ Producers typically need:
434
+ - `Write` and `Describe` on topics
435
+ - `Write` on `TransactionalID` (for transactional producers)
436
+ - `IdempotentWrite` on `Cluster` (for idempotent producers)
437
+
438
+ ### Consumer ACLs
439
+ Consumers typically need:
440
+ - `Read` on topics
441
+ - `Read` on consumer groups
442
+ - `Describe` on topics (optional, for metadata)
443
+
444
+ ### Admin ACLs
445
+ Administrators typically need:
446
+ - `All` on `Cluster`
447
+ - Or specific operations like `Alter`, `AlterConfigs`, `Create`, `Delete`
448
+
449
+ > **Warning:** Be cautious with `Deny` ACLs as they take precedence over `Allow` ACLs. A deny rule will block access even if an allow rule exists.
450
+
451
+ ## Import
452
+
453
+ Kafka ACLs can be imported using a pipe-delimited string containing all ACL properties:
454
+
455
+ Format: ${acl_principal}|${acl_host}|${acl_operation}|${acl_permission_type}|${resource_type}|${resource_name}|${resource_pattern_type_filter}
456
+
457
+ ```sh
458
+ $ pulumi import kafka:index/acl:Acl example 'User:producer|*|Write|Allow|Topic|orders|Literal'
459
+ ```
460
+
461
+ :param str resource_name: The name of the resource.
462
+ :param AclArgs args: The arguments to use to populate this resource's properties.
463
+ :param pulumi.ResourceOptions opts: Options for the resource.
464
+ """
465
+ ...
466
+ def __init__(__self__, resource_name: str, *args, **kwargs):
467
+ resource_args, opts = _utilities.get_resource_args_opts(AclArgs, pulumi.ResourceOptions, *args, **kwargs)
468
+ if resource_args is not None:
469
+ __self__._internal_init(resource_name, opts, **resource_args.__dict__)
470
+ else:
471
+ __self__._internal_init(resource_name, *args, **kwargs)
472
+
473
+ def _internal_init(__self__,
474
+ resource_name: str,
475
+ opts: Optional[pulumi.ResourceOptions] = None,
476
+ acl_host: Optional[pulumi.Input[_builtins.str]] = None,
477
+ acl_operation: Optional[pulumi.Input[_builtins.str]] = None,
478
+ acl_permission_type: Optional[pulumi.Input[_builtins.str]] = None,
479
+ acl_principal: Optional[pulumi.Input[_builtins.str]] = None,
480
+ acl_resource_name: Optional[pulumi.Input[_builtins.str]] = None,
481
+ acl_resource_type: Optional[pulumi.Input[_builtins.str]] = None,
482
+ resource_pattern_type_filter: Optional[pulumi.Input[_builtins.str]] = None,
483
+ __props__=None):
484
+ opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
485
+ if not isinstance(opts, pulumi.ResourceOptions):
486
+ raise TypeError('Expected resource options to be a ResourceOptions instance')
487
+ if opts.id is None:
488
+ if __props__ is not None:
489
+ raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
490
+ __props__ = AclArgs.__new__(AclArgs)
491
+
492
+ if acl_host is None and not opts.urn:
493
+ raise TypeError("Missing required property 'acl_host'")
494
+ __props__.__dict__["acl_host"] = acl_host
495
+ if acl_operation is None and not opts.urn:
496
+ raise TypeError("Missing required property 'acl_operation'")
497
+ __props__.__dict__["acl_operation"] = acl_operation
498
+ if acl_permission_type is None and not opts.urn:
499
+ raise TypeError("Missing required property 'acl_permission_type'")
500
+ __props__.__dict__["acl_permission_type"] = acl_permission_type
501
+ if acl_principal is None and not opts.urn:
502
+ raise TypeError("Missing required property 'acl_principal'")
503
+ __props__.__dict__["acl_principal"] = acl_principal
504
+ if acl_resource_name is None and not opts.urn:
505
+ raise TypeError("Missing required property 'acl_resource_name'")
506
+ __props__.__dict__["acl_resource_name"] = acl_resource_name
507
+ if acl_resource_type is None and not opts.urn:
508
+ raise TypeError("Missing required property 'acl_resource_type'")
509
+ __props__.__dict__["acl_resource_type"] = acl_resource_type
510
+ __props__.__dict__["resource_pattern_type_filter"] = resource_pattern_type_filter
511
+ super(Acl, __self__).__init__(
512
+ 'kafka:index/acl:Acl',
513
+ resource_name,
514
+ __props__,
515
+ opts)
516
+
517
+ @staticmethod
518
+ def get(resource_name: str,
519
+ id: pulumi.Input[str],
520
+ opts: Optional[pulumi.ResourceOptions] = None,
521
+ acl_host: Optional[pulumi.Input[_builtins.str]] = None,
522
+ acl_operation: Optional[pulumi.Input[_builtins.str]] = None,
523
+ acl_permission_type: Optional[pulumi.Input[_builtins.str]] = None,
524
+ acl_principal: Optional[pulumi.Input[_builtins.str]] = None,
525
+ acl_resource_name: Optional[pulumi.Input[_builtins.str]] = None,
526
+ acl_resource_type: Optional[pulumi.Input[_builtins.str]] = None,
527
+ resource_pattern_type_filter: Optional[pulumi.Input[_builtins.str]] = None) -> 'Acl':
528
+ """
529
+ Get an existing Acl resource's state with the given name, id, and optional extra
530
+ properties used to qualify the lookup.
531
+
532
+ :param str resource_name: The unique name of the resulting resource.
533
+ :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
534
+ :param pulumi.ResourceOptions opts: Options for the resource.
535
+ :param pulumi.Input[_builtins.str] acl_resource_name: The name of the resource
536
+ """
537
+ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
538
+
539
+ __props__ = _AclState.__new__(_AclState)
540
+
541
+ __props__.__dict__["acl_host"] = acl_host
542
+ __props__.__dict__["acl_operation"] = acl_operation
543
+ __props__.__dict__["acl_permission_type"] = acl_permission_type
544
+ __props__.__dict__["acl_principal"] = acl_principal
545
+ __props__.__dict__["acl_resource_name"] = acl_resource_name
546
+ __props__.__dict__["acl_resource_type"] = acl_resource_type
547
+ __props__.__dict__["resource_pattern_type_filter"] = resource_pattern_type_filter
548
+ return Acl(resource_name, opts=opts, __props__=__props__)
549
+
550
+ @_builtins.property
551
+ @pulumi.getter(name="aclHost")
552
+ def acl_host(self) -> pulumi.Output[_builtins.str]:
553
+ return pulumi.get(self, "acl_host")
554
+
555
+ @_builtins.property
556
+ @pulumi.getter(name="aclOperation")
557
+ def acl_operation(self) -> pulumi.Output[_builtins.str]:
558
+ return pulumi.get(self, "acl_operation")
559
+
560
+ @_builtins.property
561
+ @pulumi.getter(name="aclPermissionType")
562
+ def acl_permission_type(self) -> pulumi.Output[_builtins.str]:
563
+ return pulumi.get(self, "acl_permission_type")
564
+
565
+ @_builtins.property
566
+ @pulumi.getter(name="aclPrincipal")
567
+ def acl_principal(self) -> pulumi.Output[_builtins.str]:
568
+ return pulumi.get(self, "acl_principal")
569
+
570
+ @_builtins.property
571
+ @pulumi.getter(name="aclResourceName")
572
+ def acl_resource_name(self) -> pulumi.Output[_builtins.str]:
573
+ """
574
+ The name of the resource
575
+ """
576
+ return pulumi.get(self, "acl_resource_name")
577
+
578
+ @_builtins.property
579
+ @pulumi.getter(name="aclResourceType")
580
+ def acl_resource_type(self) -> pulumi.Output[_builtins.str]:
581
+ return pulumi.get(self, "acl_resource_type")
582
+
583
+ @_builtins.property
584
+ @pulumi.getter(name="resourcePatternTypeFilter")
585
+ def resource_pattern_type_filter(self) -> pulumi.Output[Optional[_builtins.str]]:
586
+ return pulumi.get(self, "resource_pattern_type_filter")
587
+
@@ -2,7 +2,7 @@
2
2
  # *** WARNING: this file was generated by pulumi-language-python. ***
3
3
  # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
4
 
5
- import builtins
5
+ import builtins as _builtins
6
6
  import sys
7
7
  from .vars import _ExportableConfig
8
8
 
@@ -2,8 +2,7 @@
2
2
  # *** WARNING: this file was generated by pulumi-language-python. ***
3
3
  # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
4
 
5
- import builtins
6
- import copy
5
+ import builtins as _builtins
7
6
  import warnings
8
7
  import sys
9
8
  import pulumi