Madagascar / scripts / cluster-nodes.sh
f16725e 3 months ago History
1 contributor
77 lines | 1.764kb
#!/bin/bash

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
CONFIG_PATH="${ROOT_DIR}/cluster-context/madagascar.json"
CLUSTER_NAME="madagascar"
FORMAT="ip"

usage() {
    cat <<EOF
Usage: $0 [--cluster <name>] [--format ip|name|name=ip]

Reads node information from cluster-context/madagascar.json.
EOF
}

while [[ $# -gt 0 ]]; do
    case "$1" in
        --cluster)
            CLUSTER_NAME="$2"
            shift 2
            ;;
        --format)
            FORMAT="$2"
            shift 2
            ;;
        -h|--help)
            usage
            exit 0
            ;;
        *)
            echo "ERROR: unknown option: $1" >&2
            usage
            exit 1
            ;;
    esac
done

if [[ ! -f "${CONFIG_PATH}" ]]; then
    echo "ERROR: missing cluster config: ${CONFIG_PATH}" >&2
    exit 1
fi

case "${FORMAT}" in
    ip)
        jq -r --arg cluster "${CLUSTER_NAME}" '
            .clusters[$cluster].nodes
            | to_entries[]
            | (
                .value.ip
                // .value.wan.vmbr443.address
                // empty
              )
            | split("/")[0]
        ' "${CONFIG_PATH}"
        ;;
    name)
        jq -r --arg cluster "${CLUSTER_NAME}" '
            .clusters[$cluster].nodes
            | to_entries[]
            | .key
        ' "${CONFIG_PATH}"
        ;;
    name=ip)
        jq -r --arg cluster "${CLUSTER_NAME}" '
            .clusters[$cluster].nodes
            | to_entries[]
            | .key + "=" + ((.value.ip // .value.wan.vmbr443.address // empty) | split("/")[0])
        ' "${CONFIG_PATH}"
        ;;
    *)
        echo "ERROR: unsupported format: ${FORMAT}" >&2
        exit 1
        ;;
esac