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:
Samuel Beaulieu 2020-09-02 17:00:10 -05:00
parent b9bb08e3c0
commit 74a57aa2e7
2 changed files with 60 additions and 21 deletions

View file

@ -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).

View file

@ -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.'
@ -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