346 lines
10 KiB
Markdown
346 lines
10 KiB
Markdown
---
|
|
name: linode-api
|
|
description: Linode API Documentation
|
|
---
|
|
|
|
# Linode-Api Skill
|
|
|
|
Comprehensive assistance with the Linode API - a RESTful API for programmatically managing Linode cloud infrastructure including compute instances, networking, storage, domains, and billing.
|
|
|
|
## When to Use This Skill
|
|
|
|
This skill should be triggered when:
|
|
- Working with Linode cloud infrastructure programmatically
|
|
- Creating, managing, or monitoring Linode instances (virtual machines)
|
|
- Automating Linode infrastructure with API calls
|
|
- Implementing Linode OAuth applications
|
|
- Managing Linode account, billing, or payment methods
|
|
- Working with Linode networking (DNS, NodeBalancers, VLANs)
|
|
- Debugging Linode API authentication or request issues
|
|
- Implementing infrastructure as code with Linode
|
|
- Integrating Linode services into applications
|
|
- Managing Linode Kubernetes Engine (LKE) clusters
|
|
|
|
## Quick Reference
|
|
|
|
### Authentication with Personal Access Token
|
|
|
|
```python
|
|
from linode import LinodeClient
|
|
|
|
# Initialize client with your personal access token
|
|
token = "your-personal-access-token"
|
|
client = LinodeClient(token)
|
|
```
|
|
|
|
**Getting a token:** Log into cloud.linode.com → Profile → "Create a Personal Access Token"
|
|
|
|
### List All Linode Instances
|
|
|
|
```python
|
|
# Retrieve all Linodes on your account
|
|
my_linodes = client.linode.get_instances()
|
|
|
|
# Iterate and display instance labels
|
|
for linode in my_linodes:
|
|
print(linode.label)
|
|
```
|
|
|
|
### Create a New Linode Instance (Python)
|
|
|
|
```python
|
|
# Get available regions
|
|
available_regions = client.get_regions()
|
|
chosen_region = available_regions[0]
|
|
|
|
# Create instance with region, type, and image
|
|
new_linode, password = client.linode.create_instance(
|
|
chosen_region,
|
|
'g5-standard-4',
|
|
image='linode/debian9'
|
|
)
|
|
|
|
# Display SSH connection info
|
|
print(f"ssh root@{new_linode.ipv4[0]} - {password}")
|
|
```
|
|
|
|
### Create a Linode Instance (cURL)
|
|
|
|
```bash
|
|
curl -X POST https://api.linode.com/v4/linode/instances \
|
|
-H "Authorization: Bearer <your-token>" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"type": "g5-standard-2",
|
|
"region": "us-east",
|
|
"image": "linode/debian12",
|
|
"root_pass": "secure_password_here",
|
|
"label": "prod-web-1"
|
|
}'
|
|
```
|
|
|
|
### Get Account Information
|
|
|
|
```bash
|
|
curl https://api.linode.com/v4/account \
|
|
-H "Authorization: Bearer <your-token>"
|
|
```
|
|
|
|
### List Invoices
|
|
|
|
```bash
|
|
curl https://api.linode.com/v4/account/invoices \
|
|
-H "Authorization: Bearer <your-token>"
|
|
```
|
|
|
|
### Check Regional Service Availability
|
|
|
|
```bash
|
|
curl https://api.linode.com/v4/account/availability \
|
|
-H "Authorization: Bearer <your-token>"
|
|
```
|
|
|
|
### Install Python Library
|
|
|
|
```bash
|
|
# Install the official Python library
|
|
pip install linode-api
|
|
|
|
# Or from source
|
|
git clone git@github.com:Linode/python-linode-api
|
|
cd python-linode-api
|
|
python setup.py install
|
|
```
|
|
|
|
### Basic Python Setup Pattern
|
|
|
|
```python
|
|
from linode import LinodeClient
|
|
|
|
# Initialize the client
|
|
token = "your-personal-access-token"
|
|
client = LinodeClient(token)
|
|
|
|
# Now you can access resources
|
|
regions = client.get_regions()
|
|
instances = client.linode.get_instances()
|
|
```
|
|
|
|
### Authentication Header Format (REST)
|
|
|
|
All API requests to non-public resources must include an Authorization header:
|
|
|
|
```
|
|
Authorization: Bearer <your-personal-access-token>
|
|
```
|
|
|
|
## Key Concepts
|
|
|
|
### API Versions
|
|
- **v4**: Current stable API version (base URL: `https://api.linode.com/v4`)
|
|
- **v4beta**: Beta features and endpoints (use with caution in production)
|
|
|
|
### Authentication
|
|
The Linode API uses **Personal Access Tokens** (PATs) for authentication. Tokens can have different permission scopes (read/write) for different resource types. Always keep tokens secure and never commit them to version control.
|
|
|
|
### Pagination
|
|
API responses use envelope-based pagination with metadata:
|
|
- `page`: Current page number
|
|
- `pages`: Total number of pages
|
|
- `results`: Number of results per page
|
|
|
|
### Filtering
|
|
The API supports advanced filtering via the `X-Filter` header with operators:
|
|
- `+gt`: Greater than
|
|
- `+lte`: Less than or equal
|
|
- `+or`: Logical OR
|
|
- Complex nested conditions supported
|
|
|
|
### Instance Types
|
|
Common Linode instance types:
|
|
- **Shared CPU**: `g5-standard-1`, `g5-standard-2`, etc. (cost-effective for general workloads)
|
|
- **Dedicated CPU**: `g6-dedicated-2`, etc. (guaranteed CPU resources)
|
|
- **High Memory**: `g6-highmem-1`, etc. (memory-intensive applications)
|
|
|
|
### Regions
|
|
Linode has global data centers. Common regions:
|
|
- `us-east`: Newark, NJ
|
|
- `us-west`: Fremont, CA
|
|
- `eu-west`: London, UK
|
|
- `ap-south`: Singapore
|
|
- Many more available via `GET /regions` endpoint
|
|
|
|
### Images
|
|
Supported operating system images:
|
|
- `linode/debian12`: Debian 12
|
|
- `linode/ubuntu22.04`: Ubuntu 22.04 LTS
|
|
- `linode/centos-stream9`: CentOS Stream 9
|
|
- Custom images also supported
|
|
|
|
## Reference Files
|
|
|
|
This skill includes comprehensive documentation in `references/`:
|
|
|
|
- **api.md** - Complete OpenAPI specification reference with all endpoints, request/response schemas, and authentication details
|
|
|
|
Use `view references/api.md` when you need:
|
|
- Detailed endpoint specifications
|
|
- Request/response schema definitions
|
|
- Available HTTP methods for each endpoint
|
|
- Field validation rules and constraints
|
|
- OAuth client configuration details
|
|
- Beta feature documentation
|
|
|
|
## Working with This Skill
|
|
|
|
### For Beginners
|
|
|
|
1. **Start with authentication**: Generate a Personal Access Token from cloud.linode.com
|
|
2. **Test basic endpoints**: Try `GET /account` to verify your token works
|
|
3. **Use the Python library**: It's easier than raw REST API calls for getting started
|
|
4. **Start small**: List existing resources before creating new ones
|
|
5. **Check regional availability**: Ensure services are available in your chosen region
|
|
|
|
### For API Integration
|
|
|
|
1. **Review authentication patterns** in the Quick Reference section
|
|
2. **Use the Python client library** for rapid development
|
|
3. **Implement proper error handling** for API rate limits and validation errors
|
|
4. **Store tokens securely** using environment variables or secret management
|
|
5. **Test in non-production** accounts first
|
|
|
|
### For Infrastructure Automation
|
|
|
|
1. **Explore the full API specification** in references/api.md
|
|
2. **Use filtering and pagination** for large resource queries
|
|
3. **Implement idempotent operations** where possible
|
|
4. **Monitor API usage** to stay within rate limits
|
|
5. **Use OAuth** for multi-user applications
|
|
|
|
### Common Workflows
|
|
|
|
**Basic Instance Management:**
|
|
1. List available regions → Choose region
|
|
2. List available instance types → Choose type
|
|
3. List available images → Choose image
|
|
4. Create instance with chosen parameters
|
|
5. Monitor instance status until "running"
|
|
6. Retrieve IP address and connect
|
|
|
|
**Account Management:**
|
|
1. Get account information
|
|
2. List invoices and payment history
|
|
3. Check service availability by region
|
|
4. Manage OAuth clients for applications
|
|
5. View notifications and events
|
|
|
|
## Resources
|
|
|
|
### Official Documentation
|
|
- **API Reference**: https://www.linode.com/docs/api/
|
|
- **Getting Started Guide**: https://www.linode.com/docs/products/tools/api/get-started/
|
|
- **Python Library Docs**: https://python-linode-api.readthedocs.io/
|
|
|
|
### Code Libraries
|
|
- **Python**: `linode-api` (official)
|
|
- **JavaScript/Node.js**: Available via npm
|
|
- **Go, PHP, Ruby**: Community libraries available
|
|
|
|
### references/
|
|
The `references/api.md` file contains:
|
|
- Complete OpenAPI specification (JSON format)
|
|
- All available endpoints organized by resource type
|
|
- Detailed request/response schemas
|
|
- Authentication requirements per endpoint
|
|
- Field validation rules and data types
|
|
- Pagination and filtering documentation
|
|
- Beta feature flags
|
|
|
|
## Best Practices
|
|
|
|
### Security
|
|
- Never hardcode API tokens in your code
|
|
- Use environment variables: `token = os.getenv('LINODE_API_TOKEN')`
|
|
- Set appropriate token scopes (read-only when possible)
|
|
- Rotate tokens regularly
|
|
- Revoke unused tokens
|
|
|
|
### Error Handling
|
|
- Handle HTTP 429 (rate limit) with exponential backoff
|
|
- Validate input before making API calls
|
|
- Check for field validation errors in 400 responses
|
|
- Implement retry logic for transient failures
|
|
|
|
### Performance
|
|
- Use pagination for large result sets
|
|
- Implement caching for infrequently-changing data (regions, types)
|
|
- Use batch operations when available
|
|
- Filter results server-side using X-Filter header
|
|
|
|
### Code Organization
|
|
- Create wrapper functions for common operations
|
|
- Separate configuration from application code
|
|
- Use type hints with the Python library
|
|
- Document token permission requirements
|
|
|
|
## Notes
|
|
|
|
- This skill was automatically generated from the official Linode API OpenAPI specification
|
|
- The API uses standard REST conventions (GET, POST, PUT, DELETE)
|
|
- All non-public endpoints require authentication via Bearer token
|
|
- Rate limits apply - implement appropriate backoff strategies
|
|
- Beta endpoints (v4beta) may change without notice
|
|
- The Python library handles pagination and authentication automatically
|
|
|
|
## Common Operations Reference
|
|
|
|
### Compute Instances
|
|
- List instances: `GET /linode/instances`
|
|
- Create instance: `POST /linode/instances`
|
|
- Get instance: `GET /linode/instances/{linodeId}`
|
|
- Update instance: `PUT /linode/instances/{linodeId}`
|
|
- Delete instance: `DELETE /linode/instances/{linodeId}`
|
|
- Reboot instance: `POST /linode/instances/{linodeId}/reboot`
|
|
|
|
### Account & Billing
|
|
- Get account: `GET /account`
|
|
- List invoices: `GET /account/invoices`
|
|
- List payments: `GET /account/payments`
|
|
- Get settings: `GET /account/settings`
|
|
|
|
### Networking
|
|
- List NodeBalancers: `GET /nodebalancers`
|
|
- List Firewalls: `GET /networking/firewalls`
|
|
- List VLANs: `GET /networking/vlans`
|
|
|
|
### Storage
|
|
- List volumes: `GET /volumes`
|
|
- Create volume: `POST /volumes`
|
|
- Attach volume: `POST /volumes/{volumeId}/attach`
|
|
|
|
## Troubleshooting
|
|
|
|
### Authentication Errors
|
|
- **401 Unauthorized**: Invalid or expired token
|
|
- **403 Forbidden**: Token lacks required permissions
|
|
- **Solution**: Verify token in cloud.linode.com, check scopes
|
|
|
|
### Rate Limiting
|
|
- **429 Too Many Requests**: Rate limit exceeded
|
|
- **Solution**: Implement exponential backoff, reduce request frequency
|
|
|
|
### Validation Errors
|
|
- **400 Bad Request**: Invalid input data
|
|
- **Solution**: Check error message for specific field issues, consult API docs
|
|
|
|
### Installation Issues (Python)
|
|
- **Namespace conflicts**: Older libraries use 'linode' namespace
|
|
- **Solution**: Use virtualenv to isolate dependencies
|
|
|
|
## Updating
|
|
|
|
This skill is based on the OpenAPI specification from the Linode API GitHub repository. To refresh with the latest API changes:
|
|
1. The specification is automatically pulled from: https://github.com/linode/linode-api-docs
|
|
2. Re-run the skill generation process to capture new endpoints and changes
|
|
3. Review changelog for breaking changes before updating production code
|