Files
swarm-master/ansible/run-playbook.sh
William Valentin aceeb7b542 Initial commit — OpenClaw VM infrastructure
- ansible/: VM provisioning playbooks and roles
  - provision-vm.yml: create KVM VM from Ubuntu cloud image
  - install.yml: install OpenClaw on guest (upstream)
  - customize.yml: swappiness, virtiofs fstab, linger
  - roles/vm/: libvirt domain XML, cloud-init templates
  - inventory.yml + host_vars/zap.yml: zap instance config
- backup-openclaw-vm.sh: daily rsync + MinIO upload
- restore-openclaw-vm.sh: full redeploy from scratch
- README.md: full operational documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:18:31 -07:00

96 lines
3.4 KiB
Bash

#!/bin/bash
set -e
# Run OpenClaw playbook from local source or installed collection
OPENCLAW_USER="${OPENCLAW_USER:-openclaw}"
# Keep instructions aligned when user overrides openclaw_user via -e.
extract_openclaw_user_from_args() {
local prev_is_extra=0
local arg
for arg in "$@"; do
if [ "$prev_is_extra" -eq 1 ]; then
if [[ "$arg" =~ (^|[[:space:]])openclaw_user=([^[:space:]]+) ]]; then
OPENCLAW_USER="${BASH_REMATCH[2]}"
fi
prev_is_extra=0
continue
fi
case "$arg" in
-e|--extra-vars)
prev_is_extra=1
;;
-e=*|--extra-vars=*)
local extra="${arg#*=}"
if [[ "$extra" =~ (^|[[:space:]])openclaw_user=([^[:space:]]+) ]]; then
OPENCLAW_USER="${BASH_REMATCH[2]}"
fi
;;
esac
done
}
extract_openclaw_user_from_args "$@"
# Determine playbook source
if [ -f "playbooks/install.yml" ]; then
echo "Running from local source..."
PLAYBOOK="playbook.yml"
export ANSIBLE_ROLES_PATH="${PWD}/roles:${ANSIBLE_ROLES_PATH}"
elif ansible-galaxy collection list 2>/dev/null | grep -q "openclaw.installer"; then
echo "Running from installed collection..."
PLAYBOOK="openclaw.installer.install"
else
echo "Error: Collection not installed and not running from source"
echo "Install with: ansible-galaxy collection install -r requirements.yml"
exit 1
fi
# Run the Ansible playbook
if [ "$EUID" -eq 0 ]; then
ansible-playbook "$PLAYBOOK" -e ansible_become=false "$@"
PLAYBOOK_EXIT=$?
else
if sudo -n true 2>/dev/null; then
echo "Passwordless sudo detected. Running without become password prompt."
ansible-playbook "$PLAYBOOK" "$@"
PLAYBOOK_EXIT=$?
else
echo "Sudo password required. Prompting for become password."
ansible-playbook "$PLAYBOOK" --ask-become-pass "$@"
PLAYBOOK_EXIT=$?
fi
fi
# After playbook completes successfully, show instructions
if [ $PLAYBOOK_EXIT -eq 0 ]; then
echo ""
echo "═══════════════════════════════════════════════════════════"
echo "✅ INSTALLATION COMPLETE!"
echo "═══════════════════════════════════════════════════════════"
echo ""
echo "🔄 SWITCH TO OPENCLAW USER with:"
echo ""
echo " sudo su - ${OPENCLAW_USER}"
echo ""
echo " OR (alternative):"
echo ""
echo " sudo -u ${OPENCLAW_USER} -i"
echo ""
echo "This will switch you to the OpenClaw user with a proper"
echo "login shell (loads .bashrc, sets environment correctly)."
echo ""
echo "After switching, you'll see the next setup steps:"
echo " • Configure OpenClaw (~/.openclaw/config.yml)"
echo " • Login to messaging provider (WhatsApp/Telegram/Signal)"
echo " • Test the gateway"
echo ""
echo "═══════════════════════════════════════════════════════════"
echo ""
else
echo "❌ Playbook failed with exit code $PLAYBOOK_EXIT"
exit $PLAYBOOK_EXIT
fi