From 2802db394f1e6a9469b7eaca22289bca6dea7360 Mon Sep 17 00:00:00 2001 From: Jermeiah S Date: Sun, 22 Jun 2025 17:15:45 -0400 Subject: [PATCH] feature: added ip-gather command for improved workflow --- container_ips.json | 7 +++++++ modules/flake/devshell.nix | 8 +++++++- packages/ip-gather/default.nix | 36 ++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 container_ips.json create mode 100644 packages/ip-gather/default.nix diff --git a/container_ips.json b/container_ips.json new file mode 100644 index 0000000..d248de1 --- /dev/null +++ b/container_ips.json @@ -0,0 +1,7 @@ +{ + "arma-reforger-tofu": "201:61dd:8232:55d9:f6ee:2594:d661:b202", + "base-tofu": "200:d642:9eee:8f38:d9f3:8272:817d:75da", + "forgejo-runner-tofu": "201:ea26:66c7:657b:3599:63a6:c66c:d388", + "observer-tofu": "200:b938:d405:92df:a6e:1ffd:5213:26b", + "tofu": "200:1978:6503:e6f0:2dbe:11fd:74b:ff64" +} diff --git a/modules/flake/devshell.nix b/modules/flake/devshell.nix index 4684ac8..7a267b7 100644 --- a/modules/flake/devshell.nix +++ b/modules/flake/devshell.nix @@ -1,11 +1,17 @@ { perSystem = - { pkgs, ... }: + { + self', + pkgs, + system, + ... + }: { devShells.default = pkgs.mkShell { name = "nixos-unified-template-shell"; meta.description = "Shell environment for modifying this Nix configuration"; packages = with pkgs; [ + self'.packages.ip-gather openssh deploy-rs ssh-to-age diff --git a/packages/ip-gather/default.nix b/packages/ip-gather/default.nix new file mode 100644 index 0000000..839a48d --- /dev/null +++ b/packages/ip-gather/default.nix @@ -0,0 +1,36 @@ +# incus-ip-collector.nix +{ + writeShellScriptBin, +}: + +writeShellScriptBin "ip-gather" '' + set -euo pipefail + + remote_host="''${1:-"administrator@olympus"}" + output_file="''${2:-container_ips.json}" + + generate_json() { + echo "{" + first=true + for c in $(incus list --format csv -c n | awk '!/NAME/ {print $1}'); do + ip=$(incus exec "$c" -- ip -6 addr show dev ygg0 2>/dev/null | awk '/inet6/ {print $2}' | cut -d/ -f1 | grep -v '^fe80' | head -n1) + if [ -n "$ip" ]; then + [ "$first" = false ] && echo "," + echo -n " \"$c\": \"$ip\"" + first=false + fi + done + echo "" + echo "}" + } + + if [ -n "''${remote_host}" ]; then + # Execute remotely and save to local file + ssh "$remote_host" "$(declare -f generate_json); generate_json" > "$output_file" + else + # Execute locally and save to file + generate_json > "$output_file" + fi + + echo "Container IPs saved to: $output_file" +''