Hybrid cloud cluster monorepo with Ansible, K8s, NixOS, and Terraform. cute.haus
ansible terraform nix k8s
0

Configure Feed

Select the types of activity you want to include in your feed.

terraform: add tailscale provider

Aly Raffauf (Jul 9, 2026, 3:29 PM EDT) 5490d0a6 c8eb2a23

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