test: add remote runner vagrant scenario
This commit is contained in:
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
apt-get update
|
||||
apt-get install -y ca-certificates curl git unzip
|
||||
|
||||
if ! command -v deno >/dev/null 2>&1; then
|
||||
curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
|
||||
fi
|
||||
|
||||
if [ -d /uptime.link ]; then
|
||||
chown -R vagrant:vagrant /uptime.link
|
||||
fi
|
||||
Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
: "${UPTIMELINK_CONTROLLER_URL:?UPTIMELINK_CONTROLLER_URL is required}"
|
||||
: "${UPTIMELINK_RUNNER_ID:?UPTIMELINK_RUNNER_ID is required}"
|
||||
: "${UPTIMELINK_RUNNER_TOKEN:?UPTIMELINK_RUNNER_TOKEN is required}"
|
||||
|
||||
target_port="${UPTIMELINK_TARGET_PORT:-18081}"
|
||||
|
||||
install -d -m 0755 /opt/uptimerunner /etc/uptimerunner
|
||||
|
||||
cd /uptime.link/uptimerunner
|
||||
deno compile \
|
||||
--allow-net \
|
||||
--allow-read \
|
||||
--allow-write \
|
||||
--allow-run \
|
||||
--allow-env \
|
||||
--allow-sys \
|
||||
--output /opt/uptimerunner/uptimerunner \
|
||||
mod.ts
|
||||
|
||||
chmod +x /opt/uptimerunner/uptimerunner
|
||||
ln -sf /opt/uptimerunner/uptimerunner /usr/local/bin/uptimerunner
|
||||
|
||||
cat >/opt/uptimerunner/target-server.ts <<'DENO'
|
||||
const port = Number(Deno.env.get('UPTIMELINK_TARGET_PORT') ?? '18081');
|
||||
|
||||
Deno.serve({ hostname: '127.0.0.1', port }, () => {
|
||||
return new Response('runner-local healthy\n', {
|
||||
headers: { 'content-type': 'text/plain' },
|
||||
});
|
||||
});
|
||||
DENO
|
||||
|
||||
cat >/etc/systemd/system/uptimerunner-target.service <<SYSTEMD
|
||||
[Unit]
|
||||
Description=uptime.link Vagrant target service
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/local/bin/deno run --allow-net --allow-env /opt/uptimerunner/target-server.ts
|
||||
Restart=always
|
||||
RestartSec=2
|
||||
User=root
|
||||
Group=root
|
||||
Environment=UPTIMELINK_TARGET_PORT=${target_port}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
SYSTEMD
|
||||
|
||||
uptimerunner config write \
|
||||
--url "${UPTIMELINK_CONTROLLER_URL}" \
|
||||
--runner-id "${UPTIMELINK_RUNNER_ID}" \
|
||||
--token "${UPTIMELINK_RUNNER_TOKEN}" \
|
||||
--labels 'scenario:vagrant,role:internal' \
|
||||
--interval 1000 \
|
||||
--concurrency 2
|
||||
|
||||
uptimerunner service install
|
||||
systemctl daemon-reload
|
||||
systemctl reset-failed uptimerunner-target.service || true
|
||||
systemctl enable --now uptimerunner-target.service
|
||||
|
||||
for _ in $(seq 1 30); do
|
||||
if curl -fsS "http://127.0.0.1:${target_port}/health" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
curl -fsS "http://127.0.0.1:${target_port}/health" >/dev/null
|
||||
systemctl restart uptimerunner.service
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
controller_ip="${UPTIMELINK_VAGRANT_CONTROLLER_IP:-192.168.56.10}"
|
||||
controller_port="${UPTIMELINK_VAGRANT_CONTROLLER_PORT:-8080}"
|
||||
provider="${UPTIMELINK_VAGRANT_PROVIDER:-libvirt}"
|
||||
runner_id="${UPTIMELINK_VAGRANT_RUNNER_ID:-vagrant-runner-1}"
|
||||
runner_token="${UPTIMELINK_VAGRANT_RUNNER_TOKEN:-vagrant-token}"
|
||||
target_port="${UPTIMELINK_VAGRANT_TARGET_PORT:-18081}"
|
||||
|
||||
if ! command -v vagrant >/dev/null 2>&1; then
|
||||
echo 'Vagrant is required for scenario:uptimerunner-vagrant.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "${provider}" in
|
||||
libvirt)
|
||||
if [[ "$(vagrant plugin list)" != *'vagrant-libvirt'* ]]; then
|
||||
echo 'The vagrant-libvirt plugin is required for UPTIMELINK_VAGRANT_PROVIDER=libvirt.' >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ -S /var/run/libvirt/libvirt-sock ] && [ ! -w /var/run/libvirt/libvirt-sock ]; then
|
||||
echo 'Cannot access /var/run/libvirt/libvirt-sock.' >&2
|
||||
if getent group libvirt | grep -q "$(id -un)"; then
|
||||
echo 'The current user is listed in libvirt, but this shell session has not picked up that group.' >&2
|
||||
echo "Retry without restarting using: sg libvirt -c 'pnpm scenario:uptimerunner-vagrant'" >&2
|
||||
else
|
||||
echo 'Add the current user to the libvirt group and start a new login session, or use another provider.' >&2
|
||||
echo 'Example: sudo usermod -aG libvirt "$USER"' >&2
|
||||
fi
|
||||
echo 'Alternative: UPTIMELINK_VAGRANT_PROVIDER=virtualbox pnpm scenario:uptimerunner-vagrant' >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
virtualbox)
|
||||
if ! command -v VBoxManage >/dev/null 2>&1; then
|
||||
echo 'VirtualBox is required for UPTIMELINK_VAGRANT_PROVIDER=virtualbox.' >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
cleanup() {
|
||||
vagrant ssh runner -c 'sudo systemctl stop uptimerunner.service >/dev/null 2>&1 || true' >/dev/null 2>&1 || true
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
vagrant up --provider="${provider}" --no-provision controller runner
|
||||
vagrant rsync
|
||||
vagrant provision controller
|
||||
vagrant provision runner
|
||||
|
||||
vagrant ssh controller -c "cd /uptime.link/testing && UPTIMELINK_CONTROLLER_HOST=0.0.0.0 UPTIMELINK_CONTROLLER_PORT=${controller_port} UPTIMELINK_RUNNER_ID=${runner_id} UPTIMELINK_RUNNER_TOKEN=${runner_token} UPTIMELINK_TARGET_PORT=${target_port} UPTIMELINK_CONTROLLER_URL=http://${controller_ip}:${controller_port} deno run --allow-all --sloppy-imports --config /uptime.link/uptimerunner/deno.json scenarios/uptimerunner-vagrant/controller.ts"
|
||||
Reference in New Issue
Block a user