vmfloaty 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +16 -9
- data/lib/vmfloaty/http.rb +23 -0
- data/lib/vmfloaty/ssh.rb +43 -0
- data/lib/vmfloaty/version.rb +1 -1
- data/lib/vmfloaty.rb +45 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67dbbc5d6d8ccb1f5c5663f9483759784f6a97d4
|
4
|
+
data.tar.gz: aee780777b391982f50e1cfc2bd84bc74c93e9d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f23297133c942c633df3d1b44ab645df7049c43a726739f606d71458fec57b353d05e81123dcf7a5731f923eccd92a6b60e276ffa2fdc99d50c8247dc7686b5
|
7
|
+
data.tar.gz: ccfc5600caab2e20698052fb299e2db7bdb9b40058cc185aa8308bb5cac872e5333b592d108298301ac3c63e7c40c07da533450c4c40d266740b61dcf3015e01
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
vmfloaty
|
2
2
|
========
|
3
3
|
|
4
|
-
[](https://badge.fury.io/rb/vmfloaty)
|
4
|
+
[](https://badge.fury.io/rb/vmfloaty) [](https://travis-ci.org/briancain/vmfloaty)
|
5
5
|
|
6
6
|
A CLI helper tool for [Puppet Labs vmpooler](https://github.com/puppetlabs/vmpooler) to help you stay afloat.
|
7
7
|
|
@@ -12,7 +12,10 @@ A CLI helper tool for [Puppet Labs vmpooler](https://github.com/puppetlabs/vmpoo
|
|
12
12
|
Grab the latest from ruby gems...
|
13
13
|
|
14
14
|
```
|
15
|
-
gem install vmfloaty
|
15
|
+
$ gem install vmfloaty
|
16
|
+
...
|
17
|
+
...
|
18
|
+
$ floaty --help
|
16
19
|
```
|
17
20
|
|
18
21
|
## Usage
|
@@ -26,6 +29,7 @@ gem install vmfloaty
|
|
26
29
|
query Get information about a given vm
|
27
30
|
revert Reverts a vm to a specified snapshot
|
28
31
|
snapshot Takes a snapshot of a given vm
|
32
|
+
ssh Grabs a single vm and sshs into it
|
29
33
|
status Prints the status of vmpooler
|
30
34
|
summary Prints the summary of vmpooler
|
31
35
|
token Retrieves or deletes a token
|
@@ -47,7 +51,7 @@ gem install vmfloaty
|
|
47
51
|
Grabbing a token for authenticated pooler requests:
|
48
52
|
|
49
53
|
```
|
50
|
-
floaty token get --user
|
54
|
+
floaty token get --user username --url https://vmpooler.mycompany.net/api/v1
|
51
55
|
```
|
52
56
|
|
53
57
|
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.
|
@@ -64,7 +68,7 @@ If you do not wish to continuely specify various config options with the cli, yo
|
|
64
68
|
|
65
69
|
```yaml
|
66
70
|
#file at /Users/me/.vmfloaty.yml
|
67
|
-
url: '
|
71
|
+
url: 'https://vmpooler.mycompany.net/api/v1'
|
68
72
|
user: 'brian'
|
69
73
|
token: 'tokenstring'
|
70
74
|
```
|
@@ -76,14 +80,13 @@ Now vmfloaty will use those config files if no flag was specified.
|
|
76
80
|
Here are the keys that vmfloaty currently supports:
|
77
81
|
|
78
82
|
- verbose
|
79
|
-
+
|
80
|
-
+ false
|
83
|
+
+ Boolean
|
81
84
|
- token
|
82
|
-
+
|
85
|
+
+ String
|
83
86
|
- user
|
84
|
-
+
|
87
|
+
+ String
|
85
88
|
- url
|
86
|
-
+
|
89
|
+
+ String
|
87
90
|
|
88
91
|
## vmpooler API
|
89
92
|
|
@@ -91,6 +94,10 @@ This cli tool uses the [vmpooler API](https://github.com/puppetlabs/vmpooler/blo
|
|
91
94
|
|
92
95
|
## Using the Pooler class
|
93
96
|
|
97
|
+
An example of an application using vmfloaty as a library can be seen in [vagrant-vmpooler](https://github.com/briancain/vagrant-vmpooler).
|
98
|
+
|
99
|
+
### Scripting
|
100
|
+
|
94
101
|
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.
|
95
102
|
|
96
103
|
```ruby
|
data/lib/vmfloaty/http.rb
CHANGED
@@ -1,11 +1,30 @@
|
|
1
1
|
require 'faraday'
|
2
|
+
require 'uri'
|
2
3
|
|
3
4
|
class Http
|
5
|
+
def self.is_url(url)
|
6
|
+
# This method exists because it seems like Farady
|
7
|
+
# has no handling around if a user gives us a URI
|
8
|
+
# with no protocol on the beginning of the URL
|
9
|
+
|
10
|
+
uri = URI.parse(url)
|
11
|
+
|
12
|
+
if uri.kind_of?(URI::HTTP) or uri.kind_of?(URI::HTTPS)
|
13
|
+
return true
|
14
|
+
end
|
15
|
+
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
|
4
19
|
def self.get_conn(verbose, url)
|
5
20
|
if url.nil?
|
6
21
|
raise "Did not provide a url to connect to"
|
7
22
|
end
|
8
23
|
|
24
|
+
unless is_url(url)
|
25
|
+
url = "https://#{url}"
|
26
|
+
end
|
27
|
+
|
9
28
|
conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
|
10
29
|
faraday.request :url_encoded
|
11
30
|
faraday.response :logger if verbose
|
@@ -24,6 +43,10 @@ class Http
|
|
24
43
|
raise "You did not provide a user to authenticate with"
|
25
44
|
end
|
26
45
|
|
46
|
+
unless is_url(url)
|
47
|
+
url = "https://#{url}"
|
48
|
+
end
|
49
|
+
|
27
50
|
conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
|
28
51
|
faraday.request :url_encoded
|
29
52
|
faraday.request :basic_auth, user, password
|
data/lib/vmfloaty/ssh.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
class Ssh
|
2
|
+
|
3
|
+
def self.which(cmd)
|
4
|
+
# Gets path of executable for given command
|
5
|
+
|
6
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
7
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
8
|
+
exts.each { |ext|
|
9
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
10
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
11
|
+
}
|
12
|
+
end
|
13
|
+
return nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.ssh(verbose, host_os, token, url)
|
17
|
+
ssh_path = which("ssh")
|
18
|
+
if !ssh_path
|
19
|
+
raise "Could not determine path to ssh"
|
20
|
+
end
|
21
|
+
os_types = {}
|
22
|
+
os_types[host_os] = 1
|
23
|
+
|
24
|
+
response = Pooler.retrieve(verbose, os_types, token, url)
|
25
|
+
if response["ok"] == true
|
26
|
+
if host_os =~ /win/
|
27
|
+
user = "Administrator"
|
28
|
+
else
|
29
|
+
user = "root"
|
30
|
+
end
|
31
|
+
|
32
|
+
hostname = "#{response[host_os]["hostname"]}.#{response["domain"]}"
|
33
|
+
cmd = "#{ssh_path} #{user}@#{hostname}"
|
34
|
+
|
35
|
+
# TODO: Should this respect more ssh settings? Can it be configured
|
36
|
+
# by users ssh config and does this respect those settings?
|
37
|
+
Kernel.exec(cmd)
|
38
|
+
else
|
39
|
+
raise "Could not get vm from vmpooler:\n #{response}"
|
40
|
+
end
|
41
|
+
return
|
42
|
+
end
|
43
|
+
end
|
data/lib/vmfloaty/version.rb
CHANGED
data/lib/vmfloaty.rb
CHANGED
@@ -8,6 +8,7 @@ require 'vmfloaty/pooler'
|
|
8
8
|
require 'vmfloaty/version'
|
9
9
|
require 'vmfloaty/conf'
|
10
10
|
require 'vmfloaty/utils'
|
11
|
+
require 'vmfloaty/ssh'
|
11
12
|
|
12
13
|
class Vmfloaty
|
13
14
|
include Commander::Methods
|
@@ -45,11 +46,14 @@ class Vmfloaty
|
|
45
46
|
unless os_types.empty?
|
46
47
|
if no_token
|
47
48
|
response = Pooler.retrieve(verbose, os_types, nil, url)
|
48
|
-
puts response
|
49
|
+
puts Utils.format_hosts(response)
|
49
50
|
exit 0
|
50
51
|
else
|
51
52
|
unless token
|
52
53
|
puts "No token found. Retrieving a token..."
|
54
|
+
if !user
|
55
|
+
raise "You did not provide a user to authenticate to vmpooler with"
|
56
|
+
end
|
53
57
|
pass = password "Enter your password please:", '*'
|
54
58
|
token = Auth.get_token(verbose, url, user, pass)
|
55
59
|
puts "\nToken retrieved!"
|
@@ -345,6 +349,46 @@ class Vmfloaty
|
|
345
349
|
end
|
346
350
|
end
|
347
351
|
|
352
|
+
command :ssh do |c|
|
353
|
+
c.syntax = 'floaty ssh os_type'
|
354
|
+
c.summary = 'Grabs a single vm and sshs into it'
|
355
|
+
c.description = ''
|
356
|
+
c.example 'SSHs into a centos vm', 'floaty ssh centos7 --url https://vmpooler.example.com'
|
357
|
+
c.option '--verbose', 'Enables verbose output'
|
358
|
+
c.option '--url STRING', String, 'URL of vmpooler'
|
359
|
+
c.option '--user STRING', String, 'User to authenticate with'
|
360
|
+
c.option '--token STRING', String, 'Token for vmpooler'
|
361
|
+
c.option '--notoken', 'Makes a request without a token'
|
362
|
+
c.action do |args, options|
|
363
|
+
verbose = options.verbose || config['verbose']
|
364
|
+
url = options.url ||= config['url']
|
365
|
+
token = options.token ||= config['token']
|
366
|
+
user = options.user ||= config['user']
|
367
|
+
no_token = options.notoken
|
368
|
+
|
369
|
+
if args.empty?
|
370
|
+
STDERR.puts "No operating systems provided to obtain. See `floaty ssh --help` for more information on how to get VMs."
|
371
|
+
exit 1
|
372
|
+
end
|
373
|
+
|
374
|
+
host_os = args.first
|
375
|
+
|
376
|
+
if !no_token && !token
|
377
|
+
puts "No token found. Retrieving a token..."
|
378
|
+
if !user
|
379
|
+
raise "You did not provide a user to authenticate to vmpooler with"
|
380
|
+
end
|
381
|
+
pass = password "Enter your password please:", '*'
|
382
|
+
token = Auth.get_token(verbose, url, user, pass)
|
383
|
+
puts "\nToken retrieved!"
|
384
|
+
puts token
|
385
|
+
end
|
386
|
+
|
387
|
+
Ssh.ssh(verbose, host_os, token, url)
|
388
|
+
exit 0
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
348
392
|
run!
|
349
393
|
end
|
350
394
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmfloaty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Cain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0.9'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.9'
|
41
41
|
description: A helper tool for vmpooler to help you stay afloat
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- lib/vmfloaty/conf.rb
|
55
55
|
- lib/vmfloaty/http.rb
|
56
56
|
- lib/vmfloaty/pooler.rb
|
57
|
+
- lib/vmfloaty/ssh.rb
|
57
58
|
- lib/vmfloaty/utils.rb
|
58
59
|
- lib/vmfloaty/version.rb
|
59
60
|
- spec/spec_helper.rb
|
@@ -70,17 +71,17 @@ require_paths:
|
|
70
71
|
- lib
|
71
72
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
73
|
requirements:
|
73
|
-
- -
|
74
|
+
- - '>='
|
74
75
|
- !ruby/object:Gem::Version
|
75
76
|
version: '0'
|
76
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
78
|
requirements:
|
78
|
-
- -
|
79
|
+
- - '>='
|
79
80
|
- !ruby/object:Gem::Version
|
80
81
|
version: '0'
|
81
82
|
requirements: []
|
82
83
|
rubyforge_project:
|
83
|
-
rubygems_version: 2.
|
84
|
+
rubygems_version: 2.4.8
|
84
85
|
signing_key:
|
85
86
|
specification_version: 4
|
86
87
|
summary: CLI application to interface with vmpooler
|