pulumi-tailscale 1.0.0a1759993309__tar.gz → 1.0.0a1769802536__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 (44) hide show
  1. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/PKG-INFO +1 -1
  2. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/__init__.py +9 -0
  3. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/acl.py +38 -38
  4. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/config/__init__.pyi +9 -4
  5. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/config/vars.py +11 -4
  6. pulumi_tailscale-1.0.0a1769802536/pulumi_tailscale/federated_identity.py +576 -0
  7. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/get_acl.py +6 -2
  8. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/oauth_client.py +46 -18
  9. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/provider.py +44 -16
  10. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/pulumi-plugin.json +1 -1
  11. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/tailnet_settings.py +58 -9
  12. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale.egg-info/PKG-INFO +1 -1
  13. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale.egg-info/SOURCES.txt +1 -0
  14. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pyproject.toml +1 -1
  15. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/README.md +0 -0
  16. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/_inputs.py +0 -0
  17. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/_utilities.py +0 -0
  18. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/aws_external_id.py +0 -0
  19. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/config/__init__.py +0 -0
  20. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/contacts.py +0 -0
  21. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/device_authorization.py +0 -0
  22. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/device_key.py +0 -0
  23. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/device_subnet_routes.py +0 -0
  24. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/device_tags.py +0 -0
  25. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/dns_configuration.py +0 -0
  26. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/dns_nameservers.py +0 -0
  27. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/dns_preferences.py +0 -0
  28. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/dns_search_paths.py +0 -0
  29. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/dns_split_nameservers.py +0 -0
  30. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/get4_via6.py +0 -0
  31. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/get_device.py +0 -0
  32. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/get_devices.py +0 -0
  33. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/get_user.py +0 -0
  34. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/get_users.py +0 -0
  35. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/logstream_configuration.py +0 -0
  36. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/outputs.py +0 -0
  37. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/posture_integration.py +0 -0
  38. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/py.typed +0 -0
  39. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/tailnet_key.py +0 -0
  40. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale/webhook.py +0 -0
  41. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale.egg-info/dependency_links.txt +0 -0
  42. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale.egg-info/requires.txt +0 -0
  43. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/pulumi_tailscale.egg-info/top_level.txt +0 -0
  44. {pulumi_tailscale-1.0.0a1759993309 → pulumi_tailscale-1.0.0a1769802536}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulumi_tailscale
3
- Version: 1.0.0a1759993309
3
+ Version: 1.0.0a1769802536
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
@@ -18,6 +18,7 @@ from .dns_nameservers import *
18
18
  from .dns_preferences import *
19
19
  from .dns_search_paths import *
20
20
  from .dns_split_nameservers import *
21
+ from .federated_identity import *
21
22
  from .get4_via6 import *
22
23
  from .get_acl import *
23
24
  from .get_device import *
@@ -140,6 +141,14 @@ _utilities.register(
140
141
  "tailscale:index/dnsSplitNameservers:DnsSplitNameservers": "DnsSplitNameservers"
141
142
  }
142
143
  },
144
+ {
145
+ "pkg": "tailscale",
146
+ "mod": "index/federatedIdentity",
147
+ "fqn": "pulumi_tailscale",
148
+ "classes": {
149
+ "tailscale:index/federatedIdentity:FederatedIdentity": "FederatedIdentity"
150
+ }
151
+ },
143
152
  {
144
153
  "pkg": "tailscale",
145
154
  "mod": "index/logstreamConfiguration",
@@ -25,8 +25,8 @@ class AclArgs:
25
25
  """
26
26
  The set of arguments for constructing a Acl resource.
27
27
  :param pulumi.Input[_builtins.str] acl: The policy that defines which devices and users are allowed to connect in your network. Can be either a JSON or a HuJSON string.
28
- :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
29
- :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
28
+ :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
29
+ :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
30
30
  """
31
31
  pulumi.set(__self__, "acl", acl)
32
32
  if overwrite_existing_content is not None:
@@ -50,7 +50,7 @@ class AclArgs:
50
50
  @pulumi.getter(name="overwriteExistingContent")
51
51
  def overwrite_existing_content(self) -> Optional[pulumi.Input[_builtins.bool]]:
52
52
  """
53
- If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
53
+ If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
54
54
  """
55
55
  return pulumi.get(self, "overwrite_existing_content")
56
56
 
@@ -62,7 +62,7 @@ class AclArgs:
62
62
  @pulumi.getter(name="resetAclOnDestroy")
63
63
  def reset_acl_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]:
64
64
  """
65
- If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
65
+ If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
66
66
  """
67
67
  return pulumi.get(self, "reset_acl_on_destroy")
68
68
 
@@ -80,8 +80,8 @@ class _AclState:
80
80
  """
81
81
  Input properties used for looking up and filtering Acl resources.
82
82
  :param pulumi.Input[_builtins.str] acl: The policy that defines which devices and users are allowed to connect in your network. Can be either a JSON or a HuJSON string.
83
- :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
84
- :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
83
+ :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
84
+ :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
85
85
  """
86
86
  if acl is not None:
87
87
  pulumi.set(__self__, "acl", acl)
@@ -106,7 +106,7 @@ class _AclState:
106
106
  @pulumi.getter(name="overwriteExistingContent")
107
107
  def overwrite_existing_content(self) -> Optional[pulumi.Input[_builtins.bool]]:
108
108
  """
109
- If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
109
+ If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
110
110
  """
111
111
  return pulumi.get(self, "overwrite_existing_content")
112
112
 
@@ -118,7 +118,7 @@ class _AclState:
118
118
  @pulumi.getter(name="resetAclOnDestroy")
119
119
  def reset_acl_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]:
120
120
  """
121
- If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
121
+ If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
122
122
  """
123
123
  return pulumi.get(self, "reset_acl_on_destroy")
124
124
 
@@ -138,9 +138,11 @@ class Acl(pulumi.CustomResource):
138
138
  reset_acl_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None,
139
139
  __props__=None):
140
140
  """
141
- The acl resource allows you to configure a Tailscale ACL. See https://tailscale.com/kb/1018/acls for more information. Note that this resource will completely overwrite existing ACL contents for a given tailnet.
141
+ The acl resource allows you to configure a Tailscale policy file. See https://tailscale.com/kb/1395/tailnet-policy-file for more information. Note that this resource will completely overwrite existing policy file contents for a given tailnet.
142
142
 
143
- If tests are defined in the ACL (the top-level "tests" section), ACL validation will occur before creation and update operations are applied.
143
+ If tests are defined in the policy file (the top-level "tests" section), policy file validation will occur before creation and update operations are applied.
144
+
145
+ > **Note:** The naming of this resource predates Tailscale's usage of the term "policy file" to refer to the centralized configuration file for a tailnet. This resource controls a tailnet's entire policy file and not just the ACLs section within it.
144
146
 
145
147
  ## Example Usage
146
148
 
@@ -150,20 +152,20 @@ class Acl(pulumi.CustomResource):
150
152
  import pulumi_tailscale as tailscale
151
153
 
152
154
  as_json = tailscale.Acl("as_json", acl=json.dumps({
153
- "acls": [{
154
- "action": "accept",
155
- "users": ["*"],
156
- "ports": ["*:*"],
155
+ "grants": [{
156
+ "src": ["*"],
157
+ "dst": ["*"],
158
+ "ip": ["*"],
157
159
  }],
158
160
  }))
159
161
  as_hujson = tailscale.Acl("as_hujson", acl=\"\"\" {
160
162
  // Comments in HuJSON policy are preserved when the policy is applied.
161
- "acls": [
163
+ \\"grants\\": [
162
164
  {
163
165
  // Allow all users access to all ports.
164
- action = "accept",
165
- users = ["*"],
166
- ports = ["*:*"],
166
+ \\"src\\" = [\\"*\\"],
167
+ \\"dst\\" = [\\"*\\"],
168
+ \\"ip\\" = [\\"*\\"],
167
169
  },
168
170
  ],
169
171
  }
@@ -172,8 +174,6 @@ class Acl(pulumi.CustomResource):
172
174
 
173
175
  ## Import
174
176
 
175
- The `pulumi import` command can be used, for example:
176
-
177
177
  ID doesn't matter.
178
178
 
179
179
  ```sh
@@ -183,8 +183,8 @@ class Acl(pulumi.CustomResource):
183
183
  :param str resource_name: The name of the resource.
184
184
  :param pulumi.ResourceOptions opts: Options for the resource.
185
185
  :param pulumi.Input[_builtins.str] acl: The policy that defines which devices and users are allowed to connect in your network. Can be either a JSON or a HuJSON string.
186
- :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
187
- :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
186
+ :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
187
+ :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
188
188
  """
189
189
  ...
190
190
  @overload
@@ -193,9 +193,11 @@ class Acl(pulumi.CustomResource):
193
193
  args: AclArgs,
194
194
  opts: Optional[pulumi.ResourceOptions] = None):
195
195
  """
196
- The acl resource allows you to configure a Tailscale ACL. See https://tailscale.com/kb/1018/acls for more information. Note that this resource will completely overwrite existing ACL contents for a given tailnet.
196
+ The acl resource allows you to configure a Tailscale policy file. See https://tailscale.com/kb/1395/tailnet-policy-file for more information. Note that this resource will completely overwrite existing policy file contents for a given tailnet.
197
197
 
198
- If tests are defined in the ACL (the top-level "tests" section), ACL validation will occur before creation and update operations are applied.
198
+ If tests are defined in the policy file (the top-level "tests" section), policy file validation will occur before creation and update operations are applied.
199
+
200
+ > **Note:** The naming of this resource predates Tailscale's usage of the term "policy file" to refer to the centralized configuration file for a tailnet. This resource controls a tailnet's entire policy file and not just the ACLs section within it.
199
201
 
200
202
  ## Example Usage
201
203
 
@@ -205,20 +207,20 @@ class Acl(pulumi.CustomResource):
205
207
  import pulumi_tailscale as tailscale
206
208
 
207
209
  as_json = tailscale.Acl("as_json", acl=json.dumps({
208
- "acls": [{
209
- "action": "accept",
210
- "users": ["*"],
211
- "ports": ["*:*"],
210
+ "grants": [{
211
+ "src": ["*"],
212
+ "dst": ["*"],
213
+ "ip": ["*"],
212
214
  }],
213
215
  }))
214
216
  as_hujson = tailscale.Acl("as_hujson", acl=\"\"\" {
215
217
  // Comments in HuJSON policy are preserved when the policy is applied.
216
- "acls": [
218
+ \\"grants\\": [
217
219
  {
218
220
  // Allow all users access to all ports.
219
- action = "accept",
220
- users = ["*"],
221
- ports = ["*:*"],
221
+ \\"src\\" = [\\"*\\"],
222
+ \\"dst\\" = [\\"*\\"],
223
+ \\"ip\\" = [\\"*\\"],
222
224
  },
223
225
  ],
224
226
  }
@@ -227,8 +229,6 @@ class Acl(pulumi.CustomResource):
227
229
 
228
230
  ## Import
229
231
 
230
- The `pulumi import` command can be used, for example:
231
-
232
232
  ID doesn't matter.
233
233
 
234
234
  ```sh
@@ -288,8 +288,8 @@ class Acl(pulumi.CustomResource):
288
288
  :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
289
289
  :param pulumi.ResourceOptions opts: Options for the resource.
290
290
  :param pulumi.Input[_builtins.str] acl: The policy that defines which devices and users are allowed to connect in your network. Can be either a JSON or a HuJSON string.
291
- :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
292
- :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
291
+ :param pulumi.Input[_builtins.bool] overwrite_existing_content: If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
292
+ :param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
293
293
  """
294
294
  opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
295
295
 
@@ -312,7 +312,7 @@ class Acl(pulumi.CustomResource):
312
312
  @pulumi.getter(name="overwriteExistingContent")
313
313
  def overwrite_existing_content(self) -> pulumi.Output[Optional[_builtins.bool]]:
314
314
  """
315
- If true, will skip requirement to import acl before allowing changes. Be careful, can cause ACL to be overwritten
315
+ If true, will skip requirement to import acl before allowing changes. Be careful, can cause the policy file to be overwritten
316
316
  """
317
317
  return pulumi.get(self, "overwrite_existing_content")
318
318
 
@@ -320,7 +320,7 @@ class Acl(pulumi.CustomResource):
320
320
  @pulumi.getter(name="resetAclOnDestroy")
321
321
  def reset_acl_on_destroy(self) -> pulumi.Output[Optional[_builtins.bool]]:
322
322
  """
323
- If true, will reset the ACL for the Tailnet to the default when this resource is destroyed
323
+ If true, will reset the policy file for the Tailnet to the default when this resource is destroyed
324
324
  """
325
325
  return pulumi.get(self, "reset_acl_on_destroy")
326
326
 
@@ -24,24 +24,29 @@ baseUrl: Optional[str]
24
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
25
  """
26
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
+
27
32
  oauthClientId: Optional[str]
28
33
  """
29
- The OAuth application's ID when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_ID environment variable. Both 'oauth_client_id' and 'oauth_client_secret' must be set. Conflicts with 'api_key'.
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'.
30
35
  """
31
36
 
32
37
  oauthClientSecret: Optional[str]
33
38
  """
34
- The OAuth application's secret when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_SECRET environment variable. Both 'oauth_client_id' and 'oauth_client_secret' must be set. Conflicts with 'api_key'.
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'.
35
40
  """
36
41
 
37
42
  scopes: Optional[str]
38
43
  """
39
- The OAuth 2.0 scopes to request when for the access token generated 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.
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.
40
45
  """
41
46
 
42
47
  tailnet: Optional[str]
43
48
  """
44
- The organization name of the Tailnet in which to perform actions. Can be set via the TAILSCALE_TAILNET environment variable. Default is the tailnet that owns API credentials passed to the provider.
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.
45
50
  """
46
51
 
47
52
  userAgent: Optional[str]
@@ -34,31 +34,38 @@ class _ExportableConfig(types.ModuleType):
34
34
  """
35
35
  return __config__.get('baseUrl')
36
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
+
37
44
  @_builtins.property
38
45
  def oauth_client_id(self) -> Optional[str]:
39
46
  """
40
- The OAuth application's ID when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_ID environment 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'.
41
48
  """
42
49
  return __config__.get('oauthClientId')
43
50
 
44
51
  @_builtins.property
45
52
  def oauth_client_secret(self) -> Optional[str]:
46
53
  """
47
- The OAuth application's secret when using OAuth client credentials. Can be set via the TAILSCALE_OAUTH_CLIENT_SECRET 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'.
48
55
  """
49
56
  return __config__.get('oauthClientSecret')
50
57
 
51
58
  @_builtins.property
52
59
  def scopes(self) -> Optional[str]:
53
60
  """
54
- The OAuth 2.0 scopes to request when for the access token generated 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
+ 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.
55
62
  """
56
63
  return __config__.get('scopes')
57
64
 
58
65
  @_builtins.property
59
66
  def tailnet(self) -> Optional[str]:
60
67
  """
61
- The organization name of the Tailnet in which to perform actions. Can be set via the TAILSCALE_TAILNET environment 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.
62
69
  """
63
70
  return __config__.get('tailnet')
64
71