mirror of
https://github.com/OpenRouterTeam/spawn.git
synced 2026-05-02 22:00:19 +00:00
feat: Add RamNode cloud provider with OpenStack API support (#408)
Add RamNode budget VPS cloud provider ($0.006/hr) with full OpenStack API integration. Implementation: - ramnode/lib/common.sh: OpenStack Keystone v3 auth + Compute API wrapper - ramnode/claude.sh, ramnode/aider.sh, ramnode/goose.sh: 3 agent scripts - manifest.json: Added ramnode cloud entry + 15 matrix entries (3 implemented) - ramnode/README.md: Complete documentation - test/record.sh: Live cycle testing for RamNode (_live_ramnode function) - test/mock.sh: URL stripping for Identity/Compute/Network APIs Technical details: - Auth: RAMNODE_USERNAME + RAMNODE_PASSWORD + RAMNODE_PROJECT_ID - APIs: Identity (5000/v3), Compute (8774/v2.1), Network (9696/v2.0) - Token-based authentication (X-Auth-Token header) - Server provisioning with cloud-init via base64-encoded userdata - SSH key management via OpenStack keypairs API Agent: cloud-scout-1 Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
This commit is contained in:
parent
93a043cef8
commit
1576577ed8
8 changed files with 1057 additions and 3 deletions
152
ramnode/README.md
Normal file
152
ramnode/README.md
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
# RamNode Cloud
|
||||
|
||||
Budget VPS cloud provider with OpenStack API compatibility and hourly billing.
|
||||
|
||||
## Overview
|
||||
|
||||
- **Provider**: [RamNode](https://www.ramnode.com/)
|
||||
- **Pricing**: Hourly billing starting at $0.006/hr (~$4.38/month for 1GB instance)
|
||||
- **API**: Full OpenStack API compatibility
|
||||
- **Billing**: Pay-as-you-go with $3 minimum cloud credit
|
||||
- **Regions**: Multiple US and international locations
|
||||
|
||||
## Authentication
|
||||
|
||||
RamNode uses OpenStack authentication with username, password, and project ID.
|
||||
|
||||
### Getting Credentials
|
||||
|
||||
1. Go to [RamNode Cloud Control Panel](https://manage.ramnode.com/)
|
||||
2. Navigate to: Cloud → API Users
|
||||
3. Create or select an API user
|
||||
4. Note your credentials:
|
||||
- **Username**: Your API username
|
||||
- **Password**: Your API password
|
||||
- **Project ID**: Your cloud project ID
|
||||
|
||||
### Setting Credentials
|
||||
|
||||
**Option 1: Environment Variables**
|
||||
```bash
|
||||
export RAMNODE_USERNAME="your-username"
|
||||
export RAMNODE_PASSWORD="your-password"
|
||||
export RAMNODE_PROJECT_ID="your-project-id"
|
||||
```
|
||||
|
||||
**Option 2: Interactive Prompt**
|
||||
|
||||
If credentials are not set, the script will prompt for them and save to `~/.config/spawn/ramnode.json`.
|
||||
|
||||
## Usage
|
||||
|
||||
### Run Claude Code
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/ramnode/claude.sh)
|
||||
```
|
||||
|
||||
### Run Aider
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/ramnode/aider.sh)
|
||||
```
|
||||
|
||||
### Run Goose
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/ramnode/goose.sh)
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
- `RAMNODE_USERNAME` - Your RamNode API username
|
||||
- `RAMNODE_PASSWORD` - Your RamNode API password
|
||||
- `RAMNODE_PROJECT_ID` - Your cloud project ID
|
||||
- `RAMNODE_SERVER_NAME` - Server name (optional, will prompt if not set)
|
||||
- `RAMNODE_FLAVOR` - Instance flavor (optional, defaults to interactive picker)
|
||||
- `OPENROUTER_API_KEY` - OpenRouter API key (optional, will use OAuth if not set)
|
||||
|
||||
### Instance Flavors
|
||||
|
||||
RamNode offers various instance sizes. Common options:
|
||||
- **1GB** - 1 vCPU, 1GB RAM (~$0.006/hr)
|
||||
- **2GB** - 1 vCPU, 2GB RAM (~$0.012/hr)
|
||||
- **4GB** - 2 vCPU, 4GB RAM (~$0.024/hr)
|
||||
|
||||
The script will show available flavors interactively if `RAMNODE_FLAVOR` is not set.
|
||||
|
||||
## Features
|
||||
|
||||
- ✅ Full OpenStack API compatibility
|
||||
- ✅ Hourly billing (billed by the second)
|
||||
- ✅ SSH key management via API
|
||||
- ✅ Cloud-init support for automated setup
|
||||
- ✅ Multiple instance sizes
|
||||
- ✅ Low minimum cost ($3 cloud credit)
|
||||
|
||||
## Pricing
|
||||
|
||||
RamNode uses hourly billing with per-second granularity:
|
||||
|
||||
- **1GB instance**: ~$0.006/hr = ~$4.38/month
|
||||
- **2GB instance**: ~$0.012/hr = ~$8.76/month
|
||||
- **4GB instance**: ~$0.024/hr = ~$17.52/month
|
||||
|
||||
Billing is deducted from your cloud credit balance. Minimum deposit: $3.
|
||||
|
||||
## Technical Details
|
||||
|
||||
### API Endpoints
|
||||
|
||||
- **Identity**: `https://openstack.ramnode.com:5000/v3`
|
||||
- **Compute**: `https://openstack.ramnode.com:8774/v2.1`
|
||||
- **Network**: `https://openstack.ramnode.com:9696/v2.0`
|
||||
|
||||
### Authentication
|
||||
|
||||
RamNode uses OpenStack Keystone v3 authentication with password grant:
|
||||
1. POST to `/v3/auth/tokens` with username/password/project
|
||||
2. Receive `X-Subject-Token` header
|
||||
3. Use token in subsequent API calls
|
||||
|
||||
### Server Creation
|
||||
|
||||
Uses OpenStack Compute API:
|
||||
- Creates server with Ubuntu 24.04 image
|
||||
- Injects cloud-init via `user_data` (base64 encoded)
|
||||
- Attaches SSH key for root access
|
||||
- Waits for IPv4 address assignment
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Insufficient Cloud Credit
|
||||
|
||||
**Error**: "Insufficient cloud credit"
|
||||
|
||||
**Fix**: Add at least $3 in cloud credit through the [RamNode Client Area](https://manage.ramnode.com/).
|
||||
|
||||
### Authentication Failed
|
||||
|
||||
**Error**: "Authentication failed"
|
||||
|
||||
**Fix**: Verify credentials at Cloud Control Panel → API Users. Ensure username, password, and project ID are correct.
|
||||
|
||||
### SSH Connection Timeout
|
||||
|
||||
**Error**: "SSH connectivity check failed"
|
||||
|
||||
**Fix**: Wait a few minutes for the server to fully boot and configure cloud-init. If the issue persists, check that your SSH key was properly registered.
|
||||
|
||||
## Implemented Agents
|
||||
|
||||
- ✅ Claude Code
|
||||
- ✅ Aider
|
||||
- ✅ Goose
|
||||
|
||||
## Documentation
|
||||
|
||||
- [RamNode Documentation](https://www.ramnode.com/docs/)
|
||||
- [OpenStack API Documentation](https://docs.openstack.org/api-quick-start/)
|
||||
- [Cloud Control Panel](https://manage.ramnode.com/)
|
||||
Loading…
Add table
Add a link
Reference in a new issue