Cloudstack CLI
cloudstack-cli is a CloudStack API command line client written in Ruby. cloudstack-cli uses the cloudstack_client to talk to the Cloudstack API.
Installation
Install the cloudstack-cli gem:
$ gem install cloudstack-cli
Setup
Create a cloudstack-cli environmet
Create your first environment, which defines your connection options:
$ cloudstack-cli environment add [environment-name]
cloudstack-cli expects to find a configuartion file with the API URL and your CloudStack credentials in your home directory named .cloudstack-cli.yml. If the file is located elsewhere you can specify the loaction using the --config option.
cloudstack-cli supports multiple environments using the --environment option.
see cloudstack-cli help environment for more options.
Example content of the configuration file:
:url: "https://my-cloudstack-server/client/api/"
:api_key: "cloudstack-api-key"
:secret_key: "cloudstack-api-secret"
test:
:url: "http://my-cloudstack-testserver/client/api/"
:api_key: "cloudstack-api-key"
:secret_key: "cloudstack-api-secret"
Shell tab auto-completion
To enable tab auto-completion for cloudstack-cli, add the following lines to your ~/.bash_profile file.
# Bash, ~/.bash_profile
eval "$(cloudstack-cli completion --shell=bash)"
Note: use ~/.bashrc on Ubuntu
Usage
For additional documentation find the RubyDoc here.
See the help screen:
$ cloudstack-cli
Example: Bootsrapping a server
Bootsraps a server using a template and creating port-forwarding rules for port 22 and 80.
$ cloudstack-cli server create server-01 --template CentOS-6.4-x64-v1.4 --zone DC1 --offering 1cpu_1gb --port-rules :22 :80
Example: Run a any custom API command
Run the "listAlerts" command against the Cloudstack API with an argument of type=8:
$ cloudstack-cli command listAlerts type=8
Example: Creating a complete stack of servers
Cloudstack CLI does support stack files in YAML or JSON.
An example stackfile could look like this (my_stackfile.yml):
---
name: "web_stack-a"
description: "Web Application Stack"
version: "1.0"
zone: "DC-ZRH-1"
group: "my_web_stack"
keypair: "mykeypair"
servers:
-
name: "web-d1, web-d2"
description: "Web nodes"
template: "CentOS-7-x64"
offering: "1cpu_1gb"
networks: "server_network"
port_rules: ":80, :443"
-
name: "db-01"
description: "PostgreSQL Master"
iso: "CentOS-7-x64"
disk_offering: "Perf Storage"
disk_size: "5"
offering: "2cpu_4gb"
networks:
- "server_network"
- "storage_network"
Create the stack of servers from above:
$ cloudstack-cli stack create my_stackfile.yml
Hint: You can also parse a stackfile from a URI.
The following command destroys a stack using a definition gathered from a stackfile lying on a Github repository:
$ cloudstack-cli stack destroy https://raw.githubusercontent.com/niwo/cloudstack-cli/master/test/stack_example.json
Destroy the following servers web-001, web-002, db-001? [y/N]: y
Destroy server web-001 : job completed
Destroy server web-002 : job completed
Destroy server db-001 : /
Completed: 2/3 (15.4s)
Example: Sort computing offerings
Sort all computing offerings by CPU and Memory grouped my Domain:
$ cloudstack-cli offering sort
Example: Stop all backup routers of a given project
Stop all virtual routers of project Demo (you could filter by zone too): (This command is helpful if you have to deploy new versions of Cloudstack when using redundant routers)
$ cloudstack-cli router list --project Demo --status running --redundant-state BACKUP --command stop
Hint: You can watch the status of the command with watch.
$ watch -n cloudstack-cli router list --project Demo
References
- Cloudstack API documentation
- This tool was inspired by the Knife extension for Cloudstack: knife-cloudstack
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
License
Released under the MIT License. See the LICENSE file for further details.
