mirror of
https://github.com/puppetlabs/vmfloaty.git
synced 2026-01-25 21:28:40 -05:00
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.
155 lines
3.7 KiB
Markdown
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
|
|
```
|