pulumi-tailscale 1.0.0a1754635854__tar.gz → 1.0.0a1764138241__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.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/PKG-INFO +1 -1
  2. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/__init__.py +9 -0
  3. pulumi_tailscale-1.0.0a1764138241/pulumi_tailscale/_inputs.py +278 -0
  4. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/acl.py +12 -8
  5. pulumi_tailscale-1.0.0a1764138241/pulumi_tailscale/config/__init__.pyi +56 -0
  6. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/config/vars.py +13 -13
  7. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/contacts.py +4 -0
  8. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_authorization.py +4 -0
  9. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_key.py +4 -0
  10. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_subnet_routes.py +4 -0
  11. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_tags.py +4 -0
  12. pulumi_tailscale-1.0.0a1764138241/pulumi_tailscale/dns_configuration.py +443 -0
  13. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_nameservers.py +4 -0
  14. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_preferences.py +4 -0
  15. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_search_paths.py +4 -0
  16. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_split_nameservers.py +4 -0
  17. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/logstream_configuration.py +4 -0
  18. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/oauth_client.py +4 -0
  19. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/outputs.py +127 -0
  20. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/posture_integration.py +4 -0
  21. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/provider.py +52 -50
  22. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/pulumi-plugin.json +1 -1
  23. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/tailnet_settings.py +62 -9
  24. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/webhook.py +4 -0
  25. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/PKG-INFO +1 -1
  26. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/SOURCES.txt +1 -0
  27. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pyproject.toml +1 -1
  28. pulumi_tailscale-1.0.0a1754635854/pulumi_tailscale/_inputs.py +0 -120
  29. pulumi_tailscale-1.0.0a1754635854/pulumi_tailscale/config/__init__.pyi +0 -58
  30. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/README.md +0 -0
  31. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/_utilities.py +0 -0
  32. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/aws_external_id.py +0 -0
  33. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/config/__init__.py +0 -0
  34. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get4_via6.py +0 -0
  35. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_acl.py +0 -0
  36. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_device.py +0 -0
  37. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_devices.py +0 -0
  38. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_user.py +0 -0
  39. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_users.py +0 -0
  40. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/py.typed +0 -0
  41. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/tailnet_key.py +0 -0
  42. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/dependency_links.txt +0 -0
  43. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/requires.txt +0 -0
  44. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/top_level.txt +0 -0
  45. {pulumi_tailscale-1.0.0a1754635854 → pulumi_tailscale-1.0.0a1764138241}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulumi_tailscale
3
- Version: 1.0.0a1754635854
3
+ Version: 1.0.0a1764138241
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
@@ -13,6 +13,7 @@ from .device_authorization import *
13
13
  from .device_key import *
14
14
  from .device_subnet_routes import *
15
15
  from .device_tags import *
16
+ from .dns_configuration import *
16
17
  from .dns_nameservers import *
17
18
  from .dns_preferences import *
18
19
  from .dns_search_paths import *
@@ -99,6 +100,14 @@ _utilities.register(
99
100
  "tailscale:index/deviceTags:DeviceTags": "DeviceTags"
100
101
  }
101
102
  },
103
+ {
104
+ "pkg": "tailscale",
105
+ "mod": "index/dnsConfiguration",
106
+ "fqn": "pulumi_tailscale",
107
+ "classes": {
108
+ "tailscale:index/dnsConfiguration:DnsConfiguration": "DnsConfiguration"
109
+ }
110
+ },
102
111
  {
103
112
  "pkg": "tailscale",
104
113
  "mod": "index/dnsNameservers",
@@ -0,0 +1,278 @@
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
+ 'ContactsAccountArgs',
19
+ 'ContactsAccountArgsDict',
20
+ 'ContactsSecurityArgs',
21
+ 'ContactsSecurityArgsDict',
22
+ 'ContactsSupportArgs',
23
+ 'ContactsSupportArgsDict',
24
+ 'DnsConfigurationNameserverArgs',
25
+ 'DnsConfigurationNameserverArgsDict',
26
+ 'DnsConfigurationSplitDnArgs',
27
+ 'DnsConfigurationSplitDnArgsDict',
28
+ 'DnsConfigurationSplitDnNameserverArgs',
29
+ 'DnsConfigurationSplitDnNameserverArgsDict',
30
+ ]
31
+
32
+ MYPY = False
33
+
34
+ if not MYPY:
35
+ class ContactsAccountArgsDict(TypedDict):
36
+ email: pulumi.Input[_builtins.str]
37
+ """
38
+ Email address to send communications to
39
+ """
40
+ elif False:
41
+ ContactsAccountArgsDict: TypeAlias = Mapping[str, Any]
42
+
43
+ @pulumi.input_type
44
+ class ContactsAccountArgs:
45
+ def __init__(__self__, *,
46
+ email: pulumi.Input[_builtins.str]):
47
+ """
48
+ :param pulumi.Input[_builtins.str] email: Email address to send communications to
49
+ """
50
+ pulumi.set(__self__, "email", email)
51
+
52
+ @_builtins.property
53
+ @pulumi.getter
54
+ def email(self) -> pulumi.Input[_builtins.str]:
55
+ """
56
+ Email address to send communications to
57
+ """
58
+ return pulumi.get(self, "email")
59
+
60
+ @email.setter
61
+ def email(self, value: pulumi.Input[_builtins.str]):
62
+ pulumi.set(self, "email", value)
63
+
64
+
65
+ if not MYPY:
66
+ class ContactsSecurityArgsDict(TypedDict):
67
+ email: pulumi.Input[_builtins.str]
68
+ """
69
+ Email address to send communications to
70
+ """
71
+ elif False:
72
+ ContactsSecurityArgsDict: TypeAlias = Mapping[str, Any]
73
+
74
+ @pulumi.input_type
75
+ class ContactsSecurityArgs:
76
+ def __init__(__self__, *,
77
+ email: pulumi.Input[_builtins.str]):
78
+ """
79
+ :param pulumi.Input[_builtins.str] email: Email address to send communications to
80
+ """
81
+ pulumi.set(__self__, "email", email)
82
+
83
+ @_builtins.property
84
+ @pulumi.getter
85
+ def email(self) -> pulumi.Input[_builtins.str]:
86
+ """
87
+ Email address to send communications to
88
+ """
89
+ return pulumi.get(self, "email")
90
+
91
+ @email.setter
92
+ def email(self, value: pulumi.Input[_builtins.str]):
93
+ pulumi.set(self, "email", value)
94
+
95
+
96
+ if not MYPY:
97
+ class ContactsSupportArgsDict(TypedDict):
98
+ email: pulumi.Input[_builtins.str]
99
+ """
100
+ Email address to send communications to
101
+ """
102
+ elif False:
103
+ ContactsSupportArgsDict: TypeAlias = Mapping[str, Any]
104
+
105
+ @pulumi.input_type
106
+ class ContactsSupportArgs:
107
+ def __init__(__self__, *,
108
+ email: pulumi.Input[_builtins.str]):
109
+ """
110
+ :param pulumi.Input[_builtins.str] email: Email address to send communications to
111
+ """
112
+ pulumi.set(__self__, "email", email)
113
+
114
+ @_builtins.property
115
+ @pulumi.getter
116
+ def email(self) -> pulumi.Input[_builtins.str]:
117
+ """
118
+ Email address to send communications to
119
+ """
120
+ return pulumi.get(self, "email")
121
+
122
+ @email.setter
123
+ def email(self, value: pulumi.Input[_builtins.str]):
124
+ pulumi.set(self, "email", value)
125
+
126
+
127
+ if not MYPY:
128
+ class DnsConfigurationNameserverArgsDict(TypedDict):
129
+ address: pulumi.Input[_builtins.str]
130
+ """
131
+ The nameserver's IPv4 or IPv6 address
132
+ """
133
+ use_with_exit_node: NotRequired[pulumi.Input[_builtins.bool]]
134
+ """
135
+ This nameserver will continue to be used when an exit node is selected (requires Tailscale v1.88.1 or later). Defaults to false.
136
+ """
137
+ elif False:
138
+ DnsConfigurationNameserverArgsDict: TypeAlias = Mapping[str, Any]
139
+
140
+ @pulumi.input_type
141
+ class DnsConfigurationNameserverArgs:
142
+ def __init__(__self__, *,
143
+ address: pulumi.Input[_builtins.str],
144
+ use_with_exit_node: Optional[pulumi.Input[_builtins.bool]] = None):
145
+ """
146
+ :param pulumi.Input[_builtins.str] address: The nameserver's IPv4 or IPv6 address
147
+ :param pulumi.Input[_builtins.bool] use_with_exit_node: This nameserver will continue to be used when an exit node is selected (requires Tailscale v1.88.1 or later). Defaults to false.
148
+ """
149
+ pulumi.set(__self__, "address", address)
150
+ if use_with_exit_node is not None:
151
+ pulumi.set(__self__, "use_with_exit_node", use_with_exit_node)
152
+
153
+ @_builtins.property
154
+ @pulumi.getter
155
+ def address(self) -> pulumi.Input[_builtins.str]:
156
+ """
157
+ The nameserver's IPv4 or IPv6 address
158
+ """
159
+ return pulumi.get(self, "address")
160
+
161
+ @address.setter
162
+ def address(self, value: pulumi.Input[_builtins.str]):
163
+ pulumi.set(self, "address", value)
164
+
165
+ @_builtins.property
166
+ @pulumi.getter(name="useWithExitNode")
167
+ def use_with_exit_node(self) -> Optional[pulumi.Input[_builtins.bool]]:
168
+ """
169
+ This nameserver will continue to be used when an exit node is selected (requires Tailscale v1.88.1 or later). Defaults to false.
170
+ """
171
+ return pulumi.get(self, "use_with_exit_node")
172
+
173
+ @use_with_exit_node.setter
174
+ def use_with_exit_node(self, value: Optional[pulumi.Input[_builtins.bool]]):
175
+ pulumi.set(self, "use_with_exit_node", value)
176
+
177
+
178
+ if not MYPY:
179
+ class DnsConfigurationSplitDnArgsDict(TypedDict):
180
+ domain: pulumi.Input[_builtins.str]
181
+ """
182
+ The nameservers will be used only for this domain.
183
+ """
184
+ nameservers: pulumi.Input[Sequence[pulumi.Input['DnsConfigurationSplitDnNameserverArgsDict']]]
185
+ """
186
+ Set the nameservers used by devices on your network to resolve DNS queries.
187
+ """
188
+ elif False:
189
+ DnsConfigurationSplitDnArgsDict: TypeAlias = Mapping[str, Any]
190
+
191
+ @pulumi.input_type
192
+ class DnsConfigurationSplitDnArgs:
193
+ def __init__(__self__, *,
194
+ domain: pulumi.Input[_builtins.str],
195
+ nameservers: pulumi.Input[Sequence[pulumi.Input['DnsConfigurationSplitDnNameserverArgs']]]):
196
+ """
197
+ :param pulumi.Input[_builtins.str] domain: The nameservers will be used only for this domain.
198
+ :param pulumi.Input[Sequence[pulumi.Input['DnsConfigurationSplitDnNameserverArgs']]] nameservers: Set the nameservers used by devices on your network to resolve DNS queries.
199
+ """
200
+ pulumi.set(__self__, "domain", domain)
201
+ pulumi.set(__self__, "nameservers", nameservers)
202
+
203
+ @_builtins.property
204
+ @pulumi.getter
205
+ def domain(self) -> pulumi.Input[_builtins.str]:
206
+ """
207
+ The nameservers will be used only for this domain.
208
+ """
209
+ return pulumi.get(self, "domain")
210
+
211
+ @domain.setter
212
+ def domain(self, value: pulumi.Input[_builtins.str]):
213
+ pulumi.set(self, "domain", value)
214
+
215
+ @_builtins.property
216
+ @pulumi.getter
217
+ def nameservers(self) -> pulumi.Input[Sequence[pulumi.Input['DnsConfigurationSplitDnNameserverArgs']]]:
218
+ """
219
+ Set the nameservers used by devices on your network to resolve DNS queries.
220
+ """
221
+ return pulumi.get(self, "nameservers")
222
+
223
+ @nameservers.setter
224
+ def nameservers(self, value: pulumi.Input[Sequence[pulumi.Input['DnsConfigurationSplitDnNameserverArgs']]]):
225
+ pulumi.set(self, "nameservers", value)
226
+
227
+
228
+ if not MYPY:
229
+ class DnsConfigurationSplitDnNameserverArgsDict(TypedDict):
230
+ address: pulumi.Input[_builtins.str]
231
+ """
232
+ The nameserver's IPv4 or IPv6 address.
233
+ """
234
+ use_with_exit_node: NotRequired[pulumi.Input[_builtins.bool]]
235
+ """
236
+ This nameserver will continue to be used when an exit node is selected (requires Tailscale v1.88.1 or later). Defaults to false.
237
+ """
238
+ elif False:
239
+ DnsConfigurationSplitDnNameserverArgsDict: TypeAlias = Mapping[str, Any]
240
+
241
+ @pulumi.input_type
242
+ class DnsConfigurationSplitDnNameserverArgs:
243
+ def __init__(__self__, *,
244
+ address: pulumi.Input[_builtins.str],
245
+ use_with_exit_node: Optional[pulumi.Input[_builtins.bool]] = None):
246
+ """
247
+ :param pulumi.Input[_builtins.str] address: The nameserver's IPv4 or IPv6 address.
248
+ :param pulumi.Input[_builtins.bool] use_with_exit_node: This nameserver will continue to be used when an exit node is selected (requires Tailscale v1.88.1 or later). Defaults to false.
249
+ """
250
+ pulumi.set(__self__, "address", address)
251
+ if use_with_exit_node is not None:
252
+ pulumi.set(__self__, "use_with_exit_node", use_with_exit_node)
253
+
254
+ @_builtins.property
255
+ @pulumi.getter
256
+ def address(self) -> pulumi.Input[_builtins.str]:
257
+ """
258
+ The nameserver's IPv4 or IPv6 address.
259
+ """
260
+ return pulumi.get(self, "address")
261
+
262
+ @address.setter
263
+ def address(self, value: pulumi.Input[_builtins.str]):
264
+ pulumi.set(self, "address", value)
265
+
266
+ @_builtins.property
267
+ @pulumi.getter(name="useWithExitNode")
268
+ def use_with_exit_node(self) -> Optional[pulumi.Input[_builtins.bool]]:
269
+ """
270
+ This nameserver will continue to be used when an exit node is selected (requires Tailscale v1.88.1 or later). Defaults to false.
271
+ """
272
+ return pulumi.get(self, "use_with_exit_node")
273
+
274
+ @use_with_exit_node.setter
275
+ def use_with_exit_node(self, value: Optional[pulumi.Input[_builtins.bool]]):
276
+ pulumi.set(self, "use_with_exit_node", value)
277
+
278
+
@@ -158,12 +158,12 @@ class Acl(pulumi.CustomResource):
158
158
  }))
159
159
  as_hujson = tailscale.Acl("as_hujson", acl=\"\"\" {
160
160
  // Comments in HuJSON policy are preserved when the policy is applied.
161
- "acls": [
161
+ \\"acls\\": [
162
162
  {
163
163
  // Allow all users access to all ports.
164
- action = "accept",
165
- users = ["*"],
166
- ports = ["*:*"],
164
+ action = \\"accept\\",
165
+ users = [\\"*\\"],
166
+ ports = [\\"*:*\\"],
167
167
  },
168
168
  ],
169
169
  }
@@ -172,6 +172,8 @@ class Acl(pulumi.CustomResource):
172
172
 
173
173
  ## Import
174
174
 
175
+ The `pulumi import` command can be used, for example:
176
+
175
177
  ID doesn't matter.
176
178
 
177
179
  ```sh
@@ -211,12 +213,12 @@ class Acl(pulumi.CustomResource):
211
213
  }))
212
214
  as_hujson = tailscale.Acl("as_hujson", acl=\"\"\" {
213
215
  // Comments in HuJSON policy are preserved when the policy is applied.
214
- "acls": [
216
+ \\"acls\\": [
215
217
  {
216
218
  // Allow all users access to all ports.
217
- action = "accept",
218
- users = ["*"],
219
- ports = ["*:*"],
219
+ action = \\"accept\\",
220
+ users = [\\"*\\"],
221
+ ports = [\\"*:*\\"],
220
222
  },
221
223
  ],
222
224
  }
@@ -225,6 +227,8 @@ class Acl(pulumi.CustomResource):
225
227
 
226
228
  ## Import
227
229
 
230
+ The `pulumi import` command can be used, for example:
231
+
228
232
  ID doesn't matter.
229
233
 
230
234
  ```sh
@@ -0,0 +1,56 @@
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
+ apiKey: Optional[str]
18
+ """
19
+ The API key to use for authenticating requests to the API. Can be set via the TAILSCALE_API_KEY environment variable. Conflicts with 'oauth_client_id' and 'oauth_client_secret'.
20
+ """
21
+
22
+ baseUrl: Optional[str]
23
+ """
24
+ The base URL of the Tailscale API. Defaults to https://api.tailscale.com. Can be set via the TAILSCALE_BASE_URL environment variable.
25
+ """
26
+
27
+ identityToken: Optional[str]
28
+ """
29
+ The jwt identity token to exchange for a Tailscale API token when using a federated identity client. Can be set via the TAILSCALE_IDENTITY_TOKEN environment variable. Conflicts with 'api_key' and 'oauth_client_secret'.
30
+ """
31
+
32
+ oauthClientId: Optional[str]
33
+ """
34
+ The OAuth application's ID when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_ID environment variable. Either 'oauth_client_secret' or 'identity_token' must be set alongside 'oauth_client_id'. Conflicts with 'api_key'.
35
+ """
36
+
37
+ oauthClientSecret: Optional[str]
38
+ """
39
+ The OAuth application's secret when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_SECRET environment variable. Conflicts with 'api_key' and 'identity_token'.
40
+ """
41
+
42
+ scopes: Optional[str]
43
+ """
44
+ The OAuth 2.0 scopes to request when generating the access token using the supplied OAuth client credentials. See https://tailscale.com/kb/1215/oauth-clients/#scopes for available scopes. Only valid when both 'oauth_client_id' and 'oauth_client_secret' are set.
45
+ """
46
+
47
+ tailnet: Optional[str]
48
+ """
49
+ The tailnet ID. Tailnets created before Oct 2025 can still use the legacy ID, but the Tailnet ID is the preferred identifier. Can be set via the TAILSCALE_TAILNET environment variable. Default is the tailnet that owns API credentials passed to the provider.
50
+ """
51
+
52
+ userAgent: Optional[str]
53
+ """
54
+ User-Agent header for API requests.
55
+ """
56
+
@@ -23,49 +23,49 @@ class _ExportableConfig(types.ModuleType):
23
23
  @_builtins.property
24
24
  def api_key(self) -> Optional[str]:
25
25
  """
26
- The API key to use for authenticating requests to the API. Can be set via the TAILSCALE_API_KEY environment variable.
27
- Conflicts with 'oauth_client_id' and 'oauth_client_secret'.
26
+ The API key to use for authenticating requests to the API. Can be set via the TAILSCALE_API_KEY environment variable. Conflicts with 'oauth_client_id' and 'oauth_client_secret'.
28
27
  """
29
28
  return __config__.get('apiKey')
30
29
 
31
30
  @_builtins.property
32
31
  def base_url(self) -> Optional[str]:
33
32
  """
34
- The base URL of the Tailscale API. Defaults to https://api.tailscale.com. Can be set via the TAILSCALE_BASE_URL
35
- environment variable.
33
+ The base URL of the Tailscale API. Defaults to https://api.tailscale.com. Can be set via the TAILSCALE_BASE_URL environment variable.
36
34
  """
37
35
  return __config__.get('baseUrl')
38
36
 
37
+ @_builtins.property
38
+ def identity_token(self) -> Optional[str]:
39
+ """
40
+ The jwt identity token to exchange for a Tailscale API token when using a federated identity client. Can be set via the TAILSCALE_IDENTITY_TOKEN environment variable. Conflicts with 'api_key' and 'oauth_client_secret'.
41
+ """
42
+ return __config__.get('identityToken')
43
+
39
44
  @_builtins.property
40
45
  def oauth_client_id(self) -> Optional[str]:
41
46
  """
42
- The OAuth application's ID when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_ID environment
43
- variable. Both 'oauth_client_id' and 'oauth_client_secret' must be set. Conflicts with 'api_key'.
47
+ The OAuth application's ID when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_ID environment variable. Either 'oauth_client_secret' or 'identity_token' must be set alongside 'oauth_client_id'. Conflicts with 'api_key'.
44
48
  """
45
49
  return __config__.get('oauthClientId')
46
50
 
47
51
  @_builtins.property
48
52
  def oauth_client_secret(self) -> Optional[str]:
49
53
  """
50
- The OAuth application's secret when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_SECRET
51
- environment variable. Both 'oauth_client_id' and 'oauth_client_secret' must be set. Conflicts with 'api_key'.
54
+ The OAuth application's secret when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_SECRET environment variable. Conflicts with 'api_key' and 'identity_token'.
52
55
  """
53
56
  return __config__.get('oauthClientSecret')
54
57
 
55
58
  @_builtins.property
56
59
  def scopes(self) -> Optional[str]:
57
60
  """
58
- The OAuth 2.0 scopes to request when for the access token generated using the supplied OAuth client credentials. See
59
- https://tailscale.com/kb/1215/oauth-clients/#scopes for available scopes. Only valid when both 'oauth_client_id' and
60
- 'oauth_client_secret' are set.
61
+ The OAuth 2.0 scopes to request when generating the access token using the supplied OAuth client credentials. See https://tailscale.com/kb/1215/oauth-clients/#scopes for available scopes. Only valid when both 'oauth_client_id' and 'oauth_client_secret' are set.
61
62
  """
62
63
  return __config__.get('scopes')
63
64
 
64
65
  @_builtins.property
65
66
  def tailnet(self) -> Optional[str]:
66
67
  """
67
- The organization name of the Tailnet in which to perform actions. Can be set via the TAILSCALE_TAILNET environment
68
- variable. Default is the tailnet that owns API credentials passed to the provider.
68
+ The tailnet ID. Tailnets created before Oct 2025 can still use the legacy ID, but the Tailnet ID is the preferred identifier. Can be set via the TAILSCALE_TAILNET environment variable. Default is the tailnet that owns API credentials passed to the provider.
69
69
  """
70
70
  return __config__.get('tailnet')
71
71
 
@@ -158,6 +158,8 @@ class Contacts(pulumi.CustomResource):
158
158
 
159
159
  ## Import
160
160
 
161
+ The `pulumi import` command can be used, for example:
162
+
161
163
  ID doesn't matter.
162
164
 
163
165
  ```sh
@@ -197,6 +199,8 @@ class Contacts(pulumi.CustomResource):
197
199
 
198
200
  ## Import
199
201
 
202
+ The `pulumi import` command can be used, for example:
203
+
200
204
  ID doesn't matter.
201
205
 
202
206
  ```sh
@@ -120,6 +120,8 @@ class DeviceAuthorization(pulumi.CustomResource):
120
120
 
121
121
  ## Import
122
122
 
123
+ The `pulumi import` command can be used, for example:
124
+
123
125
  Device authorization can be imported using the node ID (preferred), e.g.,
124
126
 
125
127
  ```sh
@@ -160,6 +162,8 @@ class DeviceAuthorization(pulumi.CustomResource):
160
162
 
161
163
  ## Import
162
164
 
165
+ The `pulumi import` command can be used, for example:
166
+
163
167
  Device authorization can be imported using the node ID (preferred), e.g.,
164
168
 
165
169
  ```sh
@@ -121,6 +121,8 @@ class DeviceKey(pulumi.CustomResource):
121
121
 
122
122
  ## Import
123
123
 
124
+ The `pulumi import` command can be used, for example:
125
+
124
126
  Device key can be imported using the node ID (preferred), e.g.,
125
127
 
126
128
  ```sh
@@ -161,6 +163,8 @@ class DeviceKey(pulumi.CustomResource):
161
163
 
162
164
  ## Import
163
165
 
166
+ The `pulumi import` command can be used, for example:
167
+
164
168
  Device key can be imported using the node ID (preferred), e.g.,
165
169
 
166
170
  ```sh
@@ -128,6 +128,8 @@ class DeviceSubnetRoutes(pulumi.CustomResource):
128
128
 
129
129
  ## Import
130
130
 
131
+ The `pulumi import` command can be used, for example:
132
+
131
133
  Device subnet rules can be imported using the node ID (preferred), e.g.,
132
134
 
133
135
  ```sh
@@ -176,6 +178,8 @@ class DeviceSubnetRoutes(pulumi.CustomResource):
176
178
 
177
179
  ## Import
178
180
 
181
+ The `pulumi import` command can be used, for example:
182
+
179
183
  Device subnet rules can be imported using the node ID (preferred), e.g.,
180
184
 
181
185
  ```sh
@@ -120,6 +120,8 @@ class DeviceTags(pulumi.CustomResource):
120
120
 
121
121
  ## Import
122
122
 
123
+ The `pulumi import` command can be used, for example:
124
+
123
125
  Device tags can be imported using the node ID (preferred), e.g.,
124
126
 
125
127
  ```sh
@@ -160,6 +162,8 @@ class DeviceTags(pulumi.CustomResource):
160
162
 
161
163
  ## Import
162
164
 
165
+ The `pulumi import` command can be used, for example:
166
+
163
167
  Device tags can be imported using the node ID (preferred), e.g.,
164
168
 
165
169
  ```sh