vmfloaty/README.md
Brian Cain 54893cf5fb Improve how to retrieve vms
This commit changes the get command to have users request vms by
specifying the hosts they want and then the number of hosts rather than
having to say each one separated by a comma.
2015-10-09 22:06:14 -07:00

155 lines
3.7 KiB
Markdown

vmfloaty
========
A CLI helper tool for [Puppet Labs vmpooler](https://github.com/puppetlabs/vmpooler) to help you stay afloat.
<img src="http://i.imgur.com/xGcGwuH.jpg" width=200 height=200>
## Install
Grab the latest from ruby gems...
```
gem install vmfloaty
```
## Usage
```
delete Schedules the deletion of a host or hosts
get Gets a vm or vms based on the os flag
help Display global or [command] help documentation
list Shows a list of available vms from the pooler
modify Modify a vms tags and TTL
query Get information about a given vm
revert Reverts a vm to a specified snapshot
snapshot Takes a snapshot of a given vm
status Prints the status of vmpooler
summary Prints the summary of vmpooler
token Retrieves or deletes a token
GLOBAL OPTIONS:
-h, --help
Display help documentation
-v, --version
Display version information
-t, --trace
Display backtrace when an error occurs
```
### Example workflow
Grabbing a token for authenticated pooler requests:
```
floaty token get --user me --url https://vmpooler.mycompany.net
```
This command will then ask you to log in. If successful, it will return a token that you can save either in a dotfile or use with other cli commands.
Grabbing vms:
```
floaty get centos-7-x86_64=2 debian-7-x86_64=1 windows-10=3 --token mytokenstring --url https://vmpooler.mycompany.net
```
### vmfloaty dotfile
If you do not wish to continuely specify various config options with the cli, you can have a dotfile in your home directory for some defaults. For example:
```yaml
#file at /Users/me/.vmfloaty.yml
url: 'http://vmpooler.mycompany.net'
user: 'brian'
token: 'tokenstring'
```
Now vmfloaty will use those config files if no flag was specified.
#### Valid config keys
Here are the keys that vmfloaty currently supports:
- verbose
+ true
+ false
- token
+ :token-string
- user
+ :username
- url
+ :pooler-url
## vmpooler API
This cli tool uses the [vmpooler API](https://github.com/puppetlabs/vmpooler/blob/master/API.md).
## Using the Pooler class
If you want to write some ruby scripts around the vmpooler api, vmfloaty provides a `Pooler` and `Auth` class to make things easier. The ruby script below shows off an example of a script that gets a token, grabs a vm, runs some commands through ssh, and then destroys the vm.
```ruby
require 'vmfloaty/pooler'
require 'vmfloaty/auth'
require 'io/console'
require 'net/ssh'
def aquire_token(verbose, url)
STDOUT.flush
puts "Enter username:"
user = $stdin.gets.chomp
puts "Enter password:"
password = STDIN.noecho(&:gets).chomp
token = Auth.get_token(verbose, url, user, password)
puts "Your token:\n#{token}"
token
end
def grab_vms(os_string, token, url, verbose)
response_body = Pooler.retrieve(verbose, os_string, token, url)
if response_body['ok'] == false
STDERR.puts "There was a problem with your request"
exit 1
end
response_body[os_string]
end
def run_puppet_on_host(hostname)
STDOUT.flush
puts "Enter 'root' password for vm:"
password = STDIN.noecho(&:gets).chomp
user = 'root'
# run puppet
run_puppet = "/opt/puppetlabs/puppet/bin/puppet agent -t"
begin
ssh = Net::SSH.start(hostname, user, :password => password)
output = ssh.exec!(run_puppet)
puts output
ssh.close
rescue
STDERR.puts "Unable to connect to #{hostname} using #{user}"
exit 1
end
end
if __FILE__ == $0
verbose = true
url = 'https://vmpooler.mycompany.net'
token = aquire_token(verbose, url)
os = ARGV[0]
hostname = grab_vm(os, token, url, verbose)
run_puppet_on_host(hostname)
end
```
```
ruby myscript.rb centos-7-x86_64
```