pulumi-tailscale 1.0.0a1759907095__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 (43) hide show
  1. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/PKG-INFO +1 -1
  2. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/acl.py +8 -8
  3. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/config/__init__.pyi +9 -4
  4. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/config/vars.py +11 -4
  5. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/provider.py +44 -16
  6. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/pulumi-plugin.json +1 -1
  7. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/tailnet_settings.py +58 -9
  8. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/PKG-INFO +1 -1
  9. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pyproject.toml +1 -1
  10. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/README.md +0 -0
  11. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/__init__.py +0 -0
  12. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/_inputs.py +0 -0
  13. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/_utilities.py +0 -0
  14. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/aws_external_id.py +0 -0
  15. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/config/__init__.py +0 -0
  16. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/contacts.py +0 -0
  17. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_authorization.py +0 -0
  18. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_key.py +0 -0
  19. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_subnet_routes.py +0 -0
  20. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/device_tags.py +0 -0
  21. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_configuration.py +0 -0
  22. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_nameservers.py +0 -0
  23. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_preferences.py +0 -0
  24. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_search_paths.py +0 -0
  25. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/dns_split_nameservers.py +0 -0
  26. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get4_via6.py +0 -0
  27. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_acl.py +0 -0
  28. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_device.py +0 -0
  29. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_devices.py +0 -0
  30. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_user.py +0 -0
  31. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/get_users.py +0 -0
  32. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/logstream_configuration.py +0 -0
  33. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/oauth_client.py +0 -0
  34. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/outputs.py +0 -0
  35. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/posture_integration.py +0 -0
  36. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/py.typed +0 -0
  37. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/tailnet_key.py +0 -0
  38. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale/webhook.py +0 -0
  39. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/SOURCES.txt +0 -0
  40. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/dependency_links.txt +0 -0
  41. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/requires.txt +0 -0
  42. {pulumi_tailscale-1.0.0a1759907095 → pulumi_tailscale-1.0.0a1764138241}/pulumi_tailscale.egg-info/top_level.txt +0 -0
  43. {pulumi_tailscale-1.0.0a1759907095 → 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.0a1759907095
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
@@ -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
  }
@@ -213,12 +213,12 @@ class Acl(pulumi.CustomResource):
213
213
  }))
214
214
  as_hujson = tailscale.Acl("as_hujson", acl=\"\"\" {
215
215
  // Comments in HuJSON policy are preserved when the policy is applied.
216
- "acls": [
216
+ \\"acls\\": [
217
217
  {
218
218
  // Allow all users access to all ports.
219
- action = "accept",
220
- users = ["*"],
221
- ports = ["*:*"],
219
+ action = \\"accept\\",
220
+ users = [\\"*\\"],
221
+ ports = [\\"*:*\\"],
222
222
  },
223
223
  ],
224
224
  }
@@ -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
 
@@ -21,6 +21,7 @@ class ProviderArgs:
21
21
  def __init__(__self__, *,
22
22
  api_key: Optional[pulumi.Input[_builtins.str]] = None,
23
23
  base_url: Optional[pulumi.Input[_builtins.str]] = None,
24
+ identity_token: Optional[pulumi.Input[_builtins.str]] = None,
24
25
  oauth_client_id: Optional[pulumi.Input[_builtins.str]] = None,
25
26
  oauth_client_secret: Optional[pulumi.Input[_builtins.str]] = None,
26
27
  scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
@@ -30,16 +31,19 @@ class ProviderArgs:
30
31
  The set of arguments for constructing a Provider resource.
31
32
  :param pulumi.Input[_builtins.str] api_key: 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'.
32
33
  :param pulumi.Input[_builtins.str] base_url: The base URL of the Tailscale API. Defaults to https://api.tailscale.com. Can be set via the TAILSCALE_BASE_URL environment variable.
33
- :param pulumi.Input[_builtins.str] oauth_client_id: 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
- :param pulumi.Input[_builtins.str] oauth_client_secret: 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'.
35
- :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: 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.
36
- :param pulumi.Input[_builtins.str] tailnet: 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.
34
+ :param pulumi.Input[_builtins.str] identity_token: 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'.
35
+ :param pulumi.Input[_builtins.str] oauth_client_id: 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'.
36
+ :param pulumi.Input[_builtins.str] oauth_client_secret: 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'.
37
+ :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: 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.
38
+ :param pulumi.Input[_builtins.str] tailnet: 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.
37
39
  :param pulumi.Input[_builtins.str] user_agent: User-Agent header for API requests.
38
40
  """
39
41
  if api_key is not None:
40
42
  pulumi.set(__self__, "api_key", api_key)
41
43
  if base_url is not None:
42
44
  pulumi.set(__self__, "base_url", base_url)
45
+ if identity_token is not None:
46
+ pulumi.set(__self__, "identity_token", identity_token)
43
47
  if oauth_client_id is not None:
44
48
  pulumi.set(__self__, "oauth_client_id", oauth_client_id)
45
49
  if oauth_client_secret is not None:
@@ -75,11 +79,23 @@ class ProviderArgs:
75
79
  def base_url(self, value: Optional[pulumi.Input[_builtins.str]]):
76
80
  pulumi.set(self, "base_url", value)
77
81
 
82
+ @_builtins.property
83
+ @pulumi.getter(name="identityToken")
84
+ def identity_token(self) -> Optional[pulumi.Input[_builtins.str]]:
85
+ """
86
+ 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'.
87
+ """
88
+ return pulumi.get(self, "identity_token")
89
+
90
+ @identity_token.setter
91
+ def identity_token(self, value: Optional[pulumi.Input[_builtins.str]]):
92
+ pulumi.set(self, "identity_token", value)
93
+
78
94
  @_builtins.property
79
95
  @pulumi.getter(name="oauthClientId")
80
96
  def oauth_client_id(self) -> Optional[pulumi.Input[_builtins.str]]:
81
97
  """
82
- 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'.
98
+ 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'.
83
99
  """
84
100
  return pulumi.get(self, "oauth_client_id")
85
101
 
@@ -91,7 +107,7 @@ class ProviderArgs:
91
107
  @pulumi.getter(name="oauthClientSecret")
92
108
  def oauth_client_secret(self) -> Optional[pulumi.Input[_builtins.str]]:
93
109
  """
94
- 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'.
110
+ 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'.
95
111
  """
96
112
  return pulumi.get(self, "oauth_client_secret")
97
113
 
@@ -103,7 +119,7 @@ class ProviderArgs:
103
119
  @pulumi.getter
104
120
  def scopes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
105
121
  """
106
- 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.
122
+ 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.
107
123
  """
108
124
  return pulumi.get(self, "scopes")
109
125
 
@@ -115,7 +131,7 @@ class ProviderArgs:
115
131
  @pulumi.getter
116
132
  def tailnet(self) -> Optional[pulumi.Input[_builtins.str]]:
117
133
  """
118
- 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.
134
+ 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.
119
135
  """
120
136
  return pulumi.get(self, "tailnet")
121
137
 
@@ -144,6 +160,7 @@ class Provider(pulumi.ProviderResource):
144
160
  opts: Optional[pulumi.ResourceOptions] = None,
145
161
  api_key: Optional[pulumi.Input[_builtins.str]] = None,
146
162
  base_url: Optional[pulumi.Input[_builtins.str]] = None,
163
+ identity_token: Optional[pulumi.Input[_builtins.str]] = None,
147
164
  oauth_client_id: Optional[pulumi.Input[_builtins.str]] = None,
148
165
  oauth_client_secret: Optional[pulumi.Input[_builtins.str]] = None,
149
166
  scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
@@ -160,10 +177,11 @@ class Provider(pulumi.ProviderResource):
160
177
  :param pulumi.ResourceOptions opts: Options for the resource.
161
178
  :param pulumi.Input[_builtins.str] api_key: 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'.
162
179
  :param pulumi.Input[_builtins.str] base_url: The base URL of the Tailscale API. Defaults to https://api.tailscale.com. Can be set via the TAILSCALE_BASE_URL environment variable.
163
- :param pulumi.Input[_builtins.str] oauth_client_id: 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'.
164
- :param pulumi.Input[_builtins.str] oauth_client_secret: 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'.
165
- :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: 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.
166
- :param pulumi.Input[_builtins.str] tailnet: 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.
180
+ :param pulumi.Input[_builtins.str] identity_token: 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'.
181
+ :param pulumi.Input[_builtins.str] oauth_client_id: 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'.
182
+ :param pulumi.Input[_builtins.str] oauth_client_secret: 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'.
183
+ :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: 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.
184
+ :param pulumi.Input[_builtins.str] tailnet: 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.
167
185
  :param pulumi.Input[_builtins.str] user_agent: User-Agent header for API requests.
168
186
  """
169
187
  ...
@@ -195,6 +213,7 @@ class Provider(pulumi.ProviderResource):
195
213
  opts: Optional[pulumi.ResourceOptions] = None,
196
214
  api_key: Optional[pulumi.Input[_builtins.str]] = None,
197
215
  base_url: Optional[pulumi.Input[_builtins.str]] = None,
216
+ identity_token: Optional[pulumi.Input[_builtins.str]] = None,
198
217
  oauth_client_id: Optional[pulumi.Input[_builtins.str]] = None,
199
218
  oauth_client_secret: Optional[pulumi.Input[_builtins.str]] = None,
200
219
  scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
@@ -211,12 +230,13 @@ class Provider(pulumi.ProviderResource):
211
230
 
212
231
  __props__.__dict__["api_key"] = None if api_key is None else pulumi.Output.secret(api_key)
213
232
  __props__.__dict__["base_url"] = base_url
233
+ __props__.__dict__["identity_token"] = None if identity_token is None else pulumi.Output.secret(identity_token)
214
234
  __props__.__dict__["oauth_client_id"] = oauth_client_id
215
235
  __props__.__dict__["oauth_client_secret"] = None if oauth_client_secret is None else pulumi.Output.secret(oauth_client_secret)
216
236
  __props__.__dict__["scopes"] = pulumi.Output.from_input(scopes).apply(pulumi.runtime.to_json) if scopes is not None else None
217
237
  __props__.__dict__["tailnet"] = tailnet
218
238
  __props__.__dict__["user_agent"] = user_agent
219
- secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["apiKey", "oauthClientSecret"])
239
+ secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["apiKey", "identityToken", "oauthClientSecret"])
220
240
  opts = pulumi.ResourceOptions.merge(opts, secret_opts)
221
241
  super(Provider, __self__).__init__(
222
242
  'tailscale',
@@ -240,11 +260,19 @@ class Provider(pulumi.ProviderResource):
240
260
  """
241
261
  return pulumi.get(self, "base_url")
242
262
 
263
+ @_builtins.property
264
+ @pulumi.getter(name="identityToken")
265
+ def identity_token(self) -> pulumi.Output[Optional[_builtins.str]]:
266
+ """
267
+ 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'.
268
+ """
269
+ return pulumi.get(self, "identity_token")
270
+
243
271
  @_builtins.property
244
272
  @pulumi.getter(name="oauthClientId")
245
273
  def oauth_client_id(self) -> pulumi.Output[Optional[_builtins.str]]:
246
274
  """
247
- 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'.
275
+ 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'.
248
276
  """
249
277
  return pulumi.get(self, "oauth_client_id")
250
278
 
@@ -252,7 +280,7 @@ class Provider(pulumi.ProviderResource):
252
280
  @pulumi.getter(name="oauthClientSecret")
253
281
  def oauth_client_secret(self) -> pulumi.Output[Optional[_builtins.str]]:
254
282
  """
255
- 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'.
283
+ 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'.
256
284
  """
257
285
  return pulumi.get(self, "oauth_client_secret")
258
286
 
@@ -260,7 +288,7 @@ class Provider(pulumi.ProviderResource):
260
288
  @pulumi.getter
261
289
  def tailnet(self) -> pulumi.Output[Optional[_builtins.str]]:
262
290
  """
263
- 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.
291
+ 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.
264
292
  """
265
293
  return pulumi.get(self, "tailnet")
266
294
 
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "resource": true,
3
3
  "name": "tailscale",
4
- "version": "1.0.0-alpha.1759907095"
4
+ "version": "1.0.0-alpha.1764138241"
5
5
  }
@@ -24,6 +24,7 @@ class TailnetSettingsArgs:
24
24
  devices_approval_on: Optional[pulumi.Input[_builtins.bool]] = None,
25
25
  devices_auto_updates_on: Optional[pulumi.Input[_builtins.bool]] = None,
26
26
  devices_key_duration_days: Optional[pulumi.Input[_builtins.int]] = None,
27
+ https_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
27
28
  network_flow_logging_on: Optional[pulumi.Input[_builtins.bool]] = None,
28
29
  posture_identity_collection_on: Optional[pulumi.Input[_builtins.bool]] = None,
29
30
  regional_routing_on: Optional[pulumi.Input[_builtins.bool]] = None,
@@ -35,7 +36,8 @@ class TailnetSettingsArgs:
35
36
  :param pulumi.Input[_builtins.bool] devices_approval_on: Whether device approval is enabled for the tailnet
36
37
  :param pulumi.Input[_builtins.bool] devices_auto_updates_on: Whether auto updates are enabled for devices that belong to this tailnet
37
38
  :param pulumi.Input[_builtins.int] devices_key_duration_days: The key expiry duration for devices on this tailnet
38
- :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flog logs are enabled for the tailnet
39
+ :param pulumi.Input[_builtins.bool] https_enabled: Whether provisioning of HTTPS certificates is enabled for the tailnet
40
+ :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flow logs are enabled for the tailnet
39
41
  :param pulumi.Input[_builtins.bool] posture_identity_collection_on: Whether identity collection is enabled for device posture integrations for the tailnet
40
42
  :param pulumi.Input[_builtins.bool] regional_routing_on: Whether regional routing is enabled for the tailnet
41
43
  :param pulumi.Input[_builtins.bool] users_approval_on: Whether user approval is enabled for this tailnet
@@ -51,6 +53,8 @@ class TailnetSettingsArgs:
51
53
  pulumi.set(__self__, "devices_auto_updates_on", devices_auto_updates_on)
52
54
  if devices_key_duration_days is not None:
53
55
  pulumi.set(__self__, "devices_key_duration_days", devices_key_duration_days)
56
+ if https_enabled is not None:
57
+ pulumi.set(__self__, "https_enabled", https_enabled)
54
58
  if network_flow_logging_on is not None:
55
59
  pulumi.set(__self__, "network_flow_logging_on", network_flow_logging_on)
56
60
  if posture_identity_collection_on is not None:
@@ -119,11 +123,23 @@ class TailnetSettingsArgs:
119
123
  def devices_key_duration_days(self, value: Optional[pulumi.Input[_builtins.int]]):
120
124
  pulumi.set(self, "devices_key_duration_days", value)
121
125
 
126
+ @_builtins.property
127
+ @pulumi.getter(name="httpsEnabled")
128
+ def https_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
129
+ """
130
+ Whether provisioning of HTTPS certificates is enabled for the tailnet
131
+ """
132
+ return pulumi.get(self, "https_enabled")
133
+
134
+ @https_enabled.setter
135
+ def https_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
136
+ pulumi.set(self, "https_enabled", value)
137
+
122
138
  @_builtins.property
123
139
  @pulumi.getter(name="networkFlowLoggingOn")
124
140
  def network_flow_logging_on(self) -> Optional[pulumi.Input[_builtins.bool]]:
125
141
  """
126
- Whether network flog logs are enabled for the tailnet
142
+ Whether network flow logs are enabled for the tailnet
127
143
  """
128
144
  return pulumi.get(self, "network_flow_logging_on")
129
145
 
@@ -188,6 +204,7 @@ class _TailnetSettingsState:
188
204
  devices_approval_on: Optional[pulumi.Input[_builtins.bool]] = None,
189
205
  devices_auto_updates_on: Optional[pulumi.Input[_builtins.bool]] = None,
190
206
  devices_key_duration_days: Optional[pulumi.Input[_builtins.int]] = None,
207
+ https_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
191
208
  network_flow_logging_on: Optional[pulumi.Input[_builtins.bool]] = None,
192
209
  posture_identity_collection_on: Optional[pulumi.Input[_builtins.bool]] = None,
193
210
  regional_routing_on: Optional[pulumi.Input[_builtins.bool]] = None,
@@ -199,7 +216,8 @@ class _TailnetSettingsState:
199
216
  :param pulumi.Input[_builtins.bool] devices_approval_on: Whether device approval is enabled for the tailnet
200
217
  :param pulumi.Input[_builtins.bool] devices_auto_updates_on: Whether auto updates are enabled for devices that belong to this tailnet
201
218
  :param pulumi.Input[_builtins.int] devices_key_duration_days: The key expiry duration for devices on this tailnet
202
- :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flog logs are enabled for the tailnet
219
+ :param pulumi.Input[_builtins.bool] https_enabled: Whether provisioning of HTTPS certificates is enabled for the tailnet
220
+ :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flow logs are enabled for the tailnet
203
221
  :param pulumi.Input[_builtins.bool] posture_identity_collection_on: Whether identity collection is enabled for device posture integrations for the tailnet
204
222
  :param pulumi.Input[_builtins.bool] regional_routing_on: Whether regional routing is enabled for the tailnet
205
223
  :param pulumi.Input[_builtins.bool] users_approval_on: Whether user approval is enabled for this tailnet
@@ -215,6 +233,8 @@ class _TailnetSettingsState:
215
233
  pulumi.set(__self__, "devices_auto_updates_on", devices_auto_updates_on)
216
234
  if devices_key_duration_days is not None:
217
235
  pulumi.set(__self__, "devices_key_duration_days", devices_key_duration_days)
236
+ if https_enabled is not None:
237
+ pulumi.set(__self__, "https_enabled", https_enabled)
218
238
  if network_flow_logging_on is not None:
219
239
  pulumi.set(__self__, "network_flow_logging_on", network_flow_logging_on)
220
240
  if posture_identity_collection_on is not None:
@@ -283,11 +303,23 @@ class _TailnetSettingsState:
283
303
  def devices_key_duration_days(self, value: Optional[pulumi.Input[_builtins.int]]):
284
304
  pulumi.set(self, "devices_key_duration_days", value)
285
305
 
306
+ @_builtins.property
307
+ @pulumi.getter(name="httpsEnabled")
308
+ def https_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
309
+ """
310
+ Whether provisioning of HTTPS certificates is enabled for the tailnet
311
+ """
312
+ return pulumi.get(self, "https_enabled")
313
+
314
+ @https_enabled.setter
315
+ def https_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
316
+ pulumi.set(self, "https_enabled", value)
317
+
286
318
  @_builtins.property
287
319
  @pulumi.getter(name="networkFlowLoggingOn")
288
320
  def network_flow_logging_on(self) -> Optional[pulumi.Input[_builtins.bool]]:
289
321
  """
290
- Whether network flog logs are enabled for the tailnet
322
+ Whether network flow logs are enabled for the tailnet
291
323
  """
292
324
  return pulumi.get(self, "network_flow_logging_on")
293
325
 
@@ -355,6 +387,7 @@ class TailnetSettings(pulumi.CustomResource):
355
387
  devices_approval_on: Optional[pulumi.Input[_builtins.bool]] = None,
356
388
  devices_auto_updates_on: Optional[pulumi.Input[_builtins.bool]] = None,
357
389
  devices_key_duration_days: Optional[pulumi.Input[_builtins.int]] = None,
390
+ https_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
358
391
  network_flow_logging_on: Optional[pulumi.Input[_builtins.bool]] = None,
359
392
  posture_identity_collection_on: Optional[pulumi.Input[_builtins.bool]] = None,
360
393
  regional_routing_on: Optional[pulumi.Input[_builtins.bool]] = None,
@@ -378,7 +411,8 @@ class TailnetSettings(pulumi.CustomResource):
378
411
  devices_key_duration_days=5,
379
412
  users_approval_on=True,
380
413
  users_role_allowed_to_join_external_tailnet="member",
381
- posture_identity_collection_on=True)
414
+ posture_identity_collection_on=True,
415
+ https_enabled=True)
382
416
  ```
383
417
 
384
418
  ## Import
@@ -397,7 +431,8 @@ class TailnetSettings(pulumi.CustomResource):
397
431
  :param pulumi.Input[_builtins.bool] devices_approval_on: Whether device approval is enabled for the tailnet
398
432
  :param pulumi.Input[_builtins.bool] devices_auto_updates_on: Whether auto updates are enabled for devices that belong to this tailnet
399
433
  :param pulumi.Input[_builtins.int] devices_key_duration_days: The key expiry duration for devices on this tailnet
400
- :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flog logs are enabled for the tailnet
434
+ :param pulumi.Input[_builtins.bool] https_enabled: Whether provisioning of HTTPS certificates is enabled for the tailnet
435
+ :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flow logs are enabled for the tailnet
401
436
  :param pulumi.Input[_builtins.bool] posture_identity_collection_on: Whether identity collection is enabled for device posture integrations for the tailnet
402
437
  :param pulumi.Input[_builtins.bool] regional_routing_on: Whether regional routing is enabled for the tailnet
403
438
  :param pulumi.Input[_builtins.bool] users_approval_on: Whether user approval is enabled for this tailnet
@@ -426,7 +461,8 @@ class TailnetSettings(pulumi.CustomResource):
426
461
  devices_key_duration_days=5,
427
462
  users_approval_on=True,
428
463
  users_role_allowed_to_join_external_tailnet="member",
429
- posture_identity_collection_on=True)
464
+ posture_identity_collection_on=True,
465
+ https_enabled=True)
430
466
  ```
431
467
 
432
468
  ## Import
@@ -459,6 +495,7 @@ class TailnetSettings(pulumi.CustomResource):
459
495
  devices_approval_on: Optional[pulumi.Input[_builtins.bool]] = None,
460
496
  devices_auto_updates_on: Optional[pulumi.Input[_builtins.bool]] = None,
461
497
  devices_key_duration_days: Optional[pulumi.Input[_builtins.int]] = None,
498
+ https_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
462
499
  network_flow_logging_on: Optional[pulumi.Input[_builtins.bool]] = None,
463
500
  posture_identity_collection_on: Optional[pulumi.Input[_builtins.bool]] = None,
464
501
  regional_routing_on: Optional[pulumi.Input[_builtins.bool]] = None,
@@ -478,6 +515,7 @@ class TailnetSettings(pulumi.CustomResource):
478
515
  __props__.__dict__["devices_approval_on"] = devices_approval_on
479
516
  __props__.__dict__["devices_auto_updates_on"] = devices_auto_updates_on
480
517
  __props__.__dict__["devices_key_duration_days"] = devices_key_duration_days
518
+ __props__.__dict__["https_enabled"] = https_enabled
481
519
  __props__.__dict__["network_flow_logging_on"] = network_flow_logging_on
482
520
  __props__.__dict__["posture_identity_collection_on"] = posture_identity_collection_on
483
521
  __props__.__dict__["regional_routing_on"] = regional_routing_on
@@ -498,6 +536,7 @@ class TailnetSettings(pulumi.CustomResource):
498
536
  devices_approval_on: Optional[pulumi.Input[_builtins.bool]] = None,
499
537
  devices_auto_updates_on: Optional[pulumi.Input[_builtins.bool]] = None,
500
538
  devices_key_duration_days: Optional[pulumi.Input[_builtins.int]] = None,
539
+ https_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
501
540
  network_flow_logging_on: Optional[pulumi.Input[_builtins.bool]] = None,
502
541
  posture_identity_collection_on: Optional[pulumi.Input[_builtins.bool]] = None,
503
542
  regional_routing_on: Optional[pulumi.Input[_builtins.bool]] = None,
@@ -514,7 +553,8 @@ class TailnetSettings(pulumi.CustomResource):
514
553
  :param pulumi.Input[_builtins.bool] devices_approval_on: Whether device approval is enabled for the tailnet
515
554
  :param pulumi.Input[_builtins.bool] devices_auto_updates_on: Whether auto updates are enabled for devices that belong to this tailnet
516
555
  :param pulumi.Input[_builtins.int] devices_key_duration_days: The key expiry duration for devices on this tailnet
517
- :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flog logs are enabled for the tailnet
556
+ :param pulumi.Input[_builtins.bool] https_enabled: Whether provisioning of HTTPS certificates is enabled for the tailnet
557
+ :param pulumi.Input[_builtins.bool] network_flow_logging_on: Whether network flow logs are enabled for the tailnet
518
558
  :param pulumi.Input[_builtins.bool] posture_identity_collection_on: Whether identity collection is enabled for device posture integrations for the tailnet
519
559
  :param pulumi.Input[_builtins.bool] regional_routing_on: Whether regional routing is enabled for the tailnet
520
560
  :param pulumi.Input[_builtins.bool] users_approval_on: Whether user approval is enabled for this tailnet
@@ -529,6 +569,7 @@ class TailnetSettings(pulumi.CustomResource):
529
569
  __props__.__dict__["devices_approval_on"] = devices_approval_on
530
570
  __props__.__dict__["devices_auto_updates_on"] = devices_auto_updates_on
531
571
  __props__.__dict__["devices_key_duration_days"] = devices_key_duration_days
572
+ __props__.__dict__["https_enabled"] = https_enabled
532
573
  __props__.__dict__["network_flow_logging_on"] = network_flow_logging_on
533
574
  __props__.__dict__["posture_identity_collection_on"] = posture_identity_collection_on
534
575
  __props__.__dict__["regional_routing_on"] = regional_routing_on
@@ -573,11 +614,19 @@ class TailnetSettings(pulumi.CustomResource):
573
614
  """
574
615
  return pulumi.get(self, "devices_key_duration_days")
575
616
 
617
+ @_builtins.property
618
+ @pulumi.getter(name="httpsEnabled")
619
+ def https_enabled(self) -> pulumi.Output[_builtins.bool]:
620
+ """
621
+ Whether provisioning of HTTPS certificates is enabled for the tailnet
622
+ """
623
+ return pulumi.get(self, "https_enabled")
624
+
576
625
  @_builtins.property
577
626
  @pulumi.getter(name="networkFlowLoggingOn")
578
627
  def network_flow_logging_on(self) -> pulumi.Output[_builtins.bool]:
579
628
  """
580
- Whether network flog logs are enabled for the tailnet
629
+ Whether network flow logs are enabled for the tailnet
581
630
  """
582
631
  return pulumi.get(self, "network_flow_logging_on")
583
632
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulumi_tailscale
3
- Version: 1.0.0a1759907095
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
@@ -5,7 +5,7 @@
5
5
  keywords = ["pulumi", "tailscale"]
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.9"
8
- version = "1.0.0a1759907095"
8
+ version = "1.0.0a1764138241"
9
9
  [project.license]
10
10
  text = "Apache-2.0"
11
11
  [project.urls]