91 lines
2.6 KiB
Nix
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*"
|
|
''
|