diff --git a/atlanticnet/lib/common.sh b/atlanticnet/lib/common.sh index 30e94994..eb41bd70 100644 --- a/atlanticnet/lib/common.sh +++ b/atlanticnet/lib/common.sh @@ -104,58 +104,10 @@ test_atlanticnet_credentials() { # Ensure Atlantic.Net API credentials are available ensure_atlanticnet_credentials() { - local config_file="$HOME/.config/spawn/atlanticnet.json" - - # Try environment variables first - if [[ -n "${ATLANTICNET_API_KEY:-}" && -n "${ATLANTICNET_API_PRIVATE_KEY:-}" ]]; then - if test_atlanticnet_credentials; then - return 0 - fi - log_warn "Environment variables set but authentication failed" - fi - - # Try config file - if [[ -f "$config_file" ]]; then - log_step "Loading Atlantic.Net credentials from $config_file" - ATLANTICNET_API_KEY=$(python3 -c "import json,sys; print(json.load(open(sys.argv[1])).get('api_key',''))" "$config_file") - ATLANTICNET_API_PRIVATE_KEY=$(python3 -c "import json,sys; print(json.load(open(sys.argv[1])).get('api_private_key',''))" "$config_file") - export ATLANTICNET_API_KEY ATLANTICNET_API_PRIVATE_KEY - - if [[ -n "${ATLANTICNET_API_KEY}" && -n "${ATLANTICNET_API_PRIVATE_KEY}" ]]; then - if test_atlanticnet_credentials; then - return 0 - fi - log_warn "Saved credentials are invalid" - fi - fi - - # Prompt for credentials - log_info "" - log_info "Atlantic.Net Cloud API credentials required" - log_info "" - log_info "Get your credentials at: https://cloud.atlantic.net/ → API Info" - log_info "" - - ATLANTICNET_API_KEY=$(safe_read "API Access Key ID: ") - ATLANTICNET_API_PRIVATE_KEY=$(safe_read "API Private Key: ") - export ATLANTICNET_API_KEY ATLANTICNET_API_PRIVATE_KEY - - log_step "Testing credentials..." - if ! test_atlanticnet_credentials; then - log_error "Invalid credentials" - return 1 - fi - - log_info "Credentials valid!" - - # Save to config file - mkdir -p "$(dirname "$config_file")" - python3 -c "import json,sys; json.dump({'api_key': sys.argv[1], 'api_private_key': sys.argv[2]}, open(sys.argv[3], 'w'), indent=2)" \ - "$ATLANTICNET_API_KEY" "$ATLANTICNET_API_PRIVATE_KEY" "$config_file" - chmod 600 "$config_file" - log_info "Credentials saved to $config_file" - - return 0 + ensure_multi_credentials "Atlantic.Net" "$HOME/.config/spawn/atlanticnet.json" \ + "https://cloud.atlantic.net/ -> API Info" test_atlanticnet_credentials \ + "ATLANTICNET_API_KEY:api_key:API Access Key ID" \ + "ATLANTICNET_API_PRIVATE_KEY:api_private_key:API Private Key" } # Check if SSH key is registered with Atlantic.Net diff --git a/ramnode/lib/common.sh b/ramnode/lib/common.sh index 263e0c63..3da90601 100755 --- a/ramnode/lib/common.sh +++ b/ramnode/lib/common.sh @@ -277,42 +277,14 @@ print(json.dumps(body)) " "$@" } -# Poll the RamNode API until the server has an IPv4 address +# Wait for RamNode instance to become ACTIVE and get its IP # Sets RAMNODE_SERVER_IP on success _ramnode_wait_for_ip() { - log_step "Waiting for IP address..." - local max_attempts=30 - local attempt=0 - while [[ $attempt -lt $max_attempts ]]; do - sleep 2 - local server_info - server_info=$(ramnode_compute_api GET "/servers/$RAMNODE_SERVER_ID") - - RAMNODE_SERVER_IP=$(echo "$server_info" | python3 -c " -import json, sys -data = json.loads(sys.stdin.read()) -addresses = data.get('server', {}).get('addresses', {}) -for net_name, addrs in addresses.items(): - for addr in addrs: - if addr.get('version') == 4: - print(addr['addr']) - sys.exit(0) -" 2>/dev/null || echo "") - - if [[ -n "$RAMNODE_SERVER_IP" ]]; then - export RAMNODE_SERVER_IP - log_info "IP address assigned: $RAMNODE_SERVER_IP" - return 0 - fi - - attempt=$((attempt + 1)) - if [[ $((attempt % 5)) -eq 0 ]]; then - log_step "Still waiting for IP address... (attempt ${attempt}/${max_attempts})" - fi - done - - log_error "Timeout waiting for IP address after ${max_attempts} attempts" - return 1 + INSTANCE_STATUS_POLL_DELAY=2 generic_wait_for_instance ramnode_compute_api \ + "/servers/$RAMNODE_SERVER_ID" "ACTIVE" \ + "d['server']['status']" \ + "next(addr['addr'] for addrs in d['server']['addresses'].values() for addr in addrs if addr.get('version')==4)" \ + RAMNODE_SERVER_IP "RamNode instance" 30 } # Parse server ID from create response, or log error and return 1