pulumi-tailscale 1.0.0a1770157009__tar.gz → 1.0.0a1770273225__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 (45) hide show
  1. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/PKG-INFO +1 -1
  2. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/acl.py +6 -6
  3. pulumi_tailscale-1.0.0a1770273225/pulumi_tailscale/get_device.py +410 -0
  4. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/get_users.py +6 -6
  5. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/logstream_configuration.py +256 -28
  6. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/outputs.py +154 -0
  7. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/posture_integration.py +10 -8
  8. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/pulumi-plugin.json +1 -1
  9. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/webhook.py +14 -14
  10. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale.egg-info/PKG-INFO +1 -1
  11. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pyproject.toml +1 -1
  12. pulumi_tailscale-1.0.0a1770157009/pulumi_tailscale/get_device.py +0 -214
  13. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/README.md +0 -0
  14. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/__init__.py +0 -0
  15. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/_inputs.py +0 -0
  16. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/_utilities.py +0 -0
  17. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/aws_external_id.py +0 -0
  18. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/config/__init__.py +0 -0
  19. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/config/__init__.pyi +0 -0
  20. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/config/vars.py +0 -0
  21. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/contacts.py +0 -0
  22. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/device_authorization.py +0 -0
  23. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/device_key.py +0 -0
  24. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/device_subnet_routes.py +0 -0
  25. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/device_tags.py +0 -0
  26. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/dns_configuration.py +0 -0
  27. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/dns_nameservers.py +0 -0
  28. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/dns_preferences.py +0 -0
  29. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/dns_search_paths.py +0 -0
  30. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/dns_split_nameservers.py +0 -0
  31. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/federated_identity.py +0 -0
  32. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/get4_via6.py +0 -0
  33. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/get_acl.py +0 -0
  34. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/get_devices.py +0 -0
  35. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/get_user.py +0 -0
  36. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/oauth_client.py +0 -0
  37. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/provider.py +0 -0
  38. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/py.typed +0 -0
  39. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/tailnet_key.py +0 -0
  40. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale/tailnet_settings.py +0 -0
  41. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale.egg-info/SOURCES.txt +0 -0
  42. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale.egg-info/dependency_links.txt +0 -0
  43. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale.egg-info/requires.txt +0 -0
  44. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/pulumi_tailscale.egg-info/top_level.txt +0 -0
  45. {pulumi_tailscale-1.0.0a1770157009 → pulumi_tailscale-1.0.0a1770273225}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulumi_tailscale
3
- Version: 1.0.0a1770157009
3
+ Version: 1.0.0a1770273225
4
4
  Summary: A Pulumi package for creating and managing Tailscale cloud resources.
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://pulumi.io
@@ -163,9 +163,9 @@ class Acl(pulumi.CustomResource):
163
163
  \\"grants\\": [
164
164
  {
165
165
  // Allow all users access to all ports.
166
- \\"src\\" = [\\"*\\"],
167
- \\"dst\\" = [\\"*\\"],
168
- \\"ip\\" = [\\"*\\"],
166
+ \\"src\\": [\\"*\\"],
167
+ \\"dst\\": [\\"*\\"],
168
+ \\"ip\\": [\\"*\\"],
169
169
  },
170
170
  ],
171
171
  }
@@ -218,9 +218,9 @@ class Acl(pulumi.CustomResource):
218
218
  \\"grants\\": [
219
219
  {
220
220
  // Allow all users access to all ports.
221
- \\"src\\" = [\\"*\\"],
222
- \\"dst\\" = [\\"*\\"],
223
- \\"ip\\" = [\\"*\\"],
221
+ \\"src\\": [\\"*\\"],
222
+ \\"dst\\": [\\"*\\"],
223
+ \\"ip\\": [\\"*\\"],
224
224
  },
225
225
  ],
226
226
  }
@@ -0,0 +1,410 @@
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__ = [
18
+ 'GetDeviceResult',
19
+ 'AwaitableGetDeviceResult',
20
+ 'get_device',
21
+ 'get_device_output',
22
+ ]
23
+
24
+ @pulumi.output_type
25
+ class GetDeviceResult:
26
+ """
27
+ A collection of values returned by getDevice.
28
+ """
29
+ def __init__(__self__, addresses=None, authorized=None, blocks_incoming_connections=None, client_version=None, created=None, expires=None, hostname=None, id=None, is_external=None, key_expiry_disabled=None, last_seen=None, machine_key=None, name=None, node_id=None, node_key=None, os=None, tags=None, tailnet_lock_error=None, tailnet_lock_key=None, update_available=None, user=None, wait_for=None):
30
+ if addresses and not isinstance(addresses, list):
31
+ raise TypeError("Expected argument 'addresses' to be a list")
32
+ pulumi.set(__self__, "addresses", addresses)
33
+ if authorized and not isinstance(authorized, bool):
34
+ raise TypeError("Expected argument 'authorized' to be a bool")
35
+ pulumi.set(__self__, "authorized", authorized)
36
+ if blocks_incoming_connections and not isinstance(blocks_incoming_connections, bool):
37
+ raise TypeError("Expected argument 'blocks_incoming_connections' to be a bool")
38
+ pulumi.set(__self__, "blocks_incoming_connections", blocks_incoming_connections)
39
+ if client_version and not isinstance(client_version, str):
40
+ raise TypeError("Expected argument 'client_version' to be a str")
41
+ pulumi.set(__self__, "client_version", client_version)
42
+ if created and not isinstance(created, str):
43
+ raise TypeError("Expected argument 'created' to be a str")
44
+ pulumi.set(__self__, "created", created)
45
+ if expires and not isinstance(expires, str):
46
+ raise TypeError("Expected argument 'expires' to be a str")
47
+ pulumi.set(__self__, "expires", expires)
48
+ if hostname and not isinstance(hostname, str):
49
+ raise TypeError("Expected argument 'hostname' to be a str")
50
+ pulumi.set(__self__, "hostname", hostname)
51
+ if id and not isinstance(id, str):
52
+ raise TypeError("Expected argument 'id' to be a str")
53
+ pulumi.set(__self__, "id", id)
54
+ if is_external and not isinstance(is_external, bool):
55
+ raise TypeError("Expected argument 'is_external' to be a bool")
56
+ pulumi.set(__self__, "is_external", is_external)
57
+ if key_expiry_disabled and not isinstance(key_expiry_disabled, bool):
58
+ raise TypeError("Expected argument 'key_expiry_disabled' to be a bool")
59
+ pulumi.set(__self__, "key_expiry_disabled", key_expiry_disabled)
60
+ if last_seen and not isinstance(last_seen, str):
61
+ raise TypeError("Expected argument 'last_seen' to be a str")
62
+ pulumi.set(__self__, "last_seen", last_seen)
63
+ if machine_key and not isinstance(machine_key, str):
64
+ raise TypeError("Expected argument 'machine_key' to be a str")
65
+ pulumi.set(__self__, "machine_key", machine_key)
66
+ if name and not isinstance(name, str):
67
+ raise TypeError("Expected argument 'name' to be a str")
68
+ pulumi.set(__self__, "name", name)
69
+ if node_id and not isinstance(node_id, str):
70
+ raise TypeError("Expected argument 'node_id' to be a str")
71
+ pulumi.set(__self__, "node_id", node_id)
72
+ if node_key and not isinstance(node_key, str):
73
+ raise TypeError("Expected argument 'node_key' to be a str")
74
+ pulumi.set(__self__, "node_key", node_key)
75
+ if os and not isinstance(os, str):
76
+ raise TypeError("Expected argument 'os' to be a str")
77
+ pulumi.set(__self__, "os", os)
78
+ if tags and not isinstance(tags, list):
79
+ raise TypeError("Expected argument 'tags' to be a list")
80
+ pulumi.set(__self__, "tags", tags)
81
+ if tailnet_lock_error and not isinstance(tailnet_lock_error, str):
82
+ raise TypeError("Expected argument 'tailnet_lock_error' to be a str")
83
+ pulumi.set(__self__, "tailnet_lock_error", tailnet_lock_error)
84
+ if tailnet_lock_key and not isinstance(tailnet_lock_key, str):
85
+ raise TypeError("Expected argument 'tailnet_lock_key' to be a str")
86
+ pulumi.set(__self__, "tailnet_lock_key", tailnet_lock_key)
87
+ if update_available and not isinstance(update_available, bool):
88
+ raise TypeError("Expected argument 'update_available' to be a bool")
89
+ pulumi.set(__self__, "update_available", update_available)
90
+ if user and not isinstance(user, str):
91
+ raise TypeError("Expected argument 'user' to be a str")
92
+ pulumi.set(__self__, "user", user)
93
+ if wait_for and not isinstance(wait_for, str):
94
+ raise TypeError("Expected argument 'wait_for' to be a str")
95
+ pulumi.set(__self__, "wait_for", wait_for)
96
+
97
+ @_builtins.property
98
+ @pulumi.getter
99
+ def addresses(self) -> Sequence[_builtins.str]:
100
+ """
101
+ The list of device's IPs
102
+ """
103
+ return pulumi.get(self, "addresses")
104
+
105
+ @_builtins.property
106
+ @pulumi.getter
107
+ def authorized(self) -> _builtins.bool:
108
+ """
109
+ Whether the device is authorized to access the tailnet
110
+ """
111
+ return pulumi.get(self, "authorized")
112
+
113
+ @_builtins.property
114
+ @pulumi.getter(name="blocksIncomingConnections")
115
+ def blocks_incoming_connections(self) -> _builtins.bool:
116
+ """
117
+ Whether the device blocks incoming connections
118
+ """
119
+ return pulumi.get(self, "blocks_incoming_connections")
120
+
121
+ @_builtins.property
122
+ @pulumi.getter(name="clientVersion")
123
+ def client_version(self) -> _builtins.str:
124
+ """
125
+ The Tailscale client version running on the device
126
+ """
127
+ return pulumi.get(self, "client_version")
128
+
129
+ @_builtins.property
130
+ @pulumi.getter
131
+ def created(self) -> _builtins.str:
132
+ """
133
+ The creation time of the device
134
+ """
135
+ return pulumi.get(self, "created")
136
+
137
+ @_builtins.property
138
+ @pulumi.getter
139
+ def expires(self) -> _builtins.str:
140
+ """
141
+ The expiry time of the device's key
142
+ """
143
+ return pulumi.get(self, "expires")
144
+
145
+ @_builtins.property
146
+ @pulumi.getter
147
+ def hostname(self) -> Optional[_builtins.str]:
148
+ """
149
+ The short hostname of the device
150
+ """
151
+ return pulumi.get(self, "hostname")
152
+
153
+ @_builtins.property
154
+ @pulumi.getter
155
+ def id(self) -> _builtins.str:
156
+ """
157
+ The provider-assigned unique ID for this managed resource.
158
+ """
159
+ return pulumi.get(self, "id")
160
+
161
+ @_builtins.property
162
+ @pulumi.getter(name="isExternal")
163
+ def is_external(self) -> _builtins.bool:
164
+ """
165
+ Whether the device is marked as external
166
+ """
167
+ return pulumi.get(self, "is_external")
168
+
169
+ @_builtins.property
170
+ @pulumi.getter(name="keyExpiryDisabled")
171
+ def key_expiry_disabled(self) -> _builtins.bool:
172
+ """
173
+ Whether the device's key expiry is disabled
174
+ """
175
+ return pulumi.get(self, "key_expiry_disabled")
176
+
177
+ @_builtins.property
178
+ @pulumi.getter(name="lastSeen")
179
+ def last_seen(self) -> _builtins.str:
180
+ """
181
+ The last seen time of the device
182
+ """
183
+ return pulumi.get(self, "last_seen")
184
+
185
+ @_builtins.property
186
+ @pulumi.getter(name="machineKey")
187
+ def machine_key(self) -> _builtins.str:
188
+ """
189
+ The machine key of the device
190
+ """
191
+ return pulumi.get(self, "machine_key")
192
+
193
+ @_builtins.property
194
+ @pulumi.getter
195
+ def name(self) -> Optional[_builtins.str]:
196
+ """
197
+ The full name of the device (e.g. `hostname.domain.ts.net`)
198
+ """
199
+ return pulumi.get(self, "name")
200
+
201
+ @_builtins.property
202
+ @pulumi.getter(name="nodeId")
203
+ def node_id(self) -> _builtins.str:
204
+ """
205
+ The preferred indentifier for a device.
206
+ """
207
+ return pulumi.get(self, "node_id")
208
+
209
+ @_builtins.property
210
+ @pulumi.getter(name="nodeKey")
211
+ def node_key(self) -> _builtins.str:
212
+ """
213
+ The node key of the device
214
+ """
215
+ return pulumi.get(self, "node_key")
216
+
217
+ @_builtins.property
218
+ @pulumi.getter
219
+ def os(self) -> _builtins.str:
220
+ """
221
+ The operating system of the device
222
+ """
223
+ return pulumi.get(self, "os")
224
+
225
+ @_builtins.property
226
+ @pulumi.getter
227
+ def tags(self) -> Sequence[_builtins.str]:
228
+ """
229
+ The tags applied to the device
230
+ """
231
+ return pulumi.get(self, "tags")
232
+
233
+ @_builtins.property
234
+ @pulumi.getter(name="tailnetLockError")
235
+ def tailnet_lock_error(self) -> _builtins.str:
236
+ """
237
+ The tailnet lock error for the device, if any
238
+ """
239
+ return pulumi.get(self, "tailnet_lock_error")
240
+
241
+ @_builtins.property
242
+ @pulumi.getter(name="tailnetLockKey")
243
+ def tailnet_lock_key(self) -> _builtins.str:
244
+ """
245
+ The tailnet lock key for the device, if any
246
+ """
247
+ return pulumi.get(self, "tailnet_lock_key")
248
+
249
+ @_builtins.property
250
+ @pulumi.getter(name="updateAvailable")
251
+ def update_available(self) -> _builtins.bool:
252
+ """
253
+ Whether an update is available for the device
254
+ """
255
+ return pulumi.get(self, "update_available")
256
+
257
+ @_builtins.property
258
+ @pulumi.getter
259
+ def user(self) -> _builtins.str:
260
+ """
261
+ The user associated with the device
262
+ """
263
+ return pulumi.get(self, "user")
264
+
265
+ @_builtins.property
266
+ @pulumi.getter(name="waitFor")
267
+ def wait_for(self) -> Optional[_builtins.str]:
268
+ """
269
+ If specified, the provider will make multiple attempts to obtain the data source until the wait_for duration is reached. Retries are made every second so this value should be greater than 1s
270
+ """
271
+ return pulumi.get(self, "wait_for")
272
+
273
+
274
+ class AwaitableGetDeviceResult(GetDeviceResult):
275
+ # pylint: disable=using-constant-test
276
+ def __await__(self):
277
+ if False:
278
+ yield self
279
+ return GetDeviceResult(
280
+ addresses=self.addresses,
281
+ authorized=self.authorized,
282
+ blocks_incoming_connections=self.blocks_incoming_connections,
283
+ client_version=self.client_version,
284
+ created=self.created,
285
+ expires=self.expires,
286
+ hostname=self.hostname,
287
+ id=self.id,
288
+ is_external=self.is_external,
289
+ key_expiry_disabled=self.key_expiry_disabled,
290
+ last_seen=self.last_seen,
291
+ machine_key=self.machine_key,
292
+ name=self.name,
293
+ node_id=self.node_id,
294
+ node_key=self.node_key,
295
+ os=self.os,
296
+ tags=self.tags,
297
+ tailnet_lock_error=self.tailnet_lock_error,
298
+ tailnet_lock_key=self.tailnet_lock_key,
299
+ update_available=self.update_available,
300
+ user=self.user,
301
+ wait_for=self.wait_for)
302
+
303
+
304
+ def get_device(hostname: Optional[_builtins.str] = None,
305
+ name: Optional[_builtins.str] = None,
306
+ wait_for: Optional[_builtins.str] = None,
307
+ opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetDeviceResult:
308
+ """
309
+ The device data source describes a single device in a tailnet
310
+
311
+ ## Example Usage
312
+
313
+ ```python
314
+ import pulumi
315
+ import pulumi_tailscale as tailscale
316
+
317
+ sample_device = tailscale.get_device(name="device1.example.ts.net",
318
+ wait_for="60s")
319
+ sample_device2 = tailscale.get_device(hostname="device2",
320
+ wait_for="60s")
321
+ ```
322
+
323
+
324
+ :param _builtins.str hostname: The short hostname of the device
325
+ :param _builtins.str name: The full name of the device (e.g. `hostname.domain.ts.net`)
326
+ :param _builtins.str wait_for: If specified, the provider will make multiple attempts to obtain the data source until the wait_for duration is reached. Retries are made every second so this value should be greater than 1s
327
+ """
328
+ __args__ = dict()
329
+ __args__['hostname'] = hostname
330
+ __args__['name'] = name
331
+ __args__['waitFor'] = wait_for
332
+ opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
333
+ __ret__ = pulumi.runtime.invoke('tailscale:index/getDevice:getDevice', __args__, opts=opts, typ=GetDeviceResult).value
334
+
335
+ return AwaitableGetDeviceResult(
336
+ addresses=pulumi.get(__ret__, 'addresses'),
337
+ authorized=pulumi.get(__ret__, 'authorized'),
338
+ blocks_incoming_connections=pulumi.get(__ret__, 'blocks_incoming_connections'),
339
+ client_version=pulumi.get(__ret__, 'client_version'),
340
+ created=pulumi.get(__ret__, 'created'),
341
+ expires=pulumi.get(__ret__, 'expires'),
342
+ hostname=pulumi.get(__ret__, 'hostname'),
343
+ id=pulumi.get(__ret__, 'id'),
344
+ is_external=pulumi.get(__ret__, 'is_external'),
345
+ key_expiry_disabled=pulumi.get(__ret__, 'key_expiry_disabled'),
346
+ last_seen=pulumi.get(__ret__, 'last_seen'),
347
+ machine_key=pulumi.get(__ret__, 'machine_key'),
348
+ name=pulumi.get(__ret__, 'name'),
349
+ node_id=pulumi.get(__ret__, 'node_id'),
350
+ node_key=pulumi.get(__ret__, 'node_key'),
351
+ os=pulumi.get(__ret__, 'os'),
352
+ tags=pulumi.get(__ret__, 'tags'),
353
+ tailnet_lock_error=pulumi.get(__ret__, 'tailnet_lock_error'),
354
+ tailnet_lock_key=pulumi.get(__ret__, 'tailnet_lock_key'),
355
+ update_available=pulumi.get(__ret__, 'update_available'),
356
+ user=pulumi.get(__ret__, 'user'),
357
+ wait_for=pulumi.get(__ret__, 'wait_for'))
358
+ def get_device_output(hostname: Optional[pulumi.Input[Optional[_builtins.str]]] = None,
359
+ name: Optional[pulumi.Input[Optional[_builtins.str]]] = None,
360
+ wait_for: Optional[pulumi.Input[Optional[_builtins.str]]] = None,
361
+ opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetDeviceResult]:
362
+ """
363
+ The device data source describes a single device in a tailnet
364
+
365
+ ## Example Usage
366
+
367
+ ```python
368
+ import pulumi
369
+ import pulumi_tailscale as tailscale
370
+
371
+ sample_device = tailscale.get_device(name="device1.example.ts.net",
372
+ wait_for="60s")
373
+ sample_device2 = tailscale.get_device(hostname="device2",
374
+ wait_for="60s")
375
+ ```
376
+
377
+
378
+ :param _builtins.str hostname: The short hostname of the device
379
+ :param _builtins.str name: The full name of the device (e.g. `hostname.domain.ts.net`)
380
+ :param _builtins.str wait_for: If specified, the provider will make multiple attempts to obtain the data source until the wait_for duration is reached. Retries are made every second so this value should be greater than 1s
381
+ """
382
+ __args__ = dict()
383
+ __args__['hostname'] = hostname
384
+ __args__['name'] = name
385
+ __args__['waitFor'] = wait_for
386
+ opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
387
+ __ret__ = pulumi.runtime.invoke_output('tailscale:index/getDevice:getDevice', __args__, opts=opts, typ=GetDeviceResult)
388
+ return __ret__.apply(lambda __response__: GetDeviceResult(
389
+ addresses=pulumi.get(__response__, 'addresses'),
390
+ authorized=pulumi.get(__response__, 'authorized'),
391
+ blocks_incoming_connections=pulumi.get(__response__, 'blocks_incoming_connections'),
392
+ client_version=pulumi.get(__response__, 'client_version'),
393
+ created=pulumi.get(__response__, 'created'),
394
+ expires=pulumi.get(__response__, 'expires'),
395
+ hostname=pulumi.get(__response__, 'hostname'),
396
+ id=pulumi.get(__response__, 'id'),
397
+ is_external=pulumi.get(__response__, 'is_external'),
398
+ key_expiry_disabled=pulumi.get(__response__, 'key_expiry_disabled'),
399
+ last_seen=pulumi.get(__response__, 'last_seen'),
400
+ machine_key=pulumi.get(__response__, 'machine_key'),
401
+ name=pulumi.get(__response__, 'name'),
402
+ node_id=pulumi.get(__response__, 'node_id'),
403
+ node_key=pulumi.get(__response__, 'node_key'),
404
+ os=pulumi.get(__response__, 'os'),
405
+ tags=pulumi.get(__response__, 'tags'),
406
+ tailnet_lock_error=pulumi.get(__response__, 'tailnet_lock_error'),
407
+ tailnet_lock_key=pulumi.get(__response__, 'tailnet_lock_key'),
408
+ update_available=pulumi.get(__response__, 'update_available'),
409
+ user=pulumi.get(__response__, 'user'),
410
+ wait_for=pulumi.get(__response__, 'wait_for')))
@@ -53,7 +53,7 @@ class GetUsersResult:
53
53
  @pulumi.getter
54
54
  def role(self) -> Optional[_builtins.str]:
55
55
  """
56
- Filters the users list to elements whose role is the provided value.
56
+ Filter the results to only include users with a specific role. Valid values are `owner`, `member`, `admin`, `it-admin`, `network-admin`, `billing-admin`, and `auditor`.
57
57
  """
58
58
  return pulumi.get(self, "role")
59
59
 
@@ -61,7 +61,7 @@ class GetUsersResult:
61
61
  @pulumi.getter
62
62
  def type(self) -> Optional[_builtins.str]:
63
63
  """
64
- Filters the users list to elements whose type is the provided value.
64
+ Filter the results to only include users of a specific type. Valid values are `member` or `shared`.
65
65
  """
66
66
  return pulumi.get(self, "type")
67
67
 
@@ -102,8 +102,8 @@ def get_users(role: Optional[_builtins.str] = None,
102
102
  ```
103
103
 
104
104
 
105
- :param _builtins.str role: Filters the users list to elements whose role is the provided value.
106
- :param _builtins.str type: Filters the users list to elements whose type is the provided value.
105
+ :param _builtins.str role: Filter the results to only include users with a specific role. Valid values are `owner`, `member`, `admin`, `it-admin`, `network-admin`, `billing-admin`, and `auditor`.
106
+ :param _builtins.str type: Filter the results to only include users of a specific type. Valid values are `member` or `shared`.
107
107
  """
108
108
  __args__ = dict()
109
109
  __args__['role'] = role
@@ -132,8 +132,8 @@ def get_users_output(role: Optional[pulumi.Input[Optional[_builtins.str]]] = Non
132
132
  ```
133
133
 
134
134
 
135
- :param _builtins.str role: Filters the users list to elements whose role is the provided value.
136
- :param _builtins.str type: Filters the users list to elements whose type is the provided value.
135
+ :param _builtins.str role: Filter the results to only include users with a specific role. Valid values are `owner`, `member`, `admin`, `it-admin`, `network-admin`, `billing-admin`, and `auditor`.
136
+ :param _builtins.str type: Filter the results to only include users of a specific type. Valid values are `member` or `shared`.
137
137
  """
138
138
  __args__ = dict()
139
139
  __args__['role'] = role