spawn/ionos/openclaw.sh
A 12c2f7a8cf
feat: Add 12 missing IONOS agent scripts (#317)
Implemented the following IONOS cloud combinations:
- ionos/openclaw
- ionos/nanoclaw
- ionos/codex
- ionos/interpreter
- ionos/gemini
- ionos/amazonq
- ionos/cline
- ionos/gptme
- ionos/opencode
- ionos/plandex
- ionos/kilocode
- ionos/continue

All scripts follow the standard IONOS pattern:
1. Source ionos/lib/common.sh with local/remote fallback
2. Resolve IONOS credentials (IONOS_USERNAME, IONOS_PASSWORD)
3. Generate SSH key
4. Create server with cloud-init
5. Wait for SSH and cloud-init completion
6. Install agent (npm, pip, or curl installer)
7. Get OpenRouter API key via OAuth
8. Inject environment variables
9. Launch interactive session

Updated manifest.json to mark all 12 combinations as implemented.

Agent: gap-filler-4

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 18:00:35 -08:00

79 lines
2.5 KiB
Bash

#!/bin/bash
set -eo pipefail
# Source common functions - try local file first, fall back to remote
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
# shellcheck source=ionos/lib/common.sh
if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then
source "${SCRIPT_DIR}/lib/common.sh"
else
eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/ionos/lib/common.sh)"
fi
log_info "OpenClaw on IONOS Cloud"
echo ""
# 1. Resolve IONOS credentials
ensure_ionos_credentials
# 2. Generate SSH key
ensure_ssh_key
# 3. Get server name and create server
SERVER_NAME=$(get_server_name)
create_server "${SERVER_NAME}"
# 4. Wait for SSH and cloud-init
verify_server_connectivity "${IONOS_SERVER_IP}"
wait_for_cloud_init "${IONOS_SERVER_IP}" 60
# 5. Install openclaw using bun
log_warn "Installing openclaw..."
if ! run_server "${IONOS_SERVER_IP}" "command -v openclaw" >/dev/null 2>&1; then
run_server "${IONOS_SERVER_IP}" "bun install -g openclaw"
fi
# Verify installation succeeded
if ! run_server "${IONOS_SERVER_IP}" "command -v openclaw &> /dev/null"; then
log_error "openclaw installation verification failed"
log_error "The 'openclaw' command is not available on server ${IONOS_SERVER_IP}"
exit 1
fi
log_info "openclaw installation verified successfully"
# 6. Get OpenRouter API key
echo ""
if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then
log_info "Using OpenRouter API key from environment"
else
OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180)
fi
# 7. Get model preference
MODEL_ID=$(get_model_id_interactive "openrouter/auto" "openclaw") || exit 1
log_warn "Setting up environment variables..."
inject_env_vars_ssh "${IONOS_SERVER_IP}" upload_file run_server \
"OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \
"ANTHROPIC_API_KEY=${OPENROUTER_API_KEY}" \
"ANTHROPIC_BASE_URL=https://openrouter.ai/api"
# 8. Setup openclaw configuration
setup_openclaw_config "${OPENROUTER_API_KEY}" "${MODEL_ID}" \
"upload_file ${IONOS_SERVER_IP}" \
"run_server ${IONOS_SERVER_IP}"
echo ""
log_info "IONOS server setup completed successfully!"
log_info "Server: ${SERVER_NAME} (ID: ${IONOS_SERVER_ID}, IP: ${IONOS_SERVER_IP})"
echo ""
# 9. Start openclaw interactively
log_warn "Starting openclaw..."
log_info "First starting openclaw gateway in background..."
run_server "${IONOS_SERVER_IP}" "nohup openclaw gateway > /tmp/openclaw-gateway.log 2>&1 &"
sleep 2
log_warn "Starting openclaw tui..."
sleep 1
clear
interactive_session "${IONOS_SERVER_IP}" "source ~/.zshrc && openclaw tui"