vmfloaty

A CLI helper tool for Puppet Labs vmpooler to help you stay afloat.

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:

#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.

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.

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