mirror of
https://github.com/OpenRouterTeam/spawn.git
synced 2026-05-22 19:54:22 +00:00
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>
79 lines
2.5 KiB
Bash
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"
|