mirror of
https://github.com/puppetlabs/vmfloaty.git
synced 2026-01-26 05:28:40 -05:00
Enable using the Vmfloaty library as Gem
With this change you can require the gem and use it inside another ruby module. See README for usge examples
This commit is contained in:
parent
b9bb08e3c0
commit
74a57aa2e7
2 changed files with 60 additions and 21 deletions
27
README.md
27
README.md
|
|
@ -19,6 +19,7 @@ A CLI helper tool for [Puppet's vmpooler](https://github.com/puppetlabs/vmpooler
|
||||||
- [Using a Nonstandard Pooler service](#using-a-nonstandard-pooler-service)
|
- [Using a Nonstandard Pooler service](#using-a-nonstandard-pooler-service)
|
||||||
- [Valid config keys](#valid-config-keys)
|
- [Valid config keys](#valid-config-keys)
|
||||||
- [Tab Completion](#tab-completion)
|
- [Tab Completion](#tab-completion)
|
||||||
|
- [Use as a gem](#use-as-a-gem)
|
||||||
- [vmpooler API](#vmpooler-api)
|
- [vmpooler API](#vmpooler-api)
|
||||||
- [Using the Pooler class](#using-the-pooler-class)
|
- [Using the Pooler class](#using-the-pooler-class)
|
||||||
- [Example Projects](#example-projects)
|
- [Example Projects](#example-projects)
|
||||||
|
|
@ -207,6 +208,32 @@ If you are running on macOS and use Homebrew's `bash-completion` formula, you ca
|
||||||
ln -s $(floaty completion --shell bash) /usr/local/etc/bash_completion.d/floaty
|
ln -s $(floaty completion --shell bash) /usr/local/etc/bash_completion.d/floaty
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Use as a gem
|
||||||
|
|
||||||
|
Add to your Gemfile
|
||||||
|
```ruby
|
||||||
|
require 'vmfloaty'
|
||||||
|
Vmfloaty.new("token get --user username --url https://vmpooler.example.net/api/v1").run
|
||||||
|
```
|
||||||
|
|
||||||
|
Or access the commander
|
||||||
|
```ruby
|
||||||
|
require 'vmfloaty'
|
||||||
|
vmfloaty = Vmfloaty.new("token get --user username --url https://vmpooler.example.net/api/v1")
|
||||||
|
commander = vmfloaty.commander_instance
|
||||||
|
# do something else with the commander
|
||||||
|
vmfloaty.run
|
||||||
|
```
|
||||||
|
|
||||||
|
You will need to redirect stdout and stderr if you want to process the results
|
||||||
|
```ruby
|
||||||
|
stdout, stderr = StringIO.new, StringIO.new
|
||||||
|
$stdout, $stderr = stdout, stderr
|
||||||
|
results = Vmfloaty.new("token get --user username --url https://vmpooler.example.net/api/v1").run
|
||||||
|
$stdout, $stderr = STDOUT, STDERR
|
||||||
|
puts results
|
||||||
|
```
|
||||||
|
|
||||||
## vmpooler API
|
## vmpooler API
|
||||||
|
|
||||||
This cli tool uses the [vmpooler API](https://github.com/puppetlabs/vmpooler/blob/master/API.md).
|
This cli tool uses the [vmpooler API](https://github.com/puppetlabs/vmpooler/blob/master/API.md).
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,26 @@ require 'vmfloaty/logger'
|
||||||
class Vmfloaty
|
class Vmfloaty
|
||||||
include Commander::Methods
|
include Commander::Methods
|
||||||
|
|
||||||
|
attr_reader :commander_instance
|
||||||
|
|
||||||
|
@commander_instance = nil
|
||||||
|
|
||||||
|
def initialize(*args)
|
||||||
|
@commander_instance = if args && args[0].is_a?(String)
|
||||||
|
Commander::Runner.new(args[0].split)
|
||||||
|
elsif args && args[0].is_a?(Array)
|
||||||
|
Commander::Runner.new(args[0])
|
||||||
|
else
|
||||||
|
Commander::Runner.new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def run # rubocop:disable Metrics/AbcSize
|
def run # rubocop:disable Metrics/AbcSize
|
||||||
program :version, Vmfloaty::VERSION
|
commander_instance.program :version, Vmfloaty::VERSION
|
||||||
program :description, "A CLI helper tool for Puppet's vmpooler to help you stay afloat"
|
commander_instance.program :description, "A CLI helper tool for Puppet's vmpooler to help you stay afloat"
|
||||||
|
|
||||||
config = Conf.read_config
|
config = Conf.read_config
|
||||||
|
commander_instance.command :get do |c|
|
||||||
command :get do |c|
|
|
||||||
c.syntax = 'floaty get os_type0 os_type1=x ox_type2=y [options]'
|
c.syntax = 'floaty get os_type0 os_type1=x ox_type2=y [options]'
|
||||||
c.summary = 'Gets a vm or vms based on the os argument'
|
c.summary = 'Gets a vm or vms based on the os argument'
|
||||||
c.description = 'A command to retrieve vms from a pooler service. Can either be a single vm, or multiple with the `=` syntax.'
|
c.description = 'A command to retrieve vms from a pooler service. Can either be a single vm, or multiple with the `=` syntax.'
|
||||||
|
|
@ -79,7 +92,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :list do |c|
|
commander_instance.command :list do |c|
|
||||||
c.syntax = 'floaty list [options]'
|
c.syntax = 'floaty list [options]'
|
||||||
c.summary = 'Shows a list of available vms from the pooler or vms obtained with a token'
|
c.summary = 'Shows a list of available vms from the pooler or vms obtained with a token'
|
||||||
c.description = 'List will either show all vm templates available in pooler service, or with the --active flag it will list vms obtained with a pooler service token.'
|
c.description = 'List will either show all vm templates available in pooler service, or with the --active flag it will list vms obtained with a pooler service token.'
|
||||||
|
|
@ -122,7 +135,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :query do |c|
|
commander_instance.command :query do |c|
|
||||||
c.syntax = 'floaty query hostname [options]'
|
c.syntax = 'floaty query hostname [options]'
|
||||||
c.summary = 'Get information about a given vm'
|
c.summary = 'Get information about a given vm'
|
||||||
c.description = 'Given a hostname from the pooler service, vmfloaty with query the service to get various details about the vm.'
|
c.description = 'Given a hostname from the pooler service, vmfloaty with query the service to get various details about the vm.'
|
||||||
|
|
@ -140,7 +153,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :modify do |c|
|
commander_instance.command :modify do |c|
|
||||||
c.syntax = 'floaty modify hostname [options]'
|
c.syntax = 'floaty modify hostname [options]'
|
||||||
c.summary = 'Modify a VM\'s tags, time to live, disk space, or reservation reason'
|
c.summary = 'Modify a VM\'s tags, time to live, disk space, or reservation reason'
|
||||||
c.description = 'This command makes modifications to the virtual machines state in the pooler service. You can either append tags to the vm, increase how long it stays active for, or increase the amount of disk space.'
|
c.description = 'This command makes modifications to the virtual machines state in the pooler service. You can either append tags to the vm, increase how long it stays active for, or increase the amount of disk space.'
|
||||||
|
|
@ -168,10 +181,10 @@ class Vmfloaty
|
||||||
|
|
||||||
tags = options.tags ? JSON.parse(options.tags) : nil
|
tags = options.tags ? JSON.parse(options.tags) : nil
|
||||||
modify_hash = {
|
modify_hash = {
|
||||||
:lifetime => options.lifetime,
|
:lifetime => options.lifetime,
|
||||||
:disk => options.disk,
|
:disk => options.disk,
|
||||||
:tags => tags,
|
:tags => tags,
|
||||||
:reason => options.reason,
|
:reason => options.reason,
|
||||||
}
|
}
|
||||||
modify_hash.delete_if { |_, value| value.nil? }
|
modify_hash.delete_if { |_, value| value.nil? }
|
||||||
|
|
||||||
|
|
@ -198,7 +211,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :delete do |c|
|
commander_instance.command :delete do |c|
|
||||||
c.syntax = 'floaty delete hostname,hostname2 [options]'
|
c.syntax = 'floaty delete hostname,hostname2 [options]'
|
||||||
c.syntax += "\n floaty delete job1,job2 [options] (only supported with ABS)"
|
c.syntax += "\n floaty delete job1,job2 [options] (only supported with ABS)"
|
||||||
c.summary = 'Schedules the deletion of a host or hosts'
|
c.summary = 'Schedules the deletion of a host or hosts'
|
||||||
|
|
@ -289,7 +302,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :snapshot do |c|
|
commander_instance.command :snapshot do |c|
|
||||||
c.syntax = 'floaty snapshot hostname [options]'
|
c.syntax = 'floaty snapshot hostname [options]'
|
||||||
c.summary = 'Takes a snapshot of a given vm'
|
c.summary = 'Takes a snapshot of a given vm'
|
||||||
c.description = 'Will request a snapshot be taken of the given hostname in the pooler service. This command is known to take a while depending on how much load is on the pooler service.'
|
c.description = 'Will request a snapshot be taken of the given hostname in the pooler service. This command is known to take a while depending on how much load is on the pooler service.'
|
||||||
|
|
@ -315,7 +328,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :revert do |c|
|
commander_instance.command :revert do |c|
|
||||||
c.syntax = 'floaty revert hostname snapshot [options]'
|
c.syntax = 'floaty revert hostname snapshot [options]'
|
||||||
c.summary = 'Reverts a vm to a specified snapshot'
|
c.summary = 'Reverts a vm to a specified snapshot'
|
||||||
c.description = 'Given a snapshot SHA, vmfloaty will request a revert to the pooler service to go back to a previous snapshot.'
|
c.description = 'Given a snapshot SHA, vmfloaty will request a revert to the pooler service to go back to a previous snapshot.'
|
||||||
|
|
@ -344,7 +357,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :status do |c|
|
commander_instance.command :status do |c|
|
||||||
c.syntax = 'floaty status [options]'
|
c.syntax = 'floaty status [options]'
|
||||||
c.summary = 'Prints the status of pools in the pooler service'
|
c.summary = 'Prints the status of pools in the pooler service'
|
||||||
c.description = 'Makes a request to the pooler service to request the information about vm pools and how many are ready to be used, what pools are empty, etc.'
|
c.description = 'Makes a request to the pooler service to request the information about vm pools and how many are ready to be used, what pools are empty, etc.'
|
||||||
|
|
@ -364,7 +377,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :summary do |c|
|
commander_instance.command :summary do |c|
|
||||||
c.syntax = 'floaty summary [options]'
|
c.syntax = 'floaty summary [options]'
|
||||||
c.summary = 'Prints a summary of a pooler service'
|
c.summary = 'Prints a summary of a pooler service'
|
||||||
c.description = 'Gives a very detailed summary of information related to the pooler service.'
|
c.description = 'Gives a very detailed summary of information related to the pooler service.'
|
||||||
|
|
@ -382,7 +395,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :token do |c|
|
commander_instance.command :token do |c|
|
||||||
c.syntax = 'floaty token <get delete status> [options]'
|
c.syntax = 'floaty token <get delete status> [options]'
|
||||||
c.summary = 'Retrieves or deletes a token or checks token status'
|
c.summary = 'Retrieves or deletes a token or checks token status'
|
||||||
c.description = 'This command is used to manage your pooler service token. Through the various options, you are able to get a new token, delete an existing token, and request a tokens status.'
|
c.description = 'This command is used to manage your pooler service token. Through the various options, you are able to get a new token, delete an existing token, and request a tokens status.'
|
||||||
|
|
@ -425,7 +438,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :ssh do |c|
|
commander_instance.command :ssh do |c|
|
||||||
c.syntax = 'floaty ssh os_type [options]'
|
c.syntax = 'floaty ssh os_type [options]'
|
||||||
c.summary = 'Grabs a single vm and sshs into it'
|
c.summary = 'Grabs a single vm and sshs into it'
|
||||||
c.description = 'This command simply will grab a vm template that was requested, and then ssh the user into the machine all at once.'
|
c.description = 'This command simply will grab a vm template that was requested, and then ssh the user into the machine all at once.'
|
||||||
|
|
@ -455,7 +468,7 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
command :completion do |c|
|
commander_instance.command :completion do |c|
|
||||||
c.syntax = 'floaty completion [options]'
|
c.syntax = 'floaty completion [options]'
|
||||||
c.summary = 'Outputs path to completion script'
|
c.summary = 'Outputs path to completion script'
|
||||||
c.description = Utils.strip_heredoc(<<-DESCRIPTION)
|
c.description = Utils.strip_heredoc(<<-DESCRIPTION)
|
||||||
|
|
@ -480,7 +493,6 @@ class Vmfloaty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
commander_instance.run!
|
||||||
run!
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue