From 7750aa7bd4dba5e5f385e25ec5fd60efbead33d7 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 23 Jul 2026 16:54:10 +0700 Subject: [PATCH] mob next [ci-skip] [ci skip] [skip ci] lastFile:modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/secret --- .nixos-test-history | 66 +++++++++ inventories/default.nix | 16 ++ modules/clan/apple-network/README.md | 4 + modules/clan/apple-network/default.nix | 139 ++++++++++++++++++ modules/clan/apple-network/flake-module.nix | 19 +++ .../clan/apple-network/tests/vm/default.nix | 76 ++++++++++ .../tests/vm/sops/machines/peer1/key.json | 6 + .../tests/vm/sops/machines/peer2/key.json | 6 + .../tests/vm/sops/machines/peer3/key.json | 6 + .../vm/sops/secrets/peer1-age.key/secret | 14 ++ .../vm/sops/secrets/peer1-age.key/users/admin | 1 + .../vm/sops/secrets/peer2-age.key/secret | 14 ++ .../vm/sops/secrets/peer2-age.key/users/admin | 1 + .../vm/sops/secrets/peer3-age.key/secret | 14 ++ .../vm/sops/secrets/peer3-age.key/users/admin | 1 + .../tests/vm/sops/users/admin/key.json | 4 + .../peer1/state-version/version/value | 1 + .../per-machine/peer1/yggdrasil/address/value | 1 + .../peer1/yggdrasil/privateKey/machines/peer1 | 1 + .../peer1/yggdrasil/privateKey/secret | 18 +++ .../peer1/yggdrasil/privateKey/users/admin | 1 + .../peer1/yggdrasil/publicKey/value | 1 + .../peer2/state-version/version/value | 1 + .../per-machine/peer2/yggdrasil/address/value | 1 + .../peer2/yggdrasil/privateKey/machines/peer2 | 1 + .../peer2/yggdrasil/privateKey/secret | 18 +++ .../peer2/yggdrasil/privateKey/users/admin | 1 + .../peer2/yggdrasil/publicKey/value | 1 + .../peer3/state-version/version/value | 1 + .../per-machine/peer3/yggdrasil/address/value | 1 + .../peer3/yggdrasil/privateKey/machines/peer3 | 1 + .../peer3/yggdrasil/privateKey/secret | 18 +++ .../peer3/yggdrasil/privateKey/users/admin | 1 + .../peer3/yggdrasil/publicKey/value | 1 + 34 files changed, 456 insertions(+) create mode 100644 .nixos-test-history create mode 100644 modules/clan/apple-network/README.md create mode 100644 modules/clan/apple-network/default.nix create mode 100644 modules/clan/apple-network/flake-module.nix create mode 100644 modules/clan/apple-network/tests/vm/default.nix create mode 100755 modules/clan/apple-network/tests/vm/sops/machines/peer1/key.json create mode 100755 modules/clan/apple-network/tests/vm/sops/machines/peer2/key.json create mode 100755 modules/clan/apple-network/tests/vm/sops/machines/peer3/key.json create mode 100644 modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/secret create mode 120000 modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/users/admin create mode 100644 modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/secret create mode 120000 modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/users/admin create mode 100644 modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/secret create mode 120000 modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/users/admin create mode 100644 modules/clan/apple-network/tests/vm/sops/users/admin/key.json create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer1/state-version/version/value create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/address/value create mode 120000 modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/machines/peer1 create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/secret create mode 120000 modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/users/admin create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/publicKey/value create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer2/state-version/version/value create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/address/value create mode 120000 modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/machines/peer2 create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/secret create mode 120000 modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/users/admin create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/publicKey/value create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer3/state-version/version/value create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/address/value create mode 120000 modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/machines/peer3 create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/secret create mode 120000 modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/users/admin create mode 100644 modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/publicKey/value diff --git a/.nixos-test-history b/.nixos-test-history new file mode 100644 index 0000000..f629f73 --- /dev/null +++ b/.nixos-test-history @@ -0,0 +1,66 @@ + +# 2026-07-03 15:16:59.761793 ++start_all() + +# 2026-07-03 15:59:47.059616 ++start_all + +# 2026-07-03 15:59:50.141067 ++start_all() + +# 2026-07-03 16:43:20.774527 ++print(peer1.execute("cat /var/run/atalkd/atalkd")) + +# 2026-07-03 16:44:26.221605 ++print(peer1.execute("journalctl -u atalkd.service")) + +# 2026-07-03 16:44:42.191918 ++print(peer1.execute("journalctl -u atalkd.service")[0]) + +# 2026-07-03 16:44:45.978651 ++print(peer1.execute("journalctl -u atalkd.service")[1]) + +# 2026-07-03 17:51:11.040778 ++start_all() + +# 2026-07-06 17:44:27.118611 ++print(peer1.execute("ip a")[1]) + +# 2026-07-06 17:45:01.863872 ++print(peer1.execute("cat /etc/systemd/network/10-apl-vxlan-peer2.netdev")[1]) + +# 2026-07-07 09:34:38.065278 ++start_all() + +# 2026-07-07 09:35:55.775140 ++print(peer1.execute("systemctl status systemd-networkd")[1]) + +# 2026-07-07 09:37:26.188445 ++print(peer1.execute("networkctl list")[1]) + +# 2026-07-07 09:42:08.366386 ++print(peer1.execute("ls -al /etc/systemd/network")[1]) + +# 2026-07-07 09:48:06.711410 ++print(peer1.execute("cat -A /etc/static/systemd/network/10-apl-vxlan-peer2.netdev")[1]) + +# 2026-07-07 09:49:18.464752 ++print(peer1.execute("cat /etc/static/systemd/network/10-apl-vxlan-peer2.network")[1]) + +# 2026-07-07 09:59:03.756589 ++start_all() + +# 2026-07-07 10:08:30.763297 ++print(peer1.execute("lsmod | grep vxlan")[1]) + +# 2026-07-07 10:25:48.657742 ++start_all() + +# 2026-07-07 14:39:33.295864 ++print(peer1.execute("cat /etc/systemd/network/10-apl-vxlan-peer2.netdev")[1]) + +# 2026-07-07 14:39:37.548180 ++print(peer1.execute("cat /etc/systemd/network/10-apl-vxlan-peer3.netdev")[1]) + +# 2026-07-07 15:13:37.987439 ++start_all() diff --git a/inventories/default.nix b/inventories/default.nix index 26944b6..1ec68f4 100644 --- a/inventories/default.nix +++ b/inventories/default.nix @@ -442,6 +442,22 @@ }; }; }; + + apple-network = { + module = { + name = "apple-network"; + input = "self"; + }; + roles.peer.machines = { + rigel = { + settings.vx_address = "169.254.0.1/24"; + }; + vega = { + settings.vx_address = "169.254.0.2/24"; + }; + sirius.settings.vx_address = "169.254.0.3/24"; + }; + }; }; }; }; diff --git a/modules/clan/apple-network/README.md b/modules/clan/apple-network/README.md new file mode 100644 index 0000000..3ac6a3f --- /dev/null +++ b/modules/clan/apple-network/README.md @@ -0,0 +1,4 @@ +# Apple Network + +This service allows atalkd instances to connect to each other over vxlan over Yggdrasil. We need to use vxlan due to the support of broadcasting it provides. The service will form a network of star-topology vxlan using the underlying Yggdrasil network. With this vxlan network, we can have a private Apple Talk network over the internet. + diff --git a/modules/clan/apple-network/default.nix b/modules/clan/apple-network/default.nix new file mode 100644 index 0000000..7c839fe --- /dev/null +++ b/modules/clan/apple-network/default.nix @@ -0,0 +1,139 @@ +{ clanLib, ... }: +{ + _class = "clan.service"; + manifest.name = "apple-network"; + manifest.description = "This service will create an instance of `atalkd` for each peer to talk to Apple machines over Apple Talk protocol and automatically connect each peer using vxlan over Yggdrasil network to achieve Apple Talk over internet experience"; + manifest.readme = builtins.readFile ./README.md; + manifest.categories = [ "Network" ]; + + roles.peer = { + description = "A gateway machine that allow classic Apple machines to connect to other Apple machines over the internet"; + + interface = + { lib, ... }: + { + options = { + zone_name = lib.mkOption { + type = with lib.types; str; + description = "Zone name for Apple Talk protocol"; + default = "Default"; + }; + }; + }; + + perInstance = + { roles, settings, ... }: + { + nixosModule = + { + lib, + config, + pkgs, + ... + }: + let + vxlanPort = 4789; + + getYggdrasilIP = + machineName: + if config.clan.core.vars.generators.yggdrasil.files.address ? value then + clanLib.getPublicValue { + flake = config.clan.core.settings.directory; + machine = machineName; + generator = "yggdrasil"; + file = "address"; + default = null; + } + else + throw "clanService/yggdrasil is required"; + + noSelfPeers = builtins.filter (peerName: peerName != config.clan.core.settings.machine.name) ( + lib.mapAttrsToList (machineName: _: machineName) roles.peer.machines + ); + + sortedPeers = builtins.sort (x: y: x < y) ( + lib.mapAttrsToList (machineName: _: machineName) roles.peer.machines + ); + + getMachineIndex = machineName: lib.lists.findFirstIndex (x: x == machineName) null sortedPeers; + + selfVXAddress = "192.168.254.${ + lib.toString ((getMachineIndex config.clan.core.settings.machine.name) + 1) + }/24"; + in + { + + services.atalkd = { + enable = true; + interfaces = { + vxlan.config = '' + -router -phase 2 -net 1 -zone "${settings.zone_name}" + ''; + }; + }; + + networking.useNetworkd = true; + + networking.firewall.interfaces."ygg".allowedUDPPorts = [ vxlanPort ]; + + boot.kernelModules = [ "vxlan" ]; + + systemd.network.netdevs = + builtins.listToAttrs ( + map ( + peerName: + (lib.nameValuePair "10-apl-vxlan-${peerName}" { + enable = true; + netdevConfig = { + Name = "vxlan-${peerName}"; + Kind = "vxlan"; + }; + vxlanConfig = { + VNI = (getMachineIndex config.clan.core.settings.machine.name) + (getMachineIndex peerName); + Remote = getYggdrasilIP peerName; + DestinationPort = vxlanPort; + Independent = true; + }; + }) + ) noSelfPeers + ) + // { + "10-apl-vxlan" = { + enable = true; + netdevConfig = { + Kind = "bridge"; + Name = "vxlan"; + }; + bridgeConfig = { + STP = true; + }; + }; + }; + + systemd.network.networks = + builtins.listToAttrs ( + map ( + peerName: + (lib.nameValuePair "10-apl-vxlan-${peerName}" { + enable = true; + matchConfig.Name = "vxlan-${peerName}"; + networkConfig.Bridge = "vxlan"; + }) + ) noSelfPeers + ) + // { + "10-apl-vxlan" = { + enable = true; + matchConfig.Name = "vxlan"; + address = [ selfVXAddress ]; + }; + }; + + environment.systemPackages = [ + pkgs.netatalk + pkgs.bridge-utils + ]; + }; + }; + }; +} diff --git a/modules/clan/apple-network/flake-module.nix b/modules/clan/apple-network/flake-module.nix new file mode 100644 index 0000000..b8bb2e9 --- /dev/null +++ b/modules/clan/apple-network/flake-module.nix @@ -0,0 +1,19 @@ +{ inputs, self, ... }: +let + module = ./default.nix; +in +{ + clan.modules = { + apple-network = module; + }; + perSystem = + { ... }: + { + clan.nixosTests.service-apple-network = { + imports = [ ./tests/vm/default.nix ]; + _module.args = { inherit self inputs; }; + + clan.modules."@clan/apple-network" = module; + }; + }; +} diff --git a/modules/clan/apple-network/tests/vm/default.nix b/modules/clan/apple-network/tests/vm/default.nix new file mode 100644 index 0000000..fc965ee --- /dev/null +++ b/modules/clan/apple-network/tests/vm/default.nix @@ -0,0 +1,76 @@ +{ + self, + lib, + config, + hostPkgs, + ... +}: +{ + name = "service-apple-network"; + + result.update-vars = + let + relativeDir = lib.removePrefix "${self}/" (toString config.clan.directory); + in + hostPkgs.writeShellScriptBin "update-vars" '' + set -x + export PRJ_ROOT=$(git rev-parse --show-toplevel) + ${ + self.inputs.clan-core.packages.${hostPkgs.system}.clan-cli + }/bin/clan-generate-test-vars $PRJ_ROOT/${relativeDir} ${config.name} + ''; + + clan = { + directory = ./.; + test.useContainers = false; + + inventory = { + meta.domain = "test.clan"; + + machines.peer1 = { }; + machines.peer2 = { }; + machines.peer3 = { }; + + instances = { + apple-network = { + module.name = "@clan/apple-network"; + module.input = "self"; + roles.peer.machines = { + peer1 = { }; + peer2 = { }; + peer3 = { }; + }; + }; + yggdrasil = { + module.name = "yggdrasil"; + roles.default.tags.all = { }; + roles.default.settings.extraPeers = [ + "tls://ygg.jjolly.dev:3443" + "tls://[2602:fc24:18:7a42::1]:993" + "tcp://leo.node.3dt.net:9002" + "tcp://ygg-kcmo.incognet.io:8883" + ]; + }; + }; + }; + }; + + nodes = { + peer1 = { }; + peer2 = { }; + peer3 = { }; + }; + + testScript = _: '' + # cannot test connectivity due to Yggdrasil's establishment + start_all() + peer1.wait_for_unit("atalkd") + peer1.succeed("systemctl status atalkd") + + peer2.wait_for_unit("atalkd") + peer2.succeed("systemctl status atalkd") + + peer3.wait_for_unit("atalkd") + peer3.succeed("systemctl status atalkd") + ''; +} diff --git a/modules/clan/apple-network/tests/vm/sops/machines/peer1/key.json b/modules/clan/apple-network/tests/vm/sops/machines/peer1/key.json new file mode 100755 index 0000000..cd6cdde --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/machines/peer1/key.json @@ -0,0 +1,6 @@ +[ + { + "publickey": "age1f92zl8y70z5w9gn0l5leg2fhyvxy6m93dfh7n6ltgvuu9nyg6epsrw6t8x", + "type": "age" + } +] \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/sops/machines/peer2/key.json b/modules/clan/apple-network/tests/vm/sops/machines/peer2/key.json new file mode 100755 index 0000000..d4f07f1 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/machines/peer2/key.json @@ -0,0 +1,6 @@ +[ + { + "publickey": "age1u36fr87cru90vfznf5szasya9nhvvseh4atk8zsdj0rrsu0nnvwqsyt8g6", + "type": "age" + } +] \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/sops/machines/peer3/key.json b/modules/clan/apple-network/tests/vm/sops/machines/peer3/key.json new file mode 100755 index 0000000..cfc67f3 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/machines/peer3/key.json @@ -0,0 +1,6 @@ +[ + { + "publickey": "age1rka3368ltqc787xw99uu762lqfk7qxld9265u2t62fpxnp9xhufsc2q5rw", + "type": "age" + } +] \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/secret b/modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/secret new file mode 100644 index 0000000..f224d28 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/secret @@ -0,0 +1,14 @@ +{ + "data": "ENC[AES256_GCM,data:hC4Lle6mXuTFq//wBHUTyH3X778u/gYJSXJOiQ7xUb+gnC8beH1olxL2ZhtUiMkktzhsPM/j6cxhltPp25UTeJnUOcoYesqZcp8=,iv:WOx2P2Cu4v58xM9ePjAw1gdA0fFnGG2UqEXH2iksGoo=,tag:43n1ibVSy2AeS9f5qQBKNQ==,type:str]", + "sops": { + "age": [ + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtT244N1Q3Zk9pRjFFQlUr\ncDExSTBwSWk5UXVyMjhWclQwSFZaYnpTRFY0CnE5YStVdzMrS3BKYzYvc3V3QVFY\nbDVwVytoNERveU1xQllqNUFGV2hYbGMKLS0tIDJSUmkwMUQzL3Y0MU5qZTJ3eFN3\nNGdwamM1UDBPdzhvSWsyZzR6anZ0eFEKKnr1/7rf3fH1i7KUoZdilLDgb44K2qzn\nI9Y+7FbV4gzQUzKWjAQeFN37Z4Qiuy0xJVA0lw8KvM+NCxSZDfh3kw==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg" + } + ], + "lastmodified": "2026-07-03T10:46:56Z", + "mac": "ENC[AES256_GCM,data:hmpbOtra6EyNiPg7EsA3F4elHEO87JPUr4VKVppvzUwLX1HSj67WrU6k3rEoJT+k7Hq1lxnAzDEckSG1fUOap11rk8ksp1IAGR0+yqykC/Qj/Nl8wXqP84gr49bJK6xE/DDdCRCcBff2d6IpnehyEr8fGFEZbWGygblec8U8GPo=,iv:+M1C3rL22foowr0VD80jwrNFb5xz4k5JQ/DJm4ThKHk=,tag:wabFAC5NTCVGfIQQzm0yGg==,type:str]", + "version": "3.13.1" + } +} diff --git a/modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/users/admin b/modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/users/admin new file mode 120000 index 0000000..9e21a99 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/secrets/peer1-age.key/users/admin @@ -0,0 +1 @@ +../../../users/admin \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/secret b/modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/secret new file mode 100644 index 0000000..9a01ca6 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/secret @@ -0,0 +1,14 @@ +{ + "data": "ENC[AES256_GCM,data:ndWIEOqP2ybCN7Ak5g+8q3YG5rLQ7OuSv/vCbnMA8AK6Lby2JMGRkRGysqJdyEF7eh4w7PpZ/AtKPtPbUucjeTB5+8g76PPJTBE=,iv:EYy0GGqEBmIc5rSWP7Zleb5eQ0JzTz84HqeJPpCSpxk=,tag:iMgTUb9+wxE9S2kKoOEvsQ==,type:str]", + "sops": { + "age": [ + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQTEF6OXN4K0dHdXhWWmt2\neG5wdkNIc2F0UnFEeHFLQkdTWkFpUWhTa0NBCmw2N2J1T0FJVE9JR3VBRWV0THh5\nVEZlbVZrcXAwK3BsYXFOZUF6c3lRSkUKLS0tIFRCQzNUaGFHdERWNWR4enVWRGpx\nbDEzRU9jWHgxWHovaENjbkFlZERIbkkKvAW31gTJg9izrWuAMeDHS9SWPQYtxRBY\necDCn8QORFrnDdxEusCnGJrAU4kmS3Y3CwSHCtEijs3JdIgg9wl/MA==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg" + } + ], + "lastmodified": "2026-07-03T10:47:04Z", + "mac": "ENC[AES256_GCM,data:y1U2vsdqR97fPAnp6iZiLY1KbWYmgDqgZ5bwIkWPCr7Gjjrn+qV+sc2T1BTVz3Zo0JOz4ScCc+f6snVsFKdCDU/NmDVFt/sqyH4NHUPRQ3StsQim8C7IkSwUtm3EhrqpLYFD21MEjrYYdHMHbWybxrOI0qI6mDwZymHJFeCLdQA=,iv:lVvPn69eQE/huwDmwePepfpi2l9ZOPQO7W20o4AJBFQ=,tag:7VPfjKZsBVJTZxNwTcI6sg==,type:str]", + "version": "3.13.1" + } +} diff --git a/modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/users/admin b/modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/users/admin new file mode 120000 index 0000000..9e21a99 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/secrets/peer2-age.key/users/admin @@ -0,0 +1 @@ +../../../users/admin \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/secret b/modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/secret new file mode 100644 index 0000000..eb78711 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/secret @@ -0,0 +1,14 @@ +{ + "data": "ENC[AES256_GCM,data:JPdetkhtF9eSmgEfCO2exXlGQ5KWLeIM3mnW5BfyTY8r0PxWSEGAwBskC1SiDdRERWB2VEbPiPgCNXMnGaYlDqSdZN6R9wSFvsQ=,iv:qGveNhUtgxvKnmdsPoPpffKyi5srlq0Pd6aW283B5C0=,tag:TcJsCrBlzfjXvztcRaxYFQ==,type:str]", + "sops": { + "age": [ + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvdjNHa1RlcFJHazB5TXFu\nOUQ4REpCZm5Yc3ZhcVhwT1FqRHlvbnoxZWlFCnNrVUEyK2ZYSmlacmJ2b2QrclZl\nSDV1eWxXVmJxZlhMMXgrTWtjcjVhQlkKLS0tIHZPN3pCUVBLQmpRVGx6SDBQNDZo\nSitheGhXNGl5QW9HTGNsTTdTdWVwaE0KfuM5xZOPbR1lxkJPJUOVrtlW5Ujobemp\nid40reDqxKQxP3khJv8lf9ZoN8LAx2Iwh0DeAl+UJpsoVWgS7uI2qQ==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg" + } + ], + "lastmodified": "2026-07-07T04:54:10Z", + "mac": "ENC[AES256_GCM,data:Tt8yqzfAnSDe2n7KDt1Z/D73hkS1w7DsqIh+s5WljLzar9PEt5vUCLb8DIvBwITyzGAoHH1ym3v3NrnJWCdxajKExTMBf4aY3MJCtykeCG37701S/KxumjTW9/fJw74gcET5I6NafTWb6H5XHsrRaQX1Xnspcs8B7uLGZZ28dSM=,iv:Fo5UPVhnjuOx6Cp4grofHOiD2pm0TXuRRuoTwvxKn1s=,tag:VQ/TF1TiyJADj7/3RwPCAg==,type:str]", + "version": "3.13.1" + } +} diff --git a/modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/users/admin b/modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/users/admin new file mode 120000 index 0000000..9e21a99 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/secrets/peer3-age.key/users/admin @@ -0,0 +1 @@ +../../../users/admin \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/sops/users/admin/key.json b/modules/clan/apple-network/tests/vm/sops/users/admin/key.json new file mode 100644 index 0000000..e408aa9 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/sops/users/admin/key.json @@ -0,0 +1,4 @@ +{ + "publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg", + "type": "age" +} diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/state-version/version/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/state-version/version/value new file mode 100644 index 0000000..fbadb25 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/state-version/version/value @@ -0,0 +1 @@ +26.11 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/address/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/address/value new file mode 100644 index 0000000..28c0b2d --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/address/value @@ -0,0 +1 @@ +200:e6cc:c86:f02d:b0d5:fba9:9b2c:eb77 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/machines/peer1 b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/machines/peer1 new file mode 120000 index 0000000..3e5f3fa --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/machines/peer1 @@ -0,0 +1 @@ +../../../../../../sops/machines/peer1 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/secret b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/secret new file mode 100644 index 0000000..400e50d --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/secret @@ -0,0 +1,18 @@ +{ + "data": "ENC[AES256_GCM,data:6YDp5S2TzEnhDgGhcz8cA3uBsfDt0Oc4JpztB1JUcg/+tDBbeaQN4MLxuZKstXn2Hb1mYtBLlX0vHw++T181Js2sIznyfC1lr68GOvQAp4NYgf23dXpdZk/CMPNUMiGOYVwKWQ/Z0/p0azJ6xV29dYQcM4Q9hys=,iv:Ijzz8hm0looCWoSpjg/rYKp9jhvzRuLboKWHrlwVeFA=,tag:kJcH/1Pu+9q9f2J68LETug==,type:str]", + "sops": { + "age": [ + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYNDNEL3kvdEpEMjYyOFJG\nMk5adU04M3hxa21jTTZNM2dQREpmUlVES1NvCjh6eDNFZ1hzUVlTY3Nidnp3TkYr\nRVl4TFlrNUE3dVIzZzg2VWMwTFBYUXMKLS0tIFE0dVFQQmxwOFJ6YkdaQlh6dUlW\nTi8rdXdQbGR1eXpLcTdOandqQmxka3cKImbmJQo2YMYMSQD8kNTgol3VJ4YGIaoz\nl3AY4u/fobg5qlzVQwV33G0/Wf72Z2aTjSLnP4thnasQ89PdYvs7hA==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1f92zl8y70z5w9gn0l5leg2fhyvxy6m93dfh7n6ltgvuu9nyg6epsrw6t8x" + }, + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiaWw5SU9KWmJnVVVmTVpr\nL1V6RnRYUGg2UnhXR1BnVTh5eFhnNFpidGdjCmdMeU1nZkZmTTVwbkNaVElFa0Z4\nVkdGdjc4c2lPWGNrVGxocE9iQUZ3QTAKLS0tIHIzTzRRbXVkM3I4ZVRxeSs5eHV5\nTUxOaytzb2MxQ2UybkVCYWVWVmVEcUEKPeK+CC7r3CP5BJqg9thWNHWjPBp/ueHU\nRif6T79kqf+c3B34qXwR0zfyM1+a0r9GAVVC2/q+Ha/As5sPJU39ww==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg" + } + ], + "lastmodified": "2026-07-03T10:46:56Z", + "mac": "ENC[AES256_GCM,data:PffiPU1GR9DojTb7TxzBkpivKV2ybmmq9h4pOOyq7p5BAIPF+JSe+BDtbItQ+Gn5LnitQRUVvhat8E2iYfz3JgNxNKcsNFU/mWtCz3PlqyiuRzUBtEL3zYfhdMi8hYYlVdfMumaK3VMk+b4uDGExR+MpURL97TFku47qRbzbILs=,iv:3//fj7WtIX2QNYB9ub1JKAFIn5vJeuZl6rqaEsX0oQc=,tag:njU+WAVq7xBgE0sna2dMKA==,type:str]", + "version": "3.13.1" + } +} diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/users/admin b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/users/admin new file mode 120000 index 0000000..ca714e1 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/privateKey/users/admin @@ -0,0 +1 @@ +../../../../../../sops/users/admin \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/publicKey/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/publicKey/value new file mode 100644 index 0000000..9887be9 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer1/yggdrasil/publicKey/value @@ -0,0 +1 @@ +8c99f9bc87e92795022b32698a440d6f9fe01d1110f867de8176bb190b92acab \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/state-version/version/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/state-version/version/value new file mode 100644 index 0000000..fbadb25 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/state-version/version/value @@ -0,0 +1 @@ +26.11 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/address/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/address/value new file mode 100644 index 0000000..22cc6b8 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/address/value @@ -0,0 +1 @@ +200:eb95:7d1b:3ac3:62e7:24af:2274:3771 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/machines/peer2 b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/machines/peer2 new file mode 120000 index 0000000..6370c90 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/machines/peer2 @@ -0,0 +1 @@ +../../../../../../sops/machines/peer2 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/secret b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/secret new file mode 100644 index 0000000..e000bea --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/secret @@ -0,0 +1,18 @@ +{ + "data": "ENC[AES256_GCM,data:vOwMqT12A5ap5hRvCGTjTUX4sXKO3N7KE8eQ+/SCcBWndU9/b2AehiNgplWWMGcYdmeDL9qI8V2pPkgBkQ/tWH6N8DccSM/zQzrBUkXvRApl6hvNZAWuBVf/P4MW4/EbRGtMg2tEXkaPDtRn2TsDK7ygmXmqArI=,iv:FkxFx/ClAftLu85S6Uq3ZOom+YDOpeWGlYLOFBmFfnk=,tag:zprw62qiu+hmLZEZbnqYXA==,type:str]", + "sops": { + "age": [ + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0WVB1M2ttd0FocGhTSjNo\nUDFIcmpsL051TndWbkJVakJHbUxjY3Q3NjM0CnkrbFlHS1E4bkZJQTIvMDJ3VDFv\nNW1OdmwvalBEelN2d3YwbHVqTW94OFEKLS0tIGtpOWxCM29xdXhQL2Yzb094OG1n\nT21mc25yU1dJL29vekRHdldzdDR3dEkKoZ1dPRaPg8iVsuec6IhV3cLPchokV2wv\nu6qb92hsLQuyPHDA01Oey0jxmaYMQGtAVjo2zEM+E+zrKY+f2pHIUQ==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg" + }, + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArcmo5d2x6c3J0YTkwMGJE\nanphd2FiUjdGdmdNeW0rL0FpcTVSM3dublZ3CnphajNVV2YrTGl2a3ZqMTJKeU4v\nTzZRS2F5MlA5Ny84cFFoNWZQZnpBZTgKLS0tIHVKQUJWcmlPdy9GNXNBYnpJcEVC\nNmJVMlpvSzZPdk1JY2hIZVEvc3cwV2MKE/cMJU/j5g62njJ49AfnLutmxkpz/gxX\nIqWe1m7Uxl/awVFa7F8N7TUkd0jLbAGXZaonDjiBxOTwg/jr/apnuQ==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1u36fr87cru90vfznf5szasya9nhvvseh4atk8zsdj0rrsu0nnvwqsyt8g6" + } + ], + "lastmodified": "2026-07-03T10:47:04Z", + "mac": "ENC[AES256_GCM,data:wiIkwEDwGJZe0u8qLHthPkCXubeIGyHV8yBo8CsSengLVTOtRZ877zTrFvE74ATF1pGE3DFJ5qGRrOGgKJ4VOl043LbEBs0bxZC495pPMPYszimp2UAf/XE3QWlNi9p4Ce/kbvUDd0W3SRt4hIv6HOLWApiRoqfS2qSMUnBQeW0=,iv:Hs7EysUnje/iWZRhJLlqf8wuFJnIMpWfXWHrilfmM5I=,tag:Rgj9x4ZOM2fihKKNQ4ux3g==,type:str]", + "version": "3.13.1" + } +} diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/users/admin b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/users/admin new file mode 120000 index 0000000..ca714e1 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/privateKey/users/admin @@ -0,0 +1 @@ +../../../../../../sops/users/admin \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/publicKey/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/publicKey/value new file mode 100644 index 0000000..438ba89 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer2/yggdrasil/publicKey/value @@ -0,0 +1 @@ +8a354172629e4e8c6da86ec5e447411e4238cf7bb439b798fae56509a82d7472 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/state-version/version/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/state-version/version/value new file mode 100644 index 0000000..fbadb25 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/state-version/version/value @@ -0,0 +1 @@ +26.11 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/address/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/address/value new file mode 100644 index 0000000..9a06ce9 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/address/value @@ -0,0 +1 @@ +200:3dcd:9b0d:103c:f953:1e8:e3a2:ed90 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/machines/peer3 b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/machines/peer3 new file mode 120000 index 0000000..356dfec --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/machines/peer3 @@ -0,0 +1 @@ +../../../../../../sops/machines/peer3 \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/secret b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/secret new file mode 100644 index 0000000..f0035d5 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/secret @@ -0,0 +1,18 @@ +{ + "data": "ENC[AES256_GCM,data:7no9ZnfatNLEykz+JOUExxmaRzBr7B5PEcevETySJWHTCCjSULdRb2KLxbXP5OKWSuJbR8pJ+p+nZuyr7aOTyXrU+fgwf/Pff4KGaZbKf1t3HJun8wJ2q62uaFYu8ACbNFfwIzJ51SPGcO7IHxfjWn5k9zG7av4=,iv:+VNvFKAJ+HDCGZciug8SKHOcM1JZQUAbZpRT5en4xcU=,tag:3kcDHWIs9ITzTKDiyyYhnQ==,type:str]", + "sops": { + "age": [ + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvZ0VFcGhPR0NrMGU4dStU\nZGpnMHZmbUF0R0NFNWQzNGVpZXhYQ24xNXk0CnJIYmJYMnBmeURLZytBcXNRNG5u\nZzk4cXdPdnJIU0JVam1NWFA3TkhuWFkKLS0tIDZYUEVGMUtCQWdSM3k4WEZhdUt3\naElkc3o5SXlFYTJLNUpGZ0ptNm96M2MKYKW5emktK2M+IYX0v/swCV1fgrQXQVlb\nmz11rN5fJWV5wvLcTtyU9imgZLB9MfRMyIYlHzD2HPbW+zr8Fe+bBQ==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg" + }, + { + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZVDVxY3JrWk1TY3ZsazNz\naVl4Vk1vRUdkRTdlaDU1TE15dC96ZHlxQ1ZBCmYvSmh1QlBNRnJyRy9kcDR0cXhY\neDdPUXZ6b2FkWnBXbzA4bzU1aFo3bEUKLS0tIHMrb05Oa3FrRzh5VHN1RWRmUU9W\ndGZUYTVVQkIzM3FRRHp6NXlEdEU0VTgK7ibTaEcvbVTQjcbgeylu2s5tmI5kAadM\nFGiOgJhDFuzbHxXIEQlsCBIaXe6LlGhBo41VZbMxme5py6nJFTBHKg==\n-----END AGE ENCRYPTED FILE-----\n", + "recipient": "age1rka3368ltqc787xw99uu762lqfk7qxld9265u2t62fpxnp9xhufsc2q5rw" + } + ], + "lastmodified": "2026-07-07T04:54:10Z", + "mac": "ENC[AES256_GCM,data:gonhuGY61G3Gdtj7q23aTNYU95fjLMz2uVTsSX+Hw10LGUTEMM8LF/Phae9kr5BZKD8BYaIgH32As2+n0B9jZ4WV77A5hUe2NJze9d0A40P2MtMh9xFWWh7yEXXnx5dy1UDrthL2LBa7ebPspuaC0mFhRHdoJK3J2W1m41PGjZc=,iv:H4yNuE8i3UxVjAUIpnaFX6i8/DaO4uIlHrEY9VaSiRs=,tag:9lJtixSNv7tpox0V3ZoNnA==,type:str]", + "version": "3.13.1" + } +} diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/users/admin b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/users/admin new file mode 120000 index 0000000..ca714e1 --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/privateKey/users/admin @@ -0,0 +1 @@ +../../../../../../sops/users/admin \ No newline at end of file diff --git a/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/publicKey/value b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/publicKey/value new file mode 100644 index 0000000..f843a9c --- /dev/null +++ b/modules/clan/apple-network/tests/vm/vars/per-machine/peer3/yggdrasil/publicKey/value @@ -0,0 +1 @@ +e119327977e183567f0b8e2e8937c9d04708e296beed57792a1b6935eacf69d9 \ No newline at end of file