pulumi-tailscale 1.0.0a1767163811__tar.gz → 1.0.0a1767670937__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.
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/PKG-INFO +1 -1
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/__init__.py +9 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/acl.py +38 -38
- pulumi_tailscale-1.0.0a1767670937/pulumi_tailscale/federated_identity.py +576 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_acl.py +6 -2
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/oauth_client.py +46 -18
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/pulumi-plugin.json +1 -1
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale.egg-info/PKG-INFO +1 -1
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale.egg-info/SOURCES.txt +1 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pyproject.toml +1 -1
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/README.md +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/_inputs.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/_utilities.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/aws_external_id.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/config/__init__.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/config/__init__.pyi +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/config/vars.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/contacts.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/device_authorization.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/device_key.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/device_subnet_routes.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/device_tags.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/dns_configuration.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/dns_nameservers.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/dns_preferences.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/dns_search_paths.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/dns_split_nameservers.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get4_via6.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_device.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_devices.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_user.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_users.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/logstream_configuration.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/outputs.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/posture_integration.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/provider.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/py.typed +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/tailnet_key.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/tailnet_settings.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/webhook.py +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale.egg-info/dependency_links.txt +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale.egg-info/requires.txt +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale.egg-info/top_level.txt +0 -0
- {pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/setup.cfg +0 -0
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/__init__.py
RENAMED
|
@@ -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",
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/acl.py
RENAMED
|
@@ -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
|
|
29
|
-
:param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the
|
|
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
|
|
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
|
|
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
|
|
84
|
-
:param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
"
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"
|
|
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
|
-
\\"
|
|
163
|
+
\\"grants\\": [
|
|
162
164
|
{
|
|
163
165
|
// Allow all users access to all ports.
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
|
187
|
-
:param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the
|
|
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
|
|
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
|
|
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
|
-
"
|
|
209
|
-
"
|
|
210
|
-
"
|
|
211
|
-
"
|
|
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
|
-
\\"
|
|
218
|
+
\\"grants\\": [
|
|
217
219
|
{
|
|
218
220
|
// Allow all users access to all ports.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
|
292
|
-
:param pulumi.Input[_builtins.bool] reset_acl_on_destroy: If true, will reset the
|
|
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
|
|
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
|
|
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
|
|
|
@@ -0,0 +1,576 @@
|
|
|
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__ = ['FederatedIdentityArgs', 'FederatedIdentity']
|
|
18
|
+
|
|
19
|
+
@pulumi.input_type
|
|
20
|
+
class FederatedIdentityArgs:
|
|
21
|
+
def __init__(__self__, *,
|
|
22
|
+
issuer: pulumi.Input[_builtins.str],
|
|
23
|
+
scopes: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]],
|
|
24
|
+
subject: pulumi.Input[_builtins.str],
|
|
25
|
+
audience: Optional[pulumi.Input[_builtins.str]] = None,
|
|
26
|
+
custom_claim_rules: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
|
|
27
|
+
description: Optional[pulumi.Input[_builtins.str]] = None,
|
|
28
|
+
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None):
|
|
29
|
+
"""
|
|
30
|
+
The set of arguments for constructing a FederatedIdentity resource.
|
|
31
|
+
:param pulumi.Input[_builtins.str] issuer: The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
32
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
33
|
+
:param pulumi.Input[_builtins.str] subject: The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
34
|
+
:param pulumi.Input[_builtins.str] audience: The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
35
|
+
:param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] custom_claim_rules: A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
36
|
+
:param pulumi.Input[_builtins.str] description: A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
37
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
38
|
+
"""
|
|
39
|
+
pulumi.set(__self__, "issuer", issuer)
|
|
40
|
+
pulumi.set(__self__, "scopes", scopes)
|
|
41
|
+
pulumi.set(__self__, "subject", subject)
|
|
42
|
+
if audience is not None:
|
|
43
|
+
pulumi.set(__self__, "audience", audience)
|
|
44
|
+
if custom_claim_rules is not None:
|
|
45
|
+
pulumi.set(__self__, "custom_claim_rules", custom_claim_rules)
|
|
46
|
+
if description is not None:
|
|
47
|
+
pulumi.set(__self__, "description", description)
|
|
48
|
+
if tags is not None:
|
|
49
|
+
pulumi.set(__self__, "tags", tags)
|
|
50
|
+
|
|
51
|
+
@_builtins.property
|
|
52
|
+
@pulumi.getter
|
|
53
|
+
def issuer(self) -> pulumi.Input[_builtins.str]:
|
|
54
|
+
"""
|
|
55
|
+
The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
56
|
+
"""
|
|
57
|
+
return pulumi.get(self, "issuer")
|
|
58
|
+
|
|
59
|
+
@issuer.setter
|
|
60
|
+
def issuer(self, value: pulumi.Input[_builtins.str]):
|
|
61
|
+
pulumi.set(self, "issuer", value)
|
|
62
|
+
|
|
63
|
+
@_builtins.property
|
|
64
|
+
@pulumi.getter
|
|
65
|
+
def scopes(self) -> pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]:
|
|
66
|
+
"""
|
|
67
|
+
Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
68
|
+
"""
|
|
69
|
+
return pulumi.get(self, "scopes")
|
|
70
|
+
|
|
71
|
+
@scopes.setter
|
|
72
|
+
def scopes(self, value: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]):
|
|
73
|
+
pulumi.set(self, "scopes", value)
|
|
74
|
+
|
|
75
|
+
@_builtins.property
|
|
76
|
+
@pulumi.getter
|
|
77
|
+
def subject(self) -> pulumi.Input[_builtins.str]:
|
|
78
|
+
"""
|
|
79
|
+
The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
80
|
+
"""
|
|
81
|
+
return pulumi.get(self, "subject")
|
|
82
|
+
|
|
83
|
+
@subject.setter
|
|
84
|
+
def subject(self, value: pulumi.Input[_builtins.str]):
|
|
85
|
+
pulumi.set(self, "subject", value)
|
|
86
|
+
|
|
87
|
+
@_builtins.property
|
|
88
|
+
@pulumi.getter
|
|
89
|
+
def audience(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
90
|
+
"""
|
|
91
|
+
The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
92
|
+
"""
|
|
93
|
+
return pulumi.get(self, "audience")
|
|
94
|
+
|
|
95
|
+
@audience.setter
|
|
96
|
+
def audience(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
97
|
+
pulumi.set(self, "audience", value)
|
|
98
|
+
|
|
99
|
+
@_builtins.property
|
|
100
|
+
@pulumi.getter(name="customClaimRules")
|
|
101
|
+
def custom_claim_rules(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]:
|
|
102
|
+
"""
|
|
103
|
+
A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
104
|
+
"""
|
|
105
|
+
return pulumi.get(self, "custom_claim_rules")
|
|
106
|
+
|
|
107
|
+
@custom_claim_rules.setter
|
|
108
|
+
def custom_claim_rules(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]):
|
|
109
|
+
pulumi.set(self, "custom_claim_rules", value)
|
|
110
|
+
|
|
111
|
+
@_builtins.property
|
|
112
|
+
@pulumi.getter
|
|
113
|
+
def description(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
114
|
+
"""
|
|
115
|
+
A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
116
|
+
"""
|
|
117
|
+
return pulumi.get(self, "description")
|
|
118
|
+
|
|
119
|
+
@description.setter
|
|
120
|
+
def description(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
121
|
+
pulumi.set(self, "description", value)
|
|
122
|
+
|
|
123
|
+
@_builtins.property
|
|
124
|
+
@pulumi.getter
|
|
125
|
+
def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
|
|
126
|
+
"""
|
|
127
|
+
A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
128
|
+
"""
|
|
129
|
+
return pulumi.get(self, "tags")
|
|
130
|
+
|
|
131
|
+
@tags.setter
|
|
132
|
+
def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
|
|
133
|
+
pulumi.set(self, "tags", value)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
@pulumi.input_type
|
|
137
|
+
class _FederatedIdentityState:
|
|
138
|
+
def __init__(__self__, *,
|
|
139
|
+
audience: Optional[pulumi.Input[_builtins.str]] = None,
|
|
140
|
+
created_at: Optional[pulumi.Input[_builtins.str]] = None,
|
|
141
|
+
custom_claim_rules: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
|
|
142
|
+
description: Optional[pulumi.Input[_builtins.str]] = None,
|
|
143
|
+
issuer: Optional[pulumi.Input[_builtins.str]] = None,
|
|
144
|
+
scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
145
|
+
subject: Optional[pulumi.Input[_builtins.str]] = None,
|
|
146
|
+
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
147
|
+
updated_at: Optional[pulumi.Input[_builtins.str]] = None,
|
|
148
|
+
user_id: Optional[pulumi.Input[_builtins.str]] = None):
|
|
149
|
+
"""
|
|
150
|
+
Input properties used for looking up and filtering FederatedIdentity resources.
|
|
151
|
+
:param pulumi.Input[_builtins.str] audience: The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
152
|
+
:param pulumi.Input[_builtins.str] created_at: The creation timestamp of the key in RFC3339 format
|
|
153
|
+
:param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] custom_claim_rules: A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
154
|
+
:param pulumi.Input[_builtins.str] description: A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
155
|
+
:param pulumi.Input[_builtins.str] issuer: The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
156
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
157
|
+
:param pulumi.Input[_builtins.str] subject: The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
158
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
159
|
+
:param pulumi.Input[_builtins.str] updated_at: The updated timestamp of the key in RFC3339 format
|
|
160
|
+
:param pulumi.Input[_builtins.str] user_id: ID of the user who created this federated identity, empty for federated identities created by other trust credentials.
|
|
161
|
+
"""
|
|
162
|
+
if audience is not None:
|
|
163
|
+
pulumi.set(__self__, "audience", audience)
|
|
164
|
+
if created_at is not None:
|
|
165
|
+
pulumi.set(__self__, "created_at", created_at)
|
|
166
|
+
if custom_claim_rules is not None:
|
|
167
|
+
pulumi.set(__self__, "custom_claim_rules", custom_claim_rules)
|
|
168
|
+
if description is not None:
|
|
169
|
+
pulumi.set(__self__, "description", description)
|
|
170
|
+
if issuer is not None:
|
|
171
|
+
pulumi.set(__self__, "issuer", issuer)
|
|
172
|
+
if scopes is not None:
|
|
173
|
+
pulumi.set(__self__, "scopes", scopes)
|
|
174
|
+
if subject is not None:
|
|
175
|
+
pulumi.set(__self__, "subject", subject)
|
|
176
|
+
if tags is not None:
|
|
177
|
+
pulumi.set(__self__, "tags", tags)
|
|
178
|
+
if updated_at is not None:
|
|
179
|
+
pulumi.set(__self__, "updated_at", updated_at)
|
|
180
|
+
if user_id is not None:
|
|
181
|
+
pulumi.set(__self__, "user_id", user_id)
|
|
182
|
+
|
|
183
|
+
@_builtins.property
|
|
184
|
+
@pulumi.getter
|
|
185
|
+
def audience(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
186
|
+
"""
|
|
187
|
+
The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
188
|
+
"""
|
|
189
|
+
return pulumi.get(self, "audience")
|
|
190
|
+
|
|
191
|
+
@audience.setter
|
|
192
|
+
def audience(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
193
|
+
pulumi.set(self, "audience", value)
|
|
194
|
+
|
|
195
|
+
@_builtins.property
|
|
196
|
+
@pulumi.getter(name="createdAt")
|
|
197
|
+
def created_at(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
198
|
+
"""
|
|
199
|
+
The creation timestamp of the key in RFC3339 format
|
|
200
|
+
"""
|
|
201
|
+
return pulumi.get(self, "created_at")
|
|
202
|
+
|
|
203
|
+
@created_at.setter
|
|
204
|
+
def created_at(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
205
|
+
pulumi.set(self, "created_at", value)
|
|
206
|
+
|
|
207
|
+
@_builtins.property
|
|
208
|
+
@pulumi.getter(name="customClaimRules")
|
|
209
|
+
def custom_claim_rules(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]:
|
|
210
|
+
"""
|
|
211
|
+
A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
212
|
+
"""
|
|
213
|
+
return pulumi.get(self, "custom_claim_rules")
|
|
214
|
+
|
|
215
|
+
@custom_claim_rules.setter
|
|
216
|
+
def custom_claim_rules(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]):
|
|
217
|
+
pulumi.set(self, "custom_claim_rules", value)
|
|
218
|
+
|
|
219
|
+
@_builtins.property
|
|
220
|
+
@pulumi.getter
|
|
221
|
+
def description(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
222
|
+
"""
|
|
223
|
+
A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
224
|
+
"""
|
|
225
|
+
return pulumi.get(self, "description")
|
|
226
|
+
|
|
227
|
+
@description.setter
|
|
228
|
+
def description(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
229
|
+
pulumi.set(self, "description", value)
|
|
230
|
+
|
|
231
|
+
@_builtins.property
|
|
232
|
+
@pulumi.getter
|
|
233
|
+
def issuer(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
234
|
+
"""
|
|
235
|
+
The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
236
|
+
"""
|
|
237
|
+
return pulumi.get(self, "issuer")
|
|
238
|
+
|
|
239
|
+
@issuer.setter
|
|
240
|
+
def issuer(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
241
|
+
pulumi.set(self, "issuer", value)
|
|
242
|
+
|
|
243
|
+
@_builtins.property
|
|
244
|
+
@pulumi.getter
|
|
245
|
+
def scopes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
|
|
246
|
+
"""
|
|
247
|
+
Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
248
|
+
"""
|
|
249
|
+
return pulumi.get(self, "scopes")
|
|
250
|
+
|
|
251
|
+
@scopes.setter
|
|
252
|
+
def scopes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
|
|
253
|
+
pulumi.set(self, "scopes", value)
|
|
254
|
+
|
|
255
|
+
@_builtins.property
|
|
256
|
+
@pulumi.getter
|
|
257
|
+
def subject(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
258
|
+
"""
|
|
259
|
+
The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
260
|
+
"""
|
|
261
|
+
return pulumi.get(self, "subject")
|
|
262
|
+
|
|
263
|
+
@subject.setter
|
|
264
|
+
def subject(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
265
|
+
pulumi.set(self, "subject", value)
|
|
266
|
+
|
|
267
|
+
@_builtins.property
|
|
268
|
+
@pulumi.getter
|
|
269
|
+
def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
|
|
270
|
+
"""
|
|
271
|
+
A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
272
|
+
"""
|
|
273
|
+
return pulumi.get(self, "tags")
|
|
274
|
+
|
|
275
|
+
@tags.setter
|
|
276
|
+
def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
|
|
277
|
+
pulumi.set(self, "tags", value)
|
|
278
|
+
|
|
279
|
+
@_builtins.property
|
|
280
|
+
@pulumi.getter(name="updatedAt")
|
|
281
|
+
def updated_at(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
282
|
+
"""
|
|
283
|
+
The updated timestamp of the key in RFC3339 format
|
|
284
|
+
"""
|
|
285
|
+
return pulumi.get(self, "updated_at")
|
|
286
|
+
|
|
287
|
+
@updated_at.setter
|
|
288
|
+
def updated_at(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
289
|
+
pulumi.set(self, "updated_at", value)
|
|
290
|
+
|
|
291
|
+
@_builtins.property
|
|
292
|
+
@pulumi.getter(name="userId")
|
|
293
|
+
def user_id(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
294
|
+
"""
|
|
295
|
+
ID of the user who created this federated identity, empty for federated identities created by other trust credentials.
|
|
296
|
+
"""
|
|
297
|
+
return pulumi.get(self, "user_id")
|
|
298
|
+
|
|
299
|
+
@user_id.setter
|
|
300
|
+
def user_id(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
301
|
+
pulumi.set(self, "user_id", value)
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
@pulumi.type_token("tailscale:index/federatedIdentity:FederatedIdentity")
|
|
305
|
+
class FederatedIdentity(pulumi.CustomResource):
|
|
306
|
+
@overload
|
|
307
|
+
def __init__(__self__,
|
|
308
|
+
resource_name: str,
|
|
309
|
+
opts: Optional[pulumi.ResourceOptions] = None,
|
|
310
|
+
audience: Optional[pulumi.Input[_builtins.str]] = None,
|
|
311
|
+
custom_claim_rules: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
|
|
312
|
+
description: Optional[pulumi.Input[_builtins.str]] = None,
|
|
313
|
+
issuer: Optional[pulumi.Input[_builtins.str]] = None,
|
|
314
|
+
scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
315
|
+
subject: Optional[pulumi.Input[_builtins.str]] = None,
|
|
316
|
+
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
317
|
+
__props__=None):
|
|
318
|
+
"""
|
|
319
|
+
The federated_identity resource allows you to create federated identities to programmatically interact with the Tailscale API using workload identity federation.
|
|
320
|
+
|
|
321
|
+
## Example Usage
|
|
322
|
+
|
|
323
|
+
```python
|
|
324
|
+
import pulumi
|
|
325
|
+
import pulumi_tailscale as tailscale
|
|
326
|
+
|
|
327
|
+
example_federated_identity = tailscale.FederatedIdentity("example_federated_identity",
|
|
328
|
+
description="Example federated identity",
|
|
329
|
+
scopes=[
|
|
330
|
+
"auth_keys",
|
|
331
|
+
"devices:core",
|
|
332
|
+
],
|
|
333
|
+
tags=["tag:test"],
|
|
334
|
+
issuer="https://example.com",
|
|
335
|
+
subject="example-sub-*",
|
|
336
|
+
custom_claim_rules={
|
|
337
|
+
"repo_name": "example-repo-name",
|
|
338
|
+
})
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Import
|
|
342
|
+
|
|
343
|
+
The `pulumi import` command can be used, for example:
|
|
344
|
+
|
|
345
|
+
```sh
|
|
346
|
+
$ pulumi import tailscale:index/federatedIdentity:FederatedIdentity example k1234511CNTRL-kZDRvszg8621CNTRL
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
:param str resource_name: The name of the resource.
|
|
350
|
+
:param pulumi.ResourceOptions opts: Options for the resource.
|
|
351
|
+
:param pulumi.Input[_builtins.str] audience: The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
352
|
+
:param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] custom_claim_rules: A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
353
|
+
:param pulumi.Input[_builtins.str] description: A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
354
|
+
:param pulumi.Input[_builtins.str] issuer: The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
355
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
356
|
+
:param pulumi.Input[_builtins.str] subject: The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
357
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
358
|
+
"""
|
|
359
|
+
...
|
|
360
|
+
@overload
|
|
361
|
+
def __init__(__self__,
|
|
362
|
+
resource_name: str,
|
|
363
|
+
args: FederatedIdentityArgs,
|
|
364
|
+
opts: Optional[pulumi.ResourceOptions] = None):
|
|
365
|
+
"""
|
|
366
|
+
The federated_identity resource allows you to create federated identities to programmatically interact with the Tailscale API using workload identity federation.
|
|
367
|
+
|
|
368
|
+
## Example Usage
|
|
369
|
+
|
|
370
|
+
```python
|
|
371
|
+
import pulumi
|
|
372
|
+
import pulumi_tailscale as tailscale
|
|
373
|
+
|
|
374
|
+
example_federated_identity = tailscale.FederatedIdentity("example_federated_identity",
|
|
375
|
+
description="Example federated identity",
|
|
376
|
+
scopes=[
|
|
377
|
+
"auth_keys",
|
|
378
|
+
"devices:core",
|
|
379
|
+
],
|
|
380
|
+
tags=["tag:test"],
|
|
381
|
+
issuer="https://example.com",
|
|
382
|
+
subject="example-sub-*",
|
|
383
|
+
custom_claim_rules={
|
|
384
|
+
"repo_name": "example-repo-name",
|
|
385
|
+
})
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## Import
|
|
389
|
+
|
|
390
|
+
The `pulumi import` command can be used, for example:
|
|
391
|
+
|
|
392
|
+
```sh
|
|
393
|
+
$ pulumi import tailscale:index/federatedIdentity:FederatedIdentity example k1234511CNTRL-kZDRvszg8621CNTRL
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
:param str resource_name: The name of the resource.
|
|
397
|
+
:param FederatedIdentityArgs args: The arguments to use to populate this resource's properties.
|
|
398
|
+
:param pulumi.ResourceOptions opts: Options for the resource.
|
|
399
|
+
"""
|
|
400
|
+
...
|
|
401
|
+
def __init__(__self__, resource_name: str, *args, **kwargs):
|
|
402
|
+
resource_args, opts = _utilities.get_resource_args_opts(FederatedIdentityArgs, pulumi.ResourceOptions, *args, **kwargs)
|
|
403
|
+
if resource_args is not None:
|
|
404
|
+
__self__._internal_init(resource_name, opts, **resource_args.__dict__)
|
|
405
|
+
else:
|
|
406
|
+
__self__._internal_init(resource_name, *args, **kwargs)
|
|
407
|
+
|
|
408
|
+
def _internal_init(__self__,
|
|
409
|
+
resource_name: str,
|
|
410
|
+
opts: Optional[pulumi.ResourceOptions] = None,
|
|
411
|
+
audience: Optional[pulumi.Input[_builtins.str]] = None,
|
|
412
|
+
custom_claim_rules: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
|
|
413
|
+
description: Optional[pulumi.Input[_builtins.str]] = None,
|
|
414
|
+
issuer: Optional[pulumi.Input[_builtins.str]] = None,
|
|
415
|
+
scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
416
|
+
subject: Optional[pulumi.Input[_builtins.str]] = None,
|
|
417
|
+
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
418
|
+
__props__=None):
|
|
419
|
+
opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
|
|
420
|
+
if not isinstance(opts, pulumi.ResourceOptions):
|
|
421
|
+
raise TypeError('Expected resource options to be a ResourceOptions instance')
|
|
422
|
+
if opts.id is None:
|
|
423
|
+
if __props__ is not None:
|
|
424
|
+
raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
|
|
425
|
+
__props__ = FederatedIdentityArgs.__new__(FederatedIdentityArgs)
|
|
426
|
+
|
|
427
|
+
__props__.__dict__["audience"] = audience
|
|
428
|
+
__props__.__dict__["custom_claim_rules"] = custom_claim_rules
|
|
429
|
+
__props__.__dict__["description"] = description
|
|
430
|
+
if issuer is None and not opts.urn:
|
|
431
|
+
raise TypeError("Missing required property 'issuer'")
|
|
432
|
+
__props__.__dict__["issuer"] = issuer
|
|
433
|
+
if scopes is None and not opts.urn:
|
|
434
|
+
raise TypeError("Missing required property 'scopes'")
|
|
435
|
+
__props__.__dict__["scopes"] = scopes
|
|
436
|
+
if subject is None and not opts.urn:
|
|
437
|
+
raise TypeError("Missing required property 'subject'")
|
|
438
|
+
__props__.__dict__["subject"] = subject
|
|
439
|
+
__props__.__dict__["tags"] = tags
|
|
440
|
+
__props__.__dict__["created_at"] = None
|
|
441
|
+
__props__.__dict__["updated_at"] = None
|
|
442
|
+
__props__.__dict__["user_id"] = None
|
|
443
|
+
super(FederatedIdentity, __self__).__init__(
|
|
444
|
+
'tailscale:index/federatedIdentity:FederatedIdentity',
|
|
445
|
+
resource_name,
|
|
446
|
+
__props__,
|
|
447
|
+
opts)
|
|
448
|
+
|
|
449
|
+
@staticmethod
|
|
450
|
+
def get(resource_name: str,
|
|
451
|
+
id: pulumi.Input[str],
|
|
452
|
+
opts: Optional[pulumi.ResourceOptions] = None,
|
|
453
|
+
audience: Optional[pulumi.Input[_builtins.str]] = None,
|
|
454
|
+
created_at: Optional[pulumi.Input[_builtins.str]] = None,
|
|
455
|
+
custom_claim_rules: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
|
|
456
|
+
description: Optional[pulumi.Input[_builtins.str]] = None,
|
|
457
|
+
issuer: Optional[pulumi.Input[_builtins.str]] = None,
|
|
458
|
+
scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
459
|
+
subject: Optional[pulumi.Input[_builtins.str]] = None,
|
|
460
|
+
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
461
|
+
updated_at: Optional[pulumi.Input[_builtins.str]] = None,
|
|
462
|
+
user_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'FederatedIdentity':
|
|
463
|
+
"""
|
|
464
|
+
Get an existing FederatedIdentity resource's state with the given name, id, and optional extra
|
|
465
|
+
properties used to qualify the lookup.
|
|
466
|
+
|
|
467
|
+
:param str resource_name: The unique name of the resulting resource.
|
|
468
|
+
:param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
|
|
469
|
+
:param pulumi.ResourceOptions opts: Options for the resource.
|
|
470
|
+
:param pulumi.Input[_builtins.str] audience: The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
471
|
+
:param pulumi.Input[_builtins.str] created_at: The creation timestamp of the key in RFC3339 format
|
|
472
|
+
:param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] custom_claim_rules: A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
473
|
+
:param pulumi.Input[_builtins.str] description: A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
474
|
+
:param pulumi.Input[_builtins.str] issuer: The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
475
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
476
|
+
:param pulumi.Input[_builtins.str] subject: The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
477
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
478
|
+
:param pulumi.Input[_builtins.str] updated_at: The updated timestamp of the key in RFC3339 format
|
|
479
|
+
:param pulumi.Input[_builtins.str] user_id: ID of the user who created this federated identity, empty for federated identities created by other trust credentials.
|
|
480
|
+
"""
|
|
481
|
+
opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
|
|
482
|
+
|
|
483
|
+
__props__ = _FederatedIdentityState.__new__(_FederatedIdentityState)
|
|
484
|
+
|
|
485
|
+
__props__.__dict__["audience"] = audience
|
|
486
|
+
__props__.__dict__["created_at"] = created_at
|
|
487
|
+
__props__.__dict__["custom_claim_rules"] = custom_claim_rules
|
|
488
|
+
__props__.__dict__["description"] = description
|
|
489
|
+
__props__.__dict__["issuer"] = issuer
|
|
490
|
+
__props__.__dict__["scopes"] = scopes
|
|
491
|
+
__props__.__dict__["subject"] = subject
|
|
492
|
+
__props__.__dict__["tags"] = tags
|
|
493
|
+
__props__.__dict__["updated_at"] = updated_at
|
|
494
|
+
__props__.__dict__["user_id"] = user_id
|
|
495
|
+
return FederatedIdentity(resource_name, opts=opts, __props__=__props__)
|
|
496
|
+
|
|
497
|
+
@_builtins.property
|
|
498
|
+
@pulumi.getter
|
|
499
|
+
def audience(self) -> pulumi.Output[_builtins.str]:
|
|
500
|
+
"""
|
|
501
|
+
The value used when matching against the `aud` claim from an OIDC identity token. Specifying the audience is optional as Tailscale will generate a secure audience at creation time by default. It is recommended to let Tailscale generate the audience unless the identity provider you are integrating with requires a specific audience format.
|
|
502
|
+
"""
|
|
503
|
+
return pulumi.get(self, "audience")
|
|
504
|
+
|
|
505
|
+
@_builtins.property
|
|
506
|
+
@pulumi.getter(name="createdAt")
|
|
507
|
+
def created_at(self) -> pulumi.Output[_builtins.str]:
|
|
508
|
+
"""
|
|
509
|
+
The creation timestamp of the key in RFC3339 format
|
|
510
|
+
"""
|
|
511
|
+
return pulumi.get(self, "created_at")
|
|
512
|
+
|
|
513
|
+
@_builtins.property
|
|
514
|
+
@pulumi.getter(name="customClaimRules")
|
|
515
|
+
def custom_claim_rules(self) -> pulumi.Output[Optional[Mapping[str, _builtins.str]]]:
|
|
516
|
+
"""
|
|
517
|
+
A map of claim names to pattern strings used to match against arbitrary claims in the OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
518
|
+
"""
|
|
519
|
+
return pulumi.get(self, "custom_claim_rules")
|
|
520
|
+
|
|
521
|
+
@_builtins.property
|
|
522
|
+
@pulumi.getter
|
|
523
|
+
def description(self) -> pulumi.Output[Optional[_builtins.str]]:
|
|
524
|
+
"""
|
|
525
|
+
A description of the federated identity consisting of alphanumeric characters. Defaults to `""`.
|
|
526
|
+
"""
|
|
527
|
+
return pulumi.get(self, "description")
|
|
528
|
+
|
|
529
|
+
@_builtins.property
|
|
530
|
+
@pulumi.getter
|
|
531
|
+
def issuer(self) -> pulumi.Output[_builtins.str]:
|
|
532
|
+
"""
|
|
533
|
+
The issuer of the OIDC identity token used in the token exchange. Must be a valid and publicly reachable https:// URL.
|
|
534
|
+
"""
|
|
535
|
+
return pulumi.get(self, "issuer")
|
|
536
|
+
|
|
537
|
+
@_builtins.property
|
|
538
|
+
@pulumi.getter
|
|
539
|
+
def scopes(self) -> pulumi.Output[Sequence[_builtins.str]]:
|
|
540
|
+
"""
|
|
541
|
+
Scopes to grant to the federated identity. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
542
|
+
"""
|
|
543
|
+
return pulumi.get(self, "scopes")
|
|
544
|
+
|
|
545
|
+
@_builtins.property
|
|
546
|
+
@pulumi.getter
|
|
547
|
+
def subject(self) -> pulumi.Output[_builtins.str]:
|
|
548
|
+
"""
|
|
549
|
+
The pattern used when matching against the `sub` claim from an OIDC identity token. Patterns can include `*` characters to match against any character.
|
|
550
|
+
"""
|
|
551
|
+
return pulumi.get(self, "subject")
|
|
552
|
+
|
|
553
|
+
@_builtins.property
|
|
554
|
+
@pulumi.getter
|
|
555
|
+
def tags(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
|
|
556
|
+
"""
|
|
557
|
+
A list of tags that access tokens generated for the federated identity will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
558
|
+
"""
|
|
559
|
+
return pulumi.get(self, "tags")
|
|
560
|
+
|
|
561
|
+
@_builtins.property
|
|
562
|
+
@pulumi.getter(name="updatedAt")
|
|
563
|
+
def updated_at(self) -> pulumi.Output[_builtins.str]:
|
|
564
|
+
"""
|
|
565
|
+
The updated timestamp of the key in RFC3339 format
|
|
566
|
+
"""
|
|
567
|
+
return pulumi.get(self, "updated_at")
|
|
568
|
+
|
|
569
|
+
@_builtins.property
|
|
570
|
+
@pulumi.getter(name="userId")
|
|
571
|
+
def user_id(self) -> pulumi.Output[_builtins.str]:
|
|
572
|
+
"""
|
|
573
|
+
ID of the user who created this federated identity, empty for federated identities created by other trust credentials.
|
|
574
|
+
"""
|
|
575
|
+
return pulumi.get(self, "user_id")
|
|
576
|
+
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_acl.py
RENAMED
|
@@ -75,7 +75,9 @@ class AwaitableGetAclResult(GetAclResult):
|
|
|
75
75
|
|
|
76
76
|
def get_acl(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetAclResult:
|
|
77
77
|
"""
|
|
78
|
-
The acl data source gets the Tailscale
|
|
78
|
+
The acl data source gets the Tailscale policy file for a tailnet
|
|
79
|
+
|
|
80
|
+
> **Note:** The naming of this data source predates Tailscale's usage of the term "policy file" to refer to the centralized configuration file for a tailnet. This data source fetches a tailnet's entire policy file and not just the ACLs section within it.
|
|
79
81
|
"""
|
|
80
82
|
__args__ = dict()
|
|
81
83
|
opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
|
|
@@ -87,7 +89,9 @@ def get_acl(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetAclResul
|
|
|
87
89
|
json=pulumi.get(__ret__, 'json'))
|
|
88
90
|
def get_acl_output(opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetAclResult]:
|
|
89
91
|
"""
|
|
90
|
-
The acl data source gets the Tailscale
|
|
92
|
+
The acl data source gets the Tailscale policy file for a tailnet
|
|
93
|
+
|
|
94
|
+
> **Note:** The naming of this data source predates Tailscale's usage of the term "policy file" to refer to the centralized configuration file for a tailnet. This data source fetches a tailnet's entire policy file and not just the ACLs section within it.
|
|
91
95
|
"""
|
|
92
96
|
__args__ = dict()
|
|
93
97
|
opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
|
|
@@ -24,8 +24,8 @@ class OauthClientArgs:
|
|
|
24
24
|
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None):
|
|
25
25
|
"""
|
|
26
26
|
The set of arguments for constructing a OauthClient resource.
|
|
27
|
-
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/
|
|
28
|
-
:param pulumi.Input[_builtins.str] description: A description of the
|
|
27
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
28
|
+
:param pulumi.Input[_builtins.str] description: A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
29
29
|
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the OAuth client will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
30
30
|
"""
|
|
31
31
|
pulumi.set(__self__, "scopes", scopes)
|
|
@@ -38,7 +38,7 @@ class OauthClientArgs:
|
|
|
38
38
|
@pulumi.getter
|
|
39
39
|
def scopes(self) -> pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]:
|
|
40
40
|
"""
|
|
41
|
-
Scopes to grant to the client. See https://tailscale.com/kb/
|
|
41
|
+
Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
42
42
|
"""
|
|
43
43
|
return pulumi.get(self, "scopes")
|
|
44
44
|
|
|
@@ -50,7 +50,7 @@ class OauthClientArgs:
|
|
|
50
50
|
@pulumi.getter
|
|
51
51
|
def description(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
52
52
|
"""
|
|
53
|
-
A description of the
|
|
53
|
+
A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
54
54
|
"""
|
|
55
55
|
return pulumi.get(self, "description")
|
|
56
56
|
|
|
@@ -79,15 +79,17 @@ class _OauthClientState:
|
|
|
79
79
|
key: Optional[pulumi.Input[_builtins.str]] = None,
|
|
80
80
|
scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
81
81
|
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
82
|
+
updated_at: Optional[pulumi.Input[_builtins.str]] = None,
|
|
82
83
|
user_id: Optional[pulumi.Input[_builtins.str]] = None):
|
|
83
84
|
"""
|
|
84
85
|
Input properties used for looking up and filtering OauthClient resources.
|
|
85
86
|
:param pulumi.Input[_builtins.str] created_at: The creation timestamp of the key in RFC3339 format
|
|
86
|
-
:param pulumi.Input[_builtins.str] description: A description of the
|
|
87
|
+
:param pulumi.Input[_builtins.str] description: A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
87
88
|
:param pulumi.Input[_builtins.str] key: The client secret, also known as the key. Used with the client ID to generate access tokens.
|
|
88
|
-
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/
|
|
89
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
89
90
|
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the OAuth client will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
90
|
-
:param pulumi.Input[_builtins.str]
|
|
91
|
+
:param pulumi.Input[_builtins.str] updated_at: The updated timestamp of the key in RFC3339 format
|
|
92
|
+
:param pulumi.Input[_builtins.str] user_id: ID of the user who created this key, empty for OAuth clients created by other trust credentials.
|
|
91
93
|
"""
|
|
92
94
|
if created_at is not None:
|
|
93
95
|
pulumi.set(__self__, "created_at", created_at)
|
|
@@ -99,6 +101,8 @@ class _OauthClientState:
|
|
|
99
101
|
pulumi.set(__self__, "scopes", scopes)
|
|
100
102
|
if tags is not None:
|
|
101
103
|
pulumi.set(__self__, "tags", tags)
|
|
104
|
+
if updated_at is not None:
|
|
105
|
+
pulumi.set(__self__, "updated_at", updated_at)
|
|
102
106
|
if user_id is not None:
|
|
103
107
|
pulumi.set(__self__, "user_id", user_id)
|
|
104
108
|
|
|
@@ -118,7 +122,7 @@ class _OauthClientState:
|
|
|
118
122
|
@pulumi.getter
|
|
119
123
|
def description(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
120
124
|
"""
|
|
121
|
-
A description of the
|
|
125
|
+
A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
122
126
|
"""
|
|
123
127
|
return pulumi.get(self, "description")
|
|
124
128
|
|
|
@@ -142,7 +146,7 @@ class _OauthClientState:
|
|
|
142
146
|
@pulumi.getter
|
|
143
147
|
def scopes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
|
|
144
148
|
"""
|
|
145
|
-
Scopes to grant to the client. See https://tailscale.com/kb/
|
|
149
|
+
Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
146
150
|
"""
|
|
147
151
|
return pulumi.get(self, "scopes")
|
|
148
152
|
|
|
@@ -162,11 +166,23 @@ class _OauthClientState:
|
|
|
162
166
|
def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
|
|
163
167
|
pulumi.set(self, "tags", value)
|
|
164
168
|
|
|
169
|
+
@_builtins.property
|
|
170
|
+
@pulumi.getter(name="updatedAt")
|
|
171
|
+
def updated_at(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
172
|
+
"""
|
|
173
|
+
The updated timestamp of the key in RFC3339 format
|
|
174
|
+
"""
|
|
175
|
+
return pulumi.get(self, "updated_at")
|
|
176
|
+
|
|
177
|
+
@updated_at.setter
|
|
178
|
+
def updated_at(self, value: Optional[pulumi.Input[_builtins.str]]):
|
|
179
|
+
pulumi.set(self, "updated_at", value)
|
|
180
|
+
|
|
165
181
|
@_builtins.property
|
|
166
182
|
@pulumi.getter(name="userId")
|
|
167
183
|
def user_id(self) -> Optional[pulumi.Input[_builtins.str]]:
|
|
168
184
|
"""
|
|
169
|
-
ID of the user who created this key, empty for OAuth clients created by other
|
|
185
|
+
ID of the user who created this key, empty for OAuth clients created by other trust credentials.
|
|
170
186
|
"""
|
|
171
187
|
return pulumi.get(self, "user_id")
|
|
172
188
|
|
|
@@ -212,8 +228,8 @@ class OauthClient(pulumi.CustomResource):
|
|
|
212
228
|
|
|
213
229
|
:param str resource_name: The name of the resource.
|
|
214
230
|
:param pulumi.ResourceOptions opts: Options for the resource.
|
|
215
|
-
:param pulumi.Input[_builtins.str] description: A description of the
|
|
216
|
-
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/
|
|
231
|
+
:param pulumi.Input[_builtins.str] description: A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
232
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
217
233
|
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the OAuth client will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
218
234
|
"""
|
|
219
235
|
...
|
|
@@ -281,6 +297,7 @@ class OauthClient(pulumi.CustomResource):
|
|
|
281
297
|
__props__.__dict__["tags"] = tags
|
|
282
298
|
__props__.__dict__["created_at"] = None
|
|
283
299
|
__props__.__dict__["key"] = None
|
|
300
|
+
__props__.__dict__["updated_at"] = None
|
|
284
301
|
__props__.__dict__["user_id"] = None
|
|
285
302
|
secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["key"])
|
|
286
303
|
opts = pulumi.ResourceOptions.merge(opts, secret_opts)
|
|
@@ -299,6 +316,7 @@ class OauthClient(pulumi.CustomResource):
|
|
|
299
316
|
key: Optional[pulumi.Input[_builtins.str]] = None,
|
|
300
317
|
scopes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
301
318
|
tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
|
|
319
|
+
updated_at: Optional[pulumi.Input[_builtins.str]] = None,
|
|
302
320
|
user_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'OauthClient':
|
|
303
321
|
"""
|
|
304
322
|
Get an existing OauthClient resource's state with the given name, id, and optional extra
|
|
@@ -308,11 +326,12 @@ class OauthClient(pulumi.CustomResource):
|
|
|
308
326
|
:param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
|
|
309
327
|
:param pulumi.ResourceOptions opts: Options for the resource.
|
|
310
328
|
:param pulumi.Input[_builtins.str] created_at: The creation timestamp of the key in RFC3339 format
|
|
311
|
-
:param pulumi.Input[_builtins.str] description: A description of the
|
|
329
|
+
:param pulumi.Input[_builtins.str] description: A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
312
330
|
:param pulumi.Input[_builtins.str] key: The client secret, also known as the key. Used with the client ID to generate access tokens.
|
|
313
|
-
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/
|
|
331
|
+
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] scopes: Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
314
332
|
:param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: A list of tags that access tokens generated for the OAuth client will be able to assign to devices. Mandatory if the scopes include "devices:core" or "auth_keys".
|
|
315
|
-
:param pulumi.Input[_builtins.str]
|
|
333
|
+
:param pulumi.Input[_builtins.str] updated_at: The updated timestamp of the key in RFC3339 format
|
|
334
|
+
:param pulumi.Input[_builtins.str] user_id: ID of the user who created this key, empty for OAuth clients created by other trust credentials.
|
|
316
335
|
"""
|
|
317
336
|
opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
|
|
318
337
|
|
|
@@ -323,6 +342,7 @@ class OauthClient(pulumi.CustomResource):
|
|
|
323
342
|
__props__.__dict__["key"] = key
|
|
324
343
|
__props__.__dict__["scopes"] = scopes
|
|
325
344
|
__props__.__dict__["tags"] = tags
|
|
345
|
+
__props__.__dict__["updated_at"] = updated_at
|
|
326
346
|
__props__.__dict__["user_id"] = user_id
|
|
327
347
|
return OauthClient(resource_name, opts=opts, __props__=__props__)
|
|
328
348
|
|
|
@@ -338,7 +358,7 @@ class OauthClient(pulumi.CustomResource):
|
|
|
338
358
|
@pulumi.getter
|
|
339
359
|
def description(self) -> pulumi.Output[Optional[_builtins.str]]:
|
|
340
360
|
"""
|
|
341
|
-
A description of the
|
|
361
|
+
A description of the OAuth client consisting of alphanumeric characters. Defaults to `""`.
|
|
342
362
|
"""
|
|
343
363
|
return pulumi.get(self, "description")
|
|
344
364
|
|
|
@@ -354,7 +374,7 @@ class OauthClient(pulumi.CustomResource):
|
|
|
354
374
|
@pulumi.getter
|
|
355
375
|
def scopes(self) -> pulumi.Output[Sequence[_builtins.str]]:
|
|
356
376
|
"""
|
|
357
|
-
Scopes to grant to the client. See https://tailscale.com/kb/
|
|
377
|
+
Scopes to grant to the client. See https://tailscale.com/kb/1623/ for a list of available scopes.
|
|
358
378
|
"""
|
|
359
379
|
return pulumi.get(self, "scopes")
|
|
360
380
|
|
|
@@ -366,11 +386,19 @@ class OauthClient(pulumi.CustomResource):
|
|
|
366
386
|
"""
|
|
367
387
|
return pulumi.get(self, "tags")
|
|
368
388
|
|
|
389
|
+
@_builtins.property
|
|
390
|
+
@pulumi.getter(name="updatedAt")
|
|
391
|
+
def updated_at(self) -> pulumi.Output[_builtins.str]:
|
|
392
|
+
"""
|
|
393
|
+
The updated timestamp of the key in RFC3339 format
|
|
394
|
+
"""
|
|
395
|
+
return pulumi.get(self, "updated_at")
|
|
396
|
+
|
|
369
397
|
@_builtins.property
|
|
370
398
|
@pulumi.getter(name="userId")
|
|
371
399
|
def user_id(self) -> pulumi.Output[_builtins.str]:
|
|
372
400
|
"""
|
|
373
|
-
ID of the user who created this key, empty for OAuth clients created by other
|
|
401
|
+
ID of the user who created this key, empty for OAuth clients created by other trust credentials.
|
|
374
402
|
"""
|
|
375
403
|
return pulumi.get(self, "user_id")
|
|
376
404
|
|
|
@@ -15,6 +15,7 @@ pulumi_tailscale/dns_nameservers.py
|
|
|
15
15
|
pulumi_tailscale/dns_preferences.py
|
|
16
16
|
pulumi_tailscale/dns_search_paths.py
|
|
17
17
|
pulumi_tailscale/dns_split_nameservers.py
|
|
18
|
+
pulumi_tailscale/federated_identity.py
|
|
18
19
|
pulumi_tailscale/get4_via6.py
|
|
19
20
|
pulumi_tailscale/get_acl.py
|
|
20
21
|
pulumi_tailscale/get_device.py
|
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/_inputs.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/contacts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/get_user.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/outputs.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/provider.py
RENAMED
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulumi_tailscale-1.0.0a1767163811 → pulumi_tailscale-1.0.0a1767670937}/pulumi_tailscale/webhook.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|