Some checks are pending
offline / test (push) Waiting to run
LXC 511–513 (nats-a/b/c on 10.10.10.21–23, vmbr1 only) form cluster verae with replicas=3. Host loopback 127.0.0.1:4222 is unchanged.
69 lines
2.7 KiB
Bash
Executable file
69 lines
2.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Create three distinct Proxmox LXC guests and start a JetStream cluster on vmbr1.
|
|
# Does not touch host loopback NATS (127.0.0.1:4222) or vmbr0.
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
# shellcheck disable=SC1091
|
|
. "$ROOT/cluster.env"
|
|
# shellcheck disable=SC1091
|
|
. "$ROOT/scripts/lib-ct.sh"
|
|
ct_require_proxmox
|
|
|
|
mapfile -t rows < <(printf '%s\n' "$NODES" | awk 'NF==3 {print}')
|
|
[[ ${#rows[@]} -eq 3 ]] || { echo "need exactly 3 nodes in cluster.env" >&2; exit 1; }
|
|
|
|
declare -a VMIDS NAMES IPS
|
|
for row in "${rows[@]}"; do
|
|
# shellcheck disable=SC2086
|
|
set -- $row
|
|
VMIDS+=("$1"); NAMES+=("$2"); IPS+=("$3")
|
|
done
|
|
|
|
i=0
|
|
for i in 0 1 2; do
|
|
ct_ensure "${VMIDS[$i]}" "${NAMES[$i]}" "${IPS[$i]}"
|
|
ct_bootstrap_user "${VMIDS[$i]}"
|
|
done
|
|
|
|
# Install nats-server + conf + systemd on each guest
|
|
for i in 0 1 2; do
|
|
routes=""
|
|
for j in 0 1 2; do
|
|
[[ $i -eq $j ]] && continue
|
|
routes="${routes} nats-route://${IPS[$j]}:6222"$'\n'
|
|
done
|
|
tmpconf="$(mktemp)"
|
|
NAME="${NAMES[$i]}" IP="${IPS[$i]}" CLUSTER="$CLUSTER_NAME" ROUTES="$routes" \
|
|
python3 - "$ROOT/conf/nats.conf.tmpl" "$tmpconf" <<'PY'
|
|
import os, pathlib, sys
|
|
t = pathlib.Path(sys.argv[1]).read_text()
|
|
out = t.replace("{{NAME}}", os.environ["NAME"]).replace("{{IP}}", os.environ["IP"]).replace("{{CLUSTER}}", os.environ["CLUSTER"]).replace("{{ROUTES}}", os.environ["ROUTES"])
|
|
pathlib.Path(sys.argv[2]).write_text(out)
|
|
PY
|
|
sudo pct exec "${VMIDS[$i]}" -- bash -c 'cat > /tmp/nats.conf' < "$tmpconf"
|
|
sudo pct exec "${VMIDS[$i]}" -- bash -c 'cat > /tmp/nats-server.service' < "$ROOT/systemd/nats-server.service"
|
|
rm -f "$tmpconf"
|
|
sudo pct exec "${VMIDS[$i]}" -- bash -lc "
|
|
set -e
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
id nats >/dev/null 2>&1 || useradd -r -s /usr/sbin/nologin nats
|
|
install -d -m 755 -o nats -g nats /var/lib/nats/jetstream /etc/nats
|
|
mv /tmp/nats.conf /etc/nats/nats.conf
|
|
chown root:root /etc/nats/nats.conf
|
|
chmod 644 /etc/nats/nats.conf
|
|
if [[ ! -x /usr/local/bin/nats-server ]]; then
|
|
curl -fsSL https://github.com/nats-io/nats-server/releases/download/v${NATS_VER}/nats-server-v${NATS_VER}-linux-amd64.tar.gz -o /tmp/nats.tgz
|
|
tar -xzf /tmp/nats.tgz -C /tmp
|
|
install -m 0755 /tmp/nats-server-v${NATS_VER}-linux-amd64/nats-server /usr/local/bin/nats-server
|
|
rm -rf /tmp/nats.tgz /tmp/nats-server-v${NATS_VER}-linux-amd64
|
|
fi
|
|
install -m 644 /tmp/nats-server.service /etc/systemd/system/nats-server.service
|
|
systemctl daemon-reload
|
|
systemctl enable --now nats-server
|
|
"
|
|
echo "nats-server ${NAMES[$i]} ${IPS[$i]}:4222 cluster ${IPS[$i]}:6222"
|
|
done
|
|
|
|
echo "cluster client URL: nats://${IPS[0]}:4222,nats://${IPS[1]}:4222,nats://${IPS[2]}:4222"
|
|
echo "lab loopback NATS on the host is unchanged (127.0.0.1:4222)"
|
|
echo "next: bash $ROOT/scripts/test.sh"
|