homelab/pkgs/homelab-docs/deployment.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

89 lines
3.4 KiB
Nix

# homelab-docs-deployment.nix - Deployment documentation generator CLI
{
writeShellScriptBin,
jq,
}:
writeShellScriptBin "homelab-docs-deployment" ''
#!/usr/bin/env bash
set -euo pipefail
cat << 'EOF'
# Current Deployment State
> Current homelab deployment configuration
>
> Generated on: $(date)
> Working directory: $(pwd)
## Deployment Summary
EOF
# Get deployment summary
deployment_summary=$(colmena eval -E '{ nodes, pkgs, lib, ... }:
let
homelabNodes = lib.filterAttrs (name: node: node.config.homelab.enable or false) nodes;
allServices = lib.flatten (lib.mapAttrsToList (nodeName: node:
lib.attrNames (lib.filterAttrs (n: v: v.enable or false) (node.config.homelab.services or {}))
) homelabNodes);
in {
totalNodes = lib.length (lib.attrNames nodes);
homelabEnabledNodes = lib.length (lib.attrNames homelabNodes);
uniqueServices = lib.length (lib.unique allServices);
totalServiceInstances = lib.length allServices;
nodeNames = lib.attrNames nodes;
homelabNodeNames = lib.attrNames homelabNodes;
}')
total_nodes=$(echo "$deployment_summary" | ${jq}/bin/jq -r '.totalNodes')
homelab_nodes=$(echo "$deployment_summary" | ${jq}/bin/jq -r '.homelabEnabledNodes')
unique_services=$(echo "$deployment_summary" | ${jq}/bin/jq -r '.uniqueServices')
service_instances=$(echo "$deployment_summary" | ${jq}/bin/jq -r '.totalServiceInstances')
echo "| Metric | Count |"
echo "|--------|-------|"
echo "| Total Nodes | $total_nodes |"
echo "| Homelab-Enabled Nodes | $homelab_nodes |"
echo "| Unique Services | $unique_services |"
echo "| Service Instances | $service_instances |"
echo
echo "## Node Status"
echo
# Get detailed node status
node_status=$(colmena eval -E '{ nodes, pkgs, lib, ... }:
lib.mapAttrs (name: node: {
homelabEnabled = node.config.homelab.enable or false;
environment = node.config.homelab.environment or "unknown";
serviceCount = if (node.config.homelab.enable or false) then
lib.length (lib.attrNames (lib.filterAttrs (n: v: v.enable or false) (node.config.homelab.services or {})))
else 0;
monitoringEnabled = if (node.config.homelab.enable or false) then
node.config.homelab.monitoring.enable or false
else false;
backupsEnabled = if (node.config.homelab.enable or false) then
node.config.homelab.backups.enable or false
else false;
proxyEnabled = if (node.config.homelab.enable or false) then
node.config.homelab.reverseProxy.enable or false
else false;
}) nodes')
echo "| Node | Homelab | Environment | Services | Monitoring | Backups | Proxy |"
echo "|------|---------|-------------|----------|------------|---------|-------|"
echo "$node_status" | ${jq}/bin/jq -r 'to_entries[] |
[.key, (.value.homelabEnabled | if . then "" else "" end), .value.environment, (.value.serviceCount | tostring),
(.value.monitoringEnabled | if . then "" else "" end),
(.value.backupsEnabled | if . then "" else "" end),
(.value.proxyEnabled | if . then "" else "" end)] |
@tsv' | while IFS=$'\t' read -r node homelab env services monitoring backups proxy; do
echo "| \`$node\` | $homelab | $env | $services | $monitoring | $backups | $proxy |"
done
echo
echo "---"
echo
echo "*Deployment state extracted from live colmena configuration*"
''