alpha
Login
or
Join now
aly.codes
/
infra
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
[READ-ONLY] Mirror of https://github.com/alyraffauf/infra. Hybrid cloud cluster monorepo with Ansible, K8s, NixOS, and Terraform.
cute.haus
ansible
k8s
nix
nix-flake
nixos
terraform
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
terraform: add tailscale provider
author
Aly Raffauf
date
2 weeks ago
(Jul 9, 2026, 3:29 PM -0400)
commit
5490d0a6
5490d0a647fffb371130e5c0797f4fbf4ec7aa97
parent
c8eb2a23
c8eb2a239b825ab3dd34fdf4e0c0e78c13d6cf99
+306
5 changed files
Expand all
Collapse all
Unified
Split
.envrc
secrets
tailscale-api.yaml
terraform
.terraform.lock.hcl
providers.tf
tailscale.tf
+3
.envrc
View file
Reviewed
···
22
22
# B2 native provider reads these.
23
23
export_sops_secret B2_APPLICATION_KEY_ID secrets/b2.yaml '["B2_KEY_ID"]'
24
24
export_sops_secret B2_APPLICATION_KEY secrets/b2.yaml '["B2_APP_KEY"]'
25
25
+
26
26
+
# Tailscale provider reads this.
27
27
+
export_sops_secret TAILSCALE_API_KEY secrets/tailscale-api.yaml '["api_key"]'
+205
secrets/tailscale-api.yaml
View file
Reviewed
···
1
1
+
api_key: ENC[AES256_GCM,data:jwf60mcAkAd0Bn3nnyGluIxuS7uV6TUCrDBCqrLldxx3lMfDwb3QFbcb3loEmc7SapggG3h4iqJNtPp1,iv:LQMaP9p1GV0FvjMFtpOHc+NoptJNe5xhSnU8TBexaOI=,tag:Jb34cv3YG91gRbAouSjl+w==,type:str]
2
2
+
sops:
3
3
+
age:
4
4
+
- enc: |
5
5
+
-----BEGIN AGE ENCRYPTED FILE-----
6
6
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0Zk9RRzVDZ1BDcnpVaVZU
7
7
+
cHdXQkRyVXhxbkFSUlF3cHFKWXAxZ3JqczJrCmUrYTFZbkZrZGNBZ3RUbVE2Q2JP
8
8
+
anUxWGtoN2dNcTgzT3poQ2VIWkltWTQKLS0tIEczVDlocHZwUUtJazFVblJ1ZXE2
9
9
+
UWM0QVNSK0J0N2Z0NTdFQW9ZSWFieDAKc3kWegkU5AYaSQa7BxYTgj4evkaKYf9O
10
10
+
T8zmq/S1j6YvkMHGQF3xweGVaRnVXHchaoXTdRd7TI+177AhCiH+Mg==
11
11
+
-----END AGE ENCRYPTED FILE-----
12
12
+
recipient: age1g79dfm0p44q5yxzhwd9syg965lupdu3n5lgyltdannmul5v5v5aszzz3gs
13
13
+
- enc: |
14
14
+
-----BEGIN AGE ENCRYPTED FILE-----
15
15
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnSXZHaWl4N2M3dGRLVjUy
16
16
+
WmxRZjZ0SThNTW5GTG9pWXVIMHRoamNXUmtvCks2MDNZc2FoZzBhYXFJcWVEY2sz
17
17
+
NG1nay9NNkRyRVMwTzVKenV0VXNOYm8KLS0tIFNteHd3VGY0YU8xaDFnTmVCbVpi
18
18
+
U05ZbmxYdVo1aUk3NDA0MEQ2MTZFMXcKzR5A6x9KoEYjWtm9BwnJI4R5cKF+Q6bx
19
19
+
6kVQk8DbmInG+b7nSWmmXFAdRWQ4YLfPnnjDwJyqrgMtal9ohPC3nw==
20
20
+
-----END AGE ENCRYPTED FILE-----
21
21
+
recipient: age1cpcg5t420nf72k0c9rrx7amg0szch98uzqu273exj7lw3yu0j99q6vcckn
22
22
+
- enc: |
23
23
+
-----BEGIN AGE ENCRYPTED FILE-----
24
24
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0WWl6ejZqc3p2REtSc0k3
25
25
+
b2pQcnNBL25ua3E1T0NTSjF1Z2tuWTVabEQ4CklHb09YYTRObHhQaGlCK1lzVkZB
26
26
+
ZTdQd3h0bkRydDJGeVgwTHBkbWIybTQKLS0tIGdleWNCZThkUExTeXY1TzhvTGRL
27
27
+
SW54V0c4WjZiWWlmTUs1c3VlV3NDTDQKKOjXPMso6+93plaHLw1EGtyOYobp47Kp
28
28
+
xD6pLQVHuirtoZypVIJypiAu4n+DpFfNhPruqasmlp4acKFz+n3XKQ==
29
29
+
-----END AGE ENCRYPTED FILE-----
30
30
+
recipient: age1w4mzwe89aqgs56mn8zg7dd2l623kwmw80k90wr2sa6dnlcdmhcnsp4kt54
31
31
+
- enc: |
32
32
+
-----BEGIN AGE ENCRYPTED FILE-----
33
33
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBieEY4WTc3R3I4ZUpHQnZi
34
34
+
dXVjYWJNaXY3TE9yMjNIcVAzYlFtcTJ2UkhFCkFyeU42UnFYZEIwZzd3MGtzUWUv
35
35
+
RTJpSnF0VTJzNXN2dWtPcWNRSTh2NWMKLS0tIE1nMW1MejkzV1hiRWlEa01ab25P
36
36
+
K3A4MmVUNjg5aGRXZEV2MU5KVisyU2MKyZE9HfzkMQFR9BJ7Uc2hISRlLCdBTWRq
37
37
+
MJGndu/73lsqElw6168Z39SkHT8tz+zUo3mxiOGkHwX+pRZJSBYNaQ==
38
38
+
-----END AGE ENCRYPTED FILE-----
39
39
+
recipient: age1e5a0aaueyk34klry2qk094zrwfsvga0uft93mwweye30xhqhvfzs3jgqku
40
40
+
- enc: |
41
41
+
-----BEGIN AGE ENCRYPTED FILE-----
42
42
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3T0kyWGtLRUxUb1ArTXpu
43
43
+
cHFEWXRmeWlydWFIYXRFcEcxRTZGOER4aHlBCkVsYVZmTnNoRkp2T1VWaG56ZzNl
44
44
+
QVYzdDE1UVIxWHMvd1hBUjBBcDFEWlUKLS0tIE1ORFRvOWpJZlRyNlRlUkprY2Ri
45
45
+
YUtLa2grakFTKzF5SWNrSVg1cGNlWVEKka9odDCDg0N69Vy/o5/cK1nhzPA00f5A
46
46
+
Ou7FxtvhVVNLc7/bblrphl//rBSs6qXLqjJMW942bUN019tzzdo9hw==
47
47
+
-----END AGE ENCRYPTED FILE-----
48
48
+
recipient: age1j9jju3whwj72udhge7v4c77gk6v6w2cq8zjngzyppwtptfsz499qyywu9a
49
49
+
- enc: |
50
50
+
-----BEGIN AGE ENCRYPTED FILE-----
51
51
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3ZThTalB0SnozU2o3OG52
52
52
+
NHBXUUxJRGtlcmpEWDR5UFBtZFF6bEZIOUFvCkNqRzd1VnUrMnZUTEczK1paL0dx
53
53
+
bHU2V013bGV1L0pGRzJ3My81WnNxc0kKLS0tIGdIempKYys0VDBjVUxrL2doaGtU
54
54
+
N0VQdUxQbkhHNWxxMFd6aWs4SVhNMWcKMHE4e+SjtVvBfsr+CQT2B0hs910GqJe0
55
55
+
zHUcTQixnQdSaOL+1/Nrv398RRszaa69FzGOwk3mnU6tnAbZC16QXw==
56
56
+
-----END AGE ENCRYPTED FILE-----
57
57
+
recipient: age162sx8kppp90mjxw88eqs78hgnpkddf8k9kgtksmmexzvcdxknpkspmkgaf
58
58
+
- enc: |
59
59
+
-----BEGIN AGE ENCRYPTED FILE-----
60
60
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0NlVDWTl2ODd1c0U2cnJl
61
61
+
UklTOFV3M0xqTTc0WlovYzd5SnNuK1Nja0g0CnFZRVN2TkZXOExESVh2SlVvSDNw
62
62
+
V1pUWjRNV3ZiRjRWL09yY0xWeUxNSWcKLS0tIGNIdHZNK0ZsaWJrMUtnT0JlTWNL
63
63
+
ZmIzR1owYlRzdm1pMEhiTlBtSWE5OGMKZZj+EyS+6YYOPb0C8nv+IOX2pWRJ/Huy
64
64
+
9HJYtVEORFHhZaj7v7XkY7PLKSSXYdHbdq0DN+CxzdYux65pxV8uWw==
65
65
+
-----END AGE ENCRYPTED FILE-----
66
66
+
recipient: age1hhvzccxzrysq6ak2ktuks00vy3smr6rhey9swhncq8850epftpjqt3c7f3
67
67
+
- enc: |
68
68
+
-----BEGIN AGE ENCRYPTED FILE-----
69
69
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0WCtpZ0pCeFM2bU5HL3hC
70
70
+
VzFiRzFseDI5K2hFRW8vTXNBR1ZUOWRESlQ4CmErblRCNGg1Z0JGVGM4eVhsV1gr
71
71
+
ZlRWaEd2akQxNzJzdzFpZEgxcmdvUTAKLS0tIG5uaTNGbFE4SHpQQnhvci9qRnFD
72
72
+
VHlnVXFSUEhRaGhxY1g1cGJISmRSKzQKaE30Y6XueGIdC03uU2zuot3A14QeBw8z
73
73
+
jXGfFJRN/D/hqq0DedLOrHZOY113IymByEOUwcDXe/zN/tGkE6pRIQ==
74
74
+
-----END AGE ENCRYPTED FILE-----
75
75
+
recipient: age1mpcyeqjcl8j0dd4sj6f0vufs2vpus3xn4dvxe3cr8g8rgcm0nfxq03ds4y
76
76
+
- enc: |
77
77
+
-----BEGIN AGE ENCRYPTED FILE-----
78
78
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTcWhmK0NFQ3RHeFRNRFVr
79
79
+
Z2UybEtzaVZmYW5hcmw1aVVvcVNuaFE5Nnh3CkpWYlN2Y3dJSElzT1NwdU5wVStH
80
80
+
MWlMZC80QzdLN0d4cHVqc2dEcHNBZlUKLS0tIHhOWTBaSWJQcFdHdjg2L3FBS0xS
81
81
+
OC9McG1lUld4N09lcmhycjJzZWtoV3cKSS3PEyiWGbAvhJ/WSlrX+geMCWGh4Rfq
82
82
+
uuNiIVsNtRIshD6G4nUjSaWmTLZC3D36uQit7jC1Jbai0t+MW10IdQ==
83
83
+
-----END AGE ENCRYPTED FILE-----
84
84
+
recipient: age1zj2aq2a2v3ngcer7s3jz6pufhh8ula8pw56etmy28dy25wrkk3vq59hu2s
85
85
+
- enc: |
86
86
+
-----BEGIN AGE ENCRYPTED FILE-----
87
87
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKWWhWV1NQclBlcmFGMU5w
88
88
+
VjNBRnI1eEhqTlU3SlFwUkpQWHBPa1VHS2hnCkg2YXJqSHlSTFFWMnY1cEJWZC9o
89
89
+
RGlPTWJEb1owcERhV1VDRGo4cWZUTVkKLS0tIDBHcmo0RlFLL2dOYXBBYjJJczZP
90
90
+
VHJrWWRWK25HZ3Q5OXNnSzZrYUVxcWMK8OlViRXbZHqHNCItTtaDtqAE6eDxTLLb
91
91
+
bKQ0p70ypqNerjpn+CAiD0O4pMpNWizftt21/m1Z0FaMAy1k81/smA==
92
92
+
-----END AGE ENCRYPTED FILE-----
93
93
+
recipient: age15td0jk5e2qeq2pexvxguhuuaxuaa7nhql7mhx9jr79caska6t4pqdv5spl
94
94
+
- enc: |
95
95
+
-----BEGIN AGE ENCRYPTED FILE-----
96
96
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1V2dEeXFJc3BJTFV3dllD
97
97
+
akJGcUhoREZNeEUwMS9PN1JRelBrNEo5UDE4CmtBeE1rbmFuWnV1N2FrdWY3TjR3
98
98
+
VkRpdlcxQ05KM0d2QUhwTVNVU0RpMm8KLS0tIFRtZitlVXpMa2p5WUhnR3BBUFdX
99
99
+
cDJaUWE5MU9SWGRremFST0VNK0tjOVUKQjiRM2Rg7I0wtLkeRuYlZ+74ijIBdO8K
100
100
+
X9KhACuR1Sz5UAFmjLZekI56EdAQQ69IQ/luPUBrxkPovYNnwHiQHg==
101
101
+
-----END AGE ENCRYPTED FILE-----
102
102
+
recipient: age15mhrzghrmprq387xqsln6996yx3ja2e2zpamh9mtuu9zqmxahunqg9qugw
103
103
+
- enc: |
104
104
+
-----BEGIN AGE ENCRYPTED FILE-----
105
105
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXNnFpeGZtWDlHOTNJRXhs
106
106
+
OEx3L2hKekxML3NTM3NaYlJHME5wcWlqUWh3CkpvUzFidUlkV3RiTE85UHBCK2J4
107
107
+
NEVoYWZxSHdRM3MwNWZEc2FObC9BZWsKLS0tIG5ZSUZJbzRMV2J6ZzM1bDd3OUIy
108
108
+
YnQxMEpkcC80K0RSUTVpRnlwcXROc2sK7bztkqyjIVp2clB114XQ1+QcN9OazVLX
109
109
+
Z8DsDZk+MDgjkiIZCrwXa5GwvZ11aQTaXNo8nr9uqBWLXHMbopQOTg==
110
110
+
-----END AGE ENCRYPTED FILE-----
111
111
+
recipient: age1su5lre6favcv6gdc50yh7ecv33qgfp0tm6klunpuasa3q79kmqtsykaq0d
112
112
+
- enc: |
113
113
+
-----BEGIN AGE ENCRYPTED FILE-----
114
114
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWek9tL3ZOTVltV1FyRUpH
115
115
+
TThidkxJZk1SbE5YUVUzSTRCZ2FDNVllNlRrCldYZkUxZmkzeXNUUkNpVDF6bnMv
116
116
+
bFM3SWVoZEZialR5RVFEVk5DYnJ5R28KLS0tIDVQYzNkSCtFM2ljclNXMFcvRVJh
117
117
+
UzhQbUVMVzZZdkYwSTBWRGhScjc5dzgKEA0APZD9aYE+3SqbwLLikVNEYZxgaT+X
118
118
+
oMQGTBHdnEn9HUHN8OBy5/tQjKixrt2mo7NAaf2DsG20oLkxsExIFQ==
119
119
+
-----END AGE ENCRYPTED FILE-----
120
120
+
recipient: age1v4x5alkmvxsx5jsrwpecx0tne0ch2rwfkk0rq5w8x578j2pf5urssg5gx2
121
121
+
- enc: |
122
122
+
-----BEGIN AGE ENCRYPTED FILE-----
123
123
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3OXRqZnF6UWhlckxZcy9t
124
124
+
c080MjkwTFNlMnd4eDZvRW1mZVVIWE1oUDNnCmNQSzBsRVBsMGx6dy9hNTUzVFVN
125
125
+
VHpKY015Zlp4UHdpRkFDZVM4bENjdE0KLS0tIHRubkViUzhUZWQ4dkRlQWV0QVJN
126
126
+
QTh3Q2I2akV2NEtkdjVVN01GbzZOc0EKx7HZmpGrQAH3GgjpgXf21el7f6XD1Kbf
127
127
+
UDpZGcuaSIifX1atSfSjetDHmQ2310Oak+zkloXTbcHMM5z6c6lq6A==
128
128
+
-----END AGE ENCRYPTED FILE-----
129
129
+
recipient: age1f9hd8fu0694rc3tr6hwxz3ldfpepref937rmvqdxvvsr0kfcjdxswyzvw3
130
130
+
- enc: |
131
131
+
-----BEGIN AGE ENCRYPTED FILE-----
132
132
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1ektoNW1qaU5vNjd3dWVv
133
133
+
d1RFWnlLYnZvbGt0WXoxZEZ5M1hKRnNMZzA4Cnd1eVVzd3RQWDFJd1ljQ3FJeXFD
134
134
+
WS90cHRYekF0WVlBZUNieVNvRjF2b1EKLS0tIG9tVzNHQkx6aGlWRjF4YU5HR045
135
135
+
aDQyL1ZkSlBqaXYyQk41T1VRaG05N2sKdluliSVFRcBtrjGbqDce16FQZBxBKXY2
136
136
+
BZnaB6F9BO5ZduAprvRIr7NCNYC+kYvGy1rqEdFAMcBupdbeFaeuPg==
137
137
+
-----END AGE ENCRYPTED FILE-----
138
138
+
recipient: age157en2pt286a22pxzyugt84ak6rn2at89tpma88juqfgj84lme5csq4999g
139
139
+
- enc: |
140
140
+
-----BEGIN AGE ENCRYPTED FILE-----
141
141
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWOHNFaWdYcDFKYmFvU3NS
142
142
+
YVFUeGRvMjNpeFJkazNOZkpmR2lPQ1BFUmhzCjM4QnhhMml4SkxWL296S3Jwc3Ft
143
143
+
cHZNNVhsTjRUSlRNd2pscnpXTmQxMDQKLS0tIEdVQTMrTldIYkVxdkhzbU5vbXhT
144
144
+
VVN2OGxncGtOYWxGcXZoQ2tWY1VzVzgKrqzMT7nc6R3qk3iNnGlvASCUT83pXVew
145
145
+
g2RFB8xyX1sCcQLbRRCKcpSjKSXNLwObcu2FOSrV/x76wgl1k0N+Ow==
146
146
+
-----END AGE ENCRYPTED FILE-----
147
147
+
recipient: age1axn36h9356ena7rq6y2xa4rcm250w9h0m9pz6x0677gla0v4f4dsj92yfm
148
148
+
- enc: |
149
149
+
-----BEGIN AGE ENCRYPTED FILE-----
150
150
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZWnplbUJOR2pycE0yNlBN
151
151
+
N2xtam52T2p1QXRITVN0eDZXbjJISDI0ekhZCitiS1p2TDBxZlc2VUc2V3NEZS9Y
152
152
+
TTh6c2NUMlVYK1d3N3ZrWG91Z2E5M0kKLS0tIGNTWHVrSmFScWovamRYdGswai91
153
153
+
TmE3cmdEeVduZWExSmY5eDhrbm5objAKRqHpHr7UD5BfFodOi7v41L2bb9GmbhdS
154
154
+
+qOvHK0VHDhrz+HzU3zWq9QFAKR7/P5YKihVa08uP+el/sGFmeo+iQ==
155
155
+
-----END AGE ENCRYPTED FILE-----
156
156
+
recipient: age1xwlrtfu3du4jxg2l6eemzqeed8tflhdkjn0q5j9pzpecshtp3cpsh60l4j
157
157
+
- enc: |
158
158
+
-----BEGIN AGE ENCRYPTED FILE-----
159
159
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkelJWUFRhU1puOExXa1gz
160
160
+
ancwVjdRb3dEa2srb3pMaUxpc1NXWEUyTGl3CjFiNlJsU25GVmNiVDRIbS96MUVq
161
161
+
K0tmaDFlbEMwTnF3bzdaZldMNnAzcWcKLS0tIERzWUpDSDN3Qk5kUTZ2eCtOODRC
162
162
+
bWIxMmpTV1FBZWZJdHFxU2NlOFc5RU0KLfDQvRVhbkymPaJtQ97LU0bUlNpyJKny
163
163
+
dCuQ6esHEgIXJrLznnkwBpDAVEB7G6vhTjnz68ZxLy9j0CCFHXy1dg==
164
164
+
-----END AGE ENCRYPTED FILE-----
165
165
+
recipient: age1kgp3x48wn0dmzwqp0vdpfsdw42rej0ypkj0qavs7c2t2tgdud5zqcmhl40
166
166
+
- enc: |
167
167
+
-----BEGIN AGE ENCRYPTED FILE-----
168
168
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBTTRZaml5REIxS1VNWFVT
169
169
+
ZUdOVVRvakxrMXlQYjI5UVJOSFFnaDA2andzClF6NEU5Sk1heDMzVWIwcVFrODJ4
170
170
+
NGdKdFB4V3hmbGNQVEFtcVViQUlhaTQKLS0tIDJES1N5eXJjcDVNNkFJREZ1UFg0
171
171
+
ZzhwNzJYTWlzSndwcXdRbHZTSG4xNEUKRtu5LZXWbaR7B+6neCFovCUTLtUx7+Tw
172
172
+
eNeLY5ee493XZIKsolu5naZRowGCyaf6bU1XqiUIWlkOl1N7U6d2ig==
173
173
+
-----END AGE ENCRYPTED FILE-----
174
174
+
recipient: age1sukfru07msq8fm5ddgym23yal9lfm99090p999p09mxgrrwh9aqs6zp4fy
175
175
+
- enc: |
176
176
+
-----BEGIN AGE ENCRYPTED FILE-----
177
177
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJSm1tVUNEcTRvK0lsTGhO
178
178
+
cWRBYVZqSmxzcytMdVZaYzNWcUdYSkxVcDE4ClB0WXpWM2NzTStuSkRZeERYU3Uw
179
179
+
YmVvZjF6bVlFZXIzbGlzWHBoRkNFa0kKLS0tIFZzU3crUi9CVDNaVnJuS2ozU3U0
180
180
+
VVFMVUxqSnIvR3J4UXFCdFI2YjVISjQKL7TCCNfBOe6A3bNfU1dEd35Gpmb/YiTa
181
181
+
mehVcmCsQU3IN1SuAau4V/ChGHXM7Uod00HgPhVjf61Coq2UnJqE2g==
182
182
+
-----END AGE ENCRYPTED FILE-----
183
183
+
recipient: age1ephzrpgftmvq4cul9766q2r3mss38xu6un74ryfmw0729afysghsh0a3qg
184
184
+
- enc: |
185
185
+
-----BEGIN AGE ENCRYPTED FILE-----
186
186
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxZ3cxQkZORm9jRXZYSlFy
187
187
+
MlVlQTZ1bGlBNFlkT2l1MnREeTBPU0NRTFZNCks3MW9abFNoVytuSWpMUWowSSs0
188
188
+
Y3RENFZVRmREK05QRjRDY0hpc2Q4V00KLS0tIE1hREQ4OURWRzUwTzVFaUpUTVNW
189
189
+
L2pkRjNBZm8xbDgrSU9NOEVNZ2dIYUkKGqOOy5AV2MTf3Xsgo+6L5vJedmAQhCfO
190
190
+
K8Jgjp64vS6M4FwisRIaIWDN/33LZjBzN4WRN5CuThmraKScMBoaFA==
191
191
+
-----END AGE ENCRYPTED FILE-----
192
192
+
recipient: age1stsuakfyj3gkee4sm328ky2crmymyuzwjjmxrpvnm754sdt2zvnshf68jx
193
193
+
- enc: |
194
194
+
-----BEGIN AGE ENCRYPTED FILE-----
195
195
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBERFRiQlNKYWRyb044NURh
196
196
+
eVVFZFRLcWY4bHFsRnBkNmppOU0rTit6KzNZCk8vUllCa0c0ajkzY05XQTNLOFJy
197
197
+
OUZ1ci9XWUhDb29ad2NXNEJxck1JWncKLS0tIFdSRGFoNG9rS2hkUHpXWmZQRjI0
198
198
+
cWVaa0cyUmJRc3hZZE0yZUFJazB6QzAK5F68j437og1ZNTFs90HpxuKEDlzaZLOG
199
199
+
RWTWCw2SfpcZikeGcGMbrS6TrE5cne/N89Niu5RtAlS2BFa2bq/V5A==
200
200
+
-----END AGE ENCRYPTED FILE-----
201
201
+
recipient: age1s7ecrfntus8rvyprzhffjpqk2tmrc259knf9xqajlrqvewfp8d6svwp9pp
202
202
+
lastmodified: "2026-07-09T19:22:40Z"
203
203
+
mac: ENC[AES256_GCM,data:Mu9ZY9fhxkcwQO3yBInq4712i1DjLknKYsE3j0Gw/Iw6M74EkBRAhyXkGqTsqS78JjgjrcY3AIRemBWrK2EsOG/2uCuvM3bJO+vCwer9AIPoY2dHuk2bmBakWRUI+gxR4ad2/qaw9NGw6VQYMnuZu5yG9OBy1bbvl9zCcE+/Wz0=,iv:Xxb/y7ANsXovw2MWoGwWwQG0fQVxxHK25JQQjp2AKT4=,tag:dyPNNljCtIz0sQTu1VFoUA==,type:str]
204
204
+
unencrypted_suffix: _unencrypted
205
205
+
version: 3.13.1
+21
terraform/.terraform.lock.hcl
View file
Reviewed
···
41
41
"zh:f809ab383cca0a5f83072981c64208cbd7fa67e986a86ee02dd2c82333221e32",
42
42
]
43
43
}
44
44
+
45
45
+
provider "registry.opentofu.org/tailscale/tailscale" {
46
46
+
version = "0.29.2"
47
47
+
constraints = "~> 0.29"
48
48
+
hashes = [
49
49
+
"h1:wUSb/6AFeFi905uIodIMA11SyyboCTtDqqNhJYdHweM=",
50
50
+
"zh:32b453302a684584198a03c2e09d99ef1f6deac2fe26f8dc134d973b07fd0c23",
51
51
+
"zh:3920bb891a476f30e29248533f667a507c97e93e0a2af010b242e980d6411ca6",
52
52
+
"zh:630cceb40d8806945ad36e04517f313520ea5cee17bd36e26a8e999567835e1a",
53
53
+
"zh:6816de7f6bd3cfe341451af3be95b0af17c5539733b165f7505e88de6b730fc5",
54
54
+
"zh:729d75ab50efb675716ffa609358f6d9e80c66f7f64e01e11c8926c5293385be",
55
55
+
"zh:7d1024f621fe02b3731dc65ab20105150762b29df46e398da2c73d007bb62fb2",
56
56
+
"zh:81cf9cd23a70e5196b9d774482259c17e08471556932c348d3e9df0f7a482af1",
57
57
+
"zh:8de75b9c4b89ed1affcdb3ce32e00afaf213cfd76e93181ea4758ffd10b6eedc",
58
58
+
"zh:8f0b9b175ceb124c1cf01e6bbb660bf1bce0ff77416e026dc0679ed7156bc737",
59
59
+
"zh:8fb4cde10eb346ef9e2233591d75c39bcc2cafee578b669196192e8acdb39f12",
60
60
+
"zh:96798e58b8fcddc2add2da0fe8f1df9f913153d4cbccd68a7557b64633f5ea00",
61
61
+
"zh:a598bd615f4465b828f3b6ed2db694d8148c9469d5497922c7bc17c08b655cf4",
62
62
+
"zh:b2604d5067f3f259ff9be9bb0c4f9ec801d27c905cbf6ceafee50fc2a23f8331",
63
63
+
]
64
64
+
}
+9
terraform/providers.tf
View file
Reviewed
···
10
10
source = "cloudflare/cloudflare"
11
11
version = "~> 5.0"
12
12
}
13
13
+
tailscale = {
14
14
+
source = "tailscale/tailscale"
15
15
+
version = "~> 0.29"
16
16
+
}
13
17
}
14
18
15
19
# State in B2 alongside CNPG + Longhorn backups. Auth via AWS_ACCESS_KEY_ID /
···
46
50
provider "b2" {
47
51
# Reads B2_APPLICATION_KEY_ID and B2_APPLICATION_KEY from the environment.
48
52
}
53
53
+
54
54
+
provider "tailscale" {
55
55
+
# Reads TAILSCALE_API_KEY from the environment (API key in
56
56
+
# secrets/tailscale-api.yaml, decrypted by direnv).
57
57
+
}
+68
terraform/tailscale.tf
View file
Reviewed
···
1
1
+
# Tailscale tailnet ACL policy for narwhal-snapper.ts.net.
2
2
+
# Edit the `acl` field below and `tofu apply` to push changes.
3
3
+
# Run `tofu plan` first to preview the diff.
4
4
+
5
5
+
resource "tailscale_acl" "tailnet" {
6
6
+
acl = <<-EOT
7
7
+
{
8
8
+
"acls": [
9
9
+
{
10
10
+
"action": "accept",
11
11
+
"src": ["*"],
12
12
+
"dst": ["*:*"],
13
13
+
},
14
14
+
],
15
15
+
16
16
+
"nodeAttrs": [
17
17
+
{
18
18
+
"attr": ["mullvad"],
19
19
+
"target": ["100.106.251.41"],
20
20
+
},
21
21
+
{
22
22
+
"attr": ["mullvad"],
23
23
+
"target": ["100.76.68.70"],
24
24
+
},
25
25
+
{
26
26
+
"attr": ["mullvad"],
27
27
+
"target": ["100.124.238.118"],
28
28
+
},
29
29
+
{
30
30
+
"attr": ["mullvad"],
31
31
+
"target": ["100.115.185.117"],
32
32
+
},
33
33
+
{
34
34
+
"attr": ["mullvad"],
35
35
+
"target": ["100.64.222.8"],
36
36
+
},
37
37
+
{
38
38
+
"attr": ["mullvad"],
39
39
+
"target": ["100.87.104.118"],
40
40
+
},
41
41
+
{
42
42
+
"attr": ["mullvad"],
43
43
+
"target": ["100.100.102.26"],
44
44
+
},
45
45
+
],
46
46
+
47
47
+
"ssh": [
48
48
+
{
49
49
+
"action": "accept",
50
50
+
"src": ["autogroup:member"],
51
51
+
"dst": ["autogroup:self"],
52
52
+
"users": ["autogroup:nonroot", "root"],
53
53
+
},
54
54
+
{
55
55
+
"action": "accept",
56
56
+
"src": ["autogroup:member"],
57
57
+
"dst": ["tag:cypher"],
58
58
+
"users": ["root", "autogroup:nonroot"],
59
59
+
},
60
60
+
],
61
61
+
62
62
+
"tagOwners": {
63
63
+
"tag:k8s": ["autogroup:admin"],
64
64
+
"tag:cypher": ["autogroup:owner"],
65
65
+
},
66
66
+
}
67
67
+
EOT
68
68
+
}