homelab/pkgs/homelab-docs/fleet.nix
plasmagoat 73d2f44d74
Some checks failed
Test / tests (push) Failing after 2m27s
/ OpenTofu (push) Successful in 9s
updated docs
2025-07-29 16:58:09 +02:00

91 lines
2.6 KiB
Nix

{
writeShellScriptBin,
jq,
}:
writeShellScriptBin "homelab-docs-fleet" ''
#!/usr/bin/env bash
set -euo pipefail
cat << 'EOF'
# Homelab Fleet Overview
> Auto-generated fleet overview
>
> Generated on: $(date)
> Source: $(pwd)
## Fleet Statistics
EOF
# Get basic fleet stats
echo "### Basic Information"
echo
fleet_stats=$(colmena eval -E '{ nodes, pkgs, lib, ... }: {
totalNodes = lib.length (lib.attrNames nodes);
nodeNames = lib.attrNames nodes;
}')
total_nodes=$(echo "$fleet_stats" | ${jq}/bin/jq -r '.totalNodes')
node_names=$(echo "$fleet_stats" | ${jq}/bin/jq -r '.nodeNames[]' | tr '\n' ' ')
echo "| Metric | Value |"
echo "|--------|-------|"
echo "| Total Nodes | $total_nodes |"
echo "| Node Names | $node_names |"
echo
# Get homelab-enabled nodes
echo "### Homelab Configuration"
echo
homelab_info=$(colmena eval -E '{ nodes, pkgs, lib, ... }: {
homelabNodes = lib.mapAttrs (name: node: {
enabled = node.config.homelab.enable or false;
hostname = node.config.homelab.hostname or null;
environment = node.config.homelab.environment or null;
}) nodes;
}')
echo "| Node | Homelab Enabled | Hostname | Environment |"
echo "|------|----------------|----------|-------------|"
echo "$homelab_info" | ${jq}/bin/jq -r '.homelabNodes | to_entries[] |
[.key, (.value.enabled | tostring), (.value.hostname // "N/A"), (.value.environment // "N/A")] |
@tsv' | while IFS=$'\t' read -r node enabled hostname environment; do
enabled_icon=$(if [[ "$enabled" == "true" ]]; then echo ""; else echo ""; fi)
echo "| \`$node\` | $enabled_icon | $hostname | $environment |"
done
echo
# Get service distribution
echo "### Service Distribution"
echo
service_info=$(colmena eval -E '{ nodes, pkgs, lib, ... }:
lib.mapAttrs (name: node:
if (node.config.homelab.enable or false) then {
serviceCount = lib.length (lib.attrNames (lib.filterAttrs (n: v: v.enable or false) (node.config.homelab.services or {})));
serviceNames = lib.attrNames (lib.filterAttrs (n: v: v.enable or false) (node.config.homelab.services or {}));
} else {
serviceCount = 0;
serviceNames = [];
}
) nodes')
echo "| Node | Service Count | Services |"
echo "|------|---------------|----------|"
echo "$service_info" | ${jq}/bin/jq -r 'to_entries[] |
[.key, (.value.serviceCount | tostring), (.value.serviceNames | join(", "))] |
@tsv' | while IFS=$'\t' read -r node count services; do
echo "| \`$node\` | $count | $services |"
done
echo
echo "---"
echo
echo "*Fleet overview generated from colmena evaluation*"
''