commit 732c15d6bd0bb805840e34adb8e84a2b006b2b87 Author: Zhongwei Li Date: Sun Nov 30 08:50:36 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..d626de4 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "linode-cli", + "description": "Interacts with the Linode CLI.", + "version": "0.0.0-2025.11.28", + "author": { + "name": "Tim Green", + "email": "rawveg@gmail.com" + }, + "skills": [ + "./skills/linode-cli" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..dbc9126 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# linode-cli + +Interacts with the Linode CLI. diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..3a93f2f --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,56 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:rawveg/skillsforge-marketplace:linode-cli", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "77fe4f9cdd290f8cd583ac792e8a17e6ae5ae437", + "treeHash": "e352e76d61f83461fab3d8485bece695e33b30062e9dff4cfc4fb1bab4daba02", + "generatedAt": "2025-11-28T10:27:52.268820Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "linode-cli", + "description": "Interacts with the Linode CLI." + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "0340a07cefdb060eaf22bb55b8869d1e656cca6117d864f26ca0afe7ebc57aec" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "1ce3c6d27201902f7231f5bc37d57b5207b9be48b6510acb6c98ab509508ad90" + }, + { + "path": "skills/linode-cli/plugin.json", + "sha256": "52a30ffb0c6e5b35c3dedf31d8129d2895e3629c5cefe958c39234f62ff2f41e" + }, + { + "path": "skills/linode-cli/SKILL.md", + "sha256": "1c4916ab53139b243248eaf19aafc687adefdabcce22ac976bd77412927ebb49" + }, + { + "path": "skills/linode-cli/references/index.md", + "sha256": "600bd91d210c5ad86558c65d28662fd2472cc05a4c89bd4e2d0be1fc1b02ff38" + }, + { + "path": "skills/linode-cli/references/other.md", + "sha256": "14a40dc5fb7b07865f5d9d73bee8d615ce34653c58e84a9737be6ccd1ca035dd" + } + ], + "dirSha256": "e352e76d61f83461fab3d8485bece695e33b30062e9dff4cfc4fb1bab4daba02" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/linode-cli/SKILL.md b/skills/linode-cli/SKILL.md new file mode 100644 index 0000000..e288b7e --- /dev/null +++ b/skills/linode-cli/SKILL.md @@ -0,0 +1,428 @@ +--- +name: linode-cli +description: Linode CLI Documentation +--- + +# Linode CLI Skill + +The official command-line interface for Linode/Akamai cloud infrastructure. Provides easy access to Linode API endpoints directly from the terminal for managing compute instances, Kubernetes clusters, volumes, networking, DNS, and more. + +## When to Use This Skill + +This skill should be triggered when: +- **Managing Linode compute instances** (creating, listing, updating, deleting Linodes) +- **Working with Linode Kubernetes Engine (LKE)** clusters and node pools +- **Configuring DNS domains** and records through Linode's DNS Manager +- **Managing Block Storage volumes** and volume attachments +- **Setting up NodeBalancers** and networking infrastructure +- **Automating Linode operations** in scripts or CI/CD pipelines +- **Learning Linode CLI commands** and API interactions +- **Debugging Linode CLI issues** or authentication problems +- **Formatting CLI output** (JSON, tables, custom fields) + +## Key Concepts + +### CLI Architecture +- **Auto-generated from OpenAPI**: The CLI is automatically generated from Linode's OpenAPI specification, providing direct access to all API endpoints +- **Python-based**: Built with Python 3.10+, installed via pip +- **Command structure**: `linode-cli [options]` +- **Authentication**: Uses API tokens stored in configuration or environment variables + +### Core Resources +- **linodes**: Compute instances (virtual machines) +- **lke**: Linode Kubernetes Engine clusters +- **domains**: DNS domain management +- **volumes**: Block Storage volumes +- **nodebalancers**: Load balancers +- **regions**: Available data center locations +- **images**: OS images and custom images + +### Output Formatting +- **Default**: Organized tables with key information +- **--json**: Raw JSON output for scripting +- **--pretty**: Formatted JSON with indentation +- **--format**: Custom field selection +- **--all**: Show all available fields + +## Quick Reference + +### Installation and Setup + +```bash +# Install via pip +pip3 install linode-cli + +# First-time configuration (interactive) +linode-cli configure + +# Set API token via environment +export LINODE_CLI_TOKEN=your_api_token_here +``` + +### Getting Help + +```bash +# View all available commands +linode-cli --help + +# View help for specific resource +linode-cli linodes --help + +# View help for specific action +linode-cli linodes create --help + +# List all available regions +linode-cli regions list + +# List all available images +linode-cli images list +``` + +### Listing Resources + +```bash +# List all Linodes on your account +linode-cli linodes list + +# List domains +linode-cli domains list + +# List volumes +linode-cli volumes list + +# List Kubernetes clusters +linode-cli lke clusters-list + +# Format output with custom fields +linode-cli linodes list --format "id,label,status,region" + +# Output as JSON +linode-cli linodes list --json + +# Output all available fields +linode-cli linodes list --all +``` + +### Creating Compute Instances + +```bash +# Create a basic Linode (uses defaults from config) +linode-cli linodes create \ + --type g6-standard-2 \ + --region us-east \ + --image linode/debian11 \ + --label my-server \ + --root_pass "SecurePassword123!" + +# Create with specific configuration +linode-cli linodes create \ + --type g6-standard-4 \ + --region us-central \ + --image linode/ubuntu22.04 \ + --label production-web \ + --root_pass "MySecurePass!" \ + --group webservers + +# Create with authorized SSH keys +linode-cli linodes create \ + --type g6-standard-2 \ + --region us-west \ + --image linode/debian11 \ + --label secure-server \ + --root_pass "Password123!" \ + --authorized_keys "ssh-rsa AAAAB3Nz..." +``` + +### Managing Kubernetes (LKE) + +```bash +# Create a Kubernetes cluster with multiple node pools +linode-cli lke cluster-create \ + --label my-k8s-cluster \ + --region us-central \ + --k8s_version 1.28 \ + --node_pools.type g6-standard-4 --node_pools.count 3 \ + --node_pools.type g6-standard-8 --node_pools.count 2 \ + --tags production + +# List all clusters +linode-cli lke clusters-list + +# Update cluster configuration +linode-cli lke cluster-update $CLUSTER_ID \ + --label renamed-cluster \ + --tags production \ + --tags monitoring \ + --tags backup + +# Update node pool size +linode-cli lke pool-update $CLUSTER_ID $POOL_ID \ + --count 5 + +# Delete a cluster +linode-cli lke cluster-delete $CLUSTER_ID +``` + +### DNS Management + +```bash +# Create a domain +linode-cli domains create \ + --type master \ + --domain example.com \ + --soa_email admin@example.com + +# List domains +linode-cli domains list + +# Create DNS record +linode-cli domains records-create $DOMAIN_ID \ + --type A \ + --name www \ + --target 192.0.2.1 + +# Delete a domain +linode-cli domains delete $DOMAIN_ID +``` + +### Volume Management + +```bash +# Create a Block Storage volume +linode-cli volumes create \ + --label my-volume \ + --size 100 \ + --region us-east + +# List volumes +linode-cli volumes list + +# Attach volume to Linode +linode-cli volumes attach $VOLUME_ID \ + --linode_id $LINODE_ID + +# Detach volume +linode-cli volumes detach $VOLUME_ID +``` + +### Advanced Usage + +```bash +# Filtering output with jq (requires jq installed) +linode-cli linodes list --json | jq '.[] | select(.status=="running")' + +# Using variables in scripts +LINODE_ID=$(linode-cli linodes list --json | jq -r '.[0].id') +echo "First Linode ID: $LINODE_ID" + +# Bulk operations example +for region in us-east us-west eu-central; do + linode-cli linodes create \ + --type g6-nanode-1 \ + --region $region \ + --image linode/alpine3.18 \ + --label "test-$region" \ + --root_pass "TempPassword123!" +done +``` + +## Reference Files + +This skill includes comprehensive documentation in `references/`: + +- **other.md** - Links to official Linode CLI Wiki on GitHub with additional documentation, guides, and community resources + +Use `view` to read specific reference files when detailed information is needed. + +## Working with This Skill + +### For Beginners +1. **Start with installation**: Run `pip3 install linode-cli` and configure with `linode-cli configure` +2. **Learn the basics**: Use `--help` flag extensively to discover available commands +3. **Practice listing**: Start with simple list commands like `linode-cli linodes list` +4. **Test in safe mode**: Use small, inexpensive instance types (g6-nanode-1) for testing +5. **Read the output**: Default table output is designed to be human-readable + +### For Intermediate Users +1. **Master output formatting**: Learn `--json`, `--format`, and `--all` flags for scripting +2. **Automate common tasks**: Create bash scripts for repetitive operations +3. **Combine with jq**: Use jq for powerful JSON filtering and processing +4. **Manage multiple resources**: Create infrastructure as code with shell scripts +5. **Use environment variables**: Set `LINODE_CLI_TOKEN` for non-interactive automation + +### For Advanced Users +1. **CI/CD integration**: Incorporate linode-cli into deployment pipelines +2. **Infrastructure automation**: Build complete infrastructure provisioning scripts +3. **API exploration**: Use the CLI to understand Linode's API structure +4. **Custom tooling**: Wrap linode-cli in your own management tools +5. **OpenAPI access**: Contribute to the OpenAPI spec for new features + +### Navigation Tips +- **Discover resources**: Use `linode-cli --help` to see all available resource types +- **Action discovery**: Each resource has different actions (list, create, update, delete, etc.) +- **Parameter help**: Use `--help` on any action to see required and optional parameters +- **JSON inspection**: Use `--json` to see all available fields for any resource +- **Region planning**: Run `linode-cli regions list` before creating resources + +## Common Patterns + +### Authentication Setup +```bash +# Method 1: Interactive configuration +linode-cli configure + +# Method 2: Environment variable +export LINODE_CLI_TOKEN=your_token_here + +# Method 3: Config file (~/.config/linode-cli) +[DEFAULT] +token = your_token_here +region = us-east +type = g6-standard-2 +image = linode/ubuntu22.04 +``` + +### Instance Lifecycle +```bash +# Create → Boot (automatic) → Use → Power off → Delete +linode-cli linodes create --label test --type g6-nanode-1 --region us-east --image linode/alpine3.18 --root_pass "Test123!" +# Get ID from output or list +LINODE_ID=$(linode-cli linodes list --json | jq -r '.[] | select(.label=="test") | .id') +# Shutdown +linode-cli linodes shutdown $LINODE_ID +# Delete +linode-cli linodes delete $LINODE_ID +``` + +### Scripting Pattern +```bash +#!/bin/bash +set -e # Exit on error + +# Configuration +REGION="us-central" +TYPE="g6-standard-2" +IMAGE="linode/debian11" + +# Create instance +echo "Creating Linode..." +RESULT=$(linode-cli linodes create \ + --type "$TYPE" \ + --region "$REGION" \ + --image "$IMAGE" \ + --label "auto-server-$(date +%s)" \ + --root_pass "$(openssl rand -base64 32)" \ + --json) + +# Extract ID +LINODE_ID=$(echo "$RESULT" | jq -r '.[0].id') +echo "Created Linode ID: $LINODE_ID" + +# Wait for running status +while true; do + STATUS=$(linode-cli linodes view $LINODE_ID --json | jq -r '.[0].status') + echo "Status: $STATUS" + [[ "$STATUS" == "running" ]] && break + sleep 5 +done + +echo "Linode is ready!" +``` + +## Resources + +### Official Documentation +- **GitHub Repository**: https://github.com/linode/linode-cli +- **Akamai TechDocs**: https://techdocs.akamai.com/cloud-computing/docs/cli +- **API Documentation**: https://www.linode.com/docs/api/ +- **Getting Started Guide**: https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli + +### Key Features +- **Auto-completion**: Bash completion available for command discovery +- **OpenAPI-driven**: Always up-to-date with latest API features +- **Cross-platform**: Works on Linux, macOS, and Windows (via WSL) +- **Scriptable**: Perfect for automation and infrastructure as code +- **Comprehensive**: Access to all Linode API endpoints + +### Community +- **Contributors**: 49 active contributors +- **License**: BSD-3-Clause +- **Language**: Python (98.8%) +- **Installation**: PyPI package (pip installable) + +## Tips and Best Practices + +### Security +- **Protect tokens**: Never commit API tokens to version control +- **Use environment variables**: Store tokens in `.env` files (git-ignored) +- **Rotate regularly**: Generate new tokens periodically +- **Limit permissions**: Use scoped tokens with minimal required permissions +- **Strong passwords**: Always use strong root passwords for instances + +### Cost Management +- **Start small**: Use nanode instances (g6-nanode-1) for testing +- **Delete unused**: Remove test instances to avoid unnecessary charges +- **Monitor usage**: Regularly check your account for active resources +- **Use tags**: Organize resources with tags for easier management + +### Debugging +- **Verbose output**: Add `--debug` flag for detailed error information +- **JSON inspection**: Use `--json --pretty` to see full API responses +- **Check status**: Use `view` commands to inspect resource details +- **API reference**: Consult the API docs for endpoint specifics + +## Troubleshooting + +### Authentication Issues +```bash +# Verify token is set +echo $LINODE_CLI_TOKEN + +# Test authentication +linode-cli account view + +# Reconfigure CLI +linode-cli configure +``` + +### Common Errors +- **401 Unauthorized**: Invalid or expired API token +- **404 Not Found**: Resource ID doesn't exist or wrong region +- **422 Unprocessable**: Missing required parameters or validation error +- **429 Rate Limited**: Too many requests, implement backoff + +### Getting Help +```bash +# Check CLI version +linode-cli --version + +# View debug information +linode-cli linodes list --debug + +# Check configuration +cat ~/.config/linode-cli +``` + +## Notes + +- This skill was generated from official Linode CLI documentation +- The CLI is automatically generated from Linode's OpenAPI specification +- All commands and examples are based on the official Linode API v4 +- Command syntax and available options may change with API updates +- Always refer to `--help` for the most current command documentation + +## Updating + +To stay current with Linode CLI: +```bash +# Update via pip +pip3 install --upgrade linode-cli + +# Check for new features +linode-cli --help + +# Review changelog +pip3 show linode-cli +``` + +The CLI is regularly updated to reflect changes in the Linode API. Check the GitHub repository for release notes and breaking changes. diff --git a/skills/linode-cli/plugin.json b/skills/linode-cli/plugin.json new file mode 100644 index 0000000..1b3b334 --- /dev/null +++ b/skills/linode-cli/plugin.json @@ -0,0 +1,15 @@ +{ + "name": "linode-cli", + "description": "Interacts with the Linode CLI.", + "version": "1.0.0", + "author": { + "name": "Tim Green", + "email": "rawveg@gmail.com" + }, + "homepage": "https://github.com/rawveg/claude-skills-marketplace", + "repository": "https://github.com/rawveg/claude-skills-marketplace", + "license": "MIT", + "keywords": ["linode-cli", "linode", "akamai", "cli","Claude Code"], + "category": "productivity", + "strict": false +} diff --git a/skills/linode-cli/references/index.md b/skills/linode-cli/references/index.md new file mode 100644 index 0000000..89173bd --- /dev/null +++ b/skills/linode-cli/references/index.md @@ -0,0 +1,7 @@ +# Linode-Cli Documentation Index + +## Categories + +### Other +**File:** `other.md` +**Pages:** 1 diff --git a/skills/linode-cli/references/other.md b/skills/linode-cli/references/other.md new file mode 100644 index 0000000..c4d64ba --- /dev/null +++ b/skills/linode-cli/references/other.md @@ -0,0 +1,11 @@ +# Linode-Cli - Other + +**Pages:** 1 + +--- + +## Home · linode/linode-cli Wiki · GitHub + +**URL:** https://github.com/linode/linode-cli/wiki + +---