vmfloaty 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a145168f40d061f4e659d5af6b7964ff7e5f1f0
4
- data.tar.gz: d5a1af7b3e1c3ff17d56d80840646852a55c4ea0
3
+ metadata.gz: f715c6bc71cf2d991c9bc09108f5e6e64b768de6
4
+ data.tar.gz: 2f8bc1572c8a84e0cdf540ea91b41a38787d4eb4
5
5
  SHA512:
6
- metadata.gz: 6b4a48504c1ae0ad768f7128e832930ed2352a78430f39048aa1df047968a495c0a1ba298935f50ffd64fa3a439921efecd6ba7e69702e660d5bdb2ef43b059b
7
- data.tar.gz: 2139b5ea9b9ee34c2d9415b9ee526d3b0602a01c9756dfca181da5975d6cb18dca3de93596ee390fabd563ab9ed2634c5e4d92841fbcd68dee5a1be754a2a627
6
+ metadata.gz: e6d099a22da7c021c17ed35253267ef2fa4ae19955d3fc823fcb7679d9c770ecfd40815959d3a20bc05f86c4522f395fc35acb8bd49116b722bea66e8118d3fc
7
+ data.tar.gz: 7c32c73f23839861a0edcf9fa0f08e167058e3141c72fffbc4913d2d791b993d391ea09433b94e95c05e335c6576c925156f1da318707973e5715d5b461ed638
data/README.md CHANGED
@@ -1,11 +1,13 @@
1
1
  vmfloaty
2
2
  ========
3
3
 
4
- A CLI helper tool for Puppet Labs vmpooler to help you stay afloat.
4
+ A CLI helper tool for [Puppet Labs vmpooler](https://github.com/puppetlabs/vmpooler) to help you stay afloat.
5
+
6
+ <img src="http://i.imgur.com/xGcGwuH.jpg" width=200 height=200>
5
7
 
6
8
  ## Install
7
9
 
8
- __note:__ this doesn't work yet. Have not published this to ruby gems
10
+ Grab the latest from ruby gems...
9
11
 
10
12
  ```
11
13
  gem install vmfloaty
@@ -13,14 +15,43 @@ gem install vmfloaty
13
15
 
14
16
  ## Usage
15
17
 
16
- _note:_ subject to change
18
+ ```
19
+ delete Schedules the deletion of a host or hosts
20
+ get Gets a vm or vms based on the os flag
21
+ help Display global or [command] help documentation
22
+ list Shows a list of available vms from the pooler
23
+ modify Modify a vms tags and TTL
24
+ query Get information about a given vm
25
+ revert Reverts a vm to a specified snapshot
26
+ snapshot Takes a snapshot of a given vm
27
+ status Prints the status of vmpooler
28
+ summary Prints the summary of vmpooler
29
+ token Retrieves or deletes a token
30
+
31
+ GLOBAL OPTIONS:
17
32
 
33
+ -h, --help
34
+ Display help documentation
35
+
36
+ -v, --version
37
+ Display version information
38
+
39
+ -t, --trace
40
+ Display backtrace when an error occurs
18
41
  ```
19
- Commands:
20
- floaty get <OPERATING SYSTEM,...> # Gets a VM
21
- floaty help [COMMAND] # Describe available commands or one specific command
22
- floaty list [PATTERN] # List all open VMs
23
- floaty modify <HOSTNAME> # Modify a VM
24
- floaty release <HOSTNAME,...> [--all] # Schedules a VM for deletion
25
- floaty status # List status of all active VMs
42
+
43
+ ### vmfloaty dotfile
44
+
45
+ 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:
46
+
47
+ ```yaml
48
+ #file at /Users/me/.vmpooler.yml
49
+ url: 'http://vmpooler.mycompany.net'
50
+ user: 'brian'
26
51
  ```
52
+
53
+ Now vmfloaty will use those config files if no flag was specified.
54
+
55
+ ## vmpooler API
56
+
57
+ This cli tool uses the [vmpooler API](https://github.com/puppetlabs/vmpooler/blob/master/API.md).
data/bin/floaty CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
3
4
 
4
5
  require 'vmfloaty'
5
6
 
6
- Vmfloaty.new(ENV).start
7
+ Vmfloaty.new.run
data/lib/vmfloaty.rb CHANGED
@@ -1,17 +1,252 @@
1
- require 'vmfloaty/cli'
2
- require 'vmfloaty/hosts'
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'commander'
5
+ require 'yaml'
6
+ require 'vmfloaty/auth'
7
+ require 'vmfloaty/pooler'
3
8
 
4
9
  class Vmfloaty
10
+ include Commander::Methods
11
+
12
+ def run
13
+ program :version, '0.2.0'
14
+ program :description, 'A CLI helper tool for Puppet Labs vmpooler to help you stay afloat'
15
+
16
+ config = read_config
17
+
18
+ command :get do |c|
19
+ c.syntax = 'floaty get [options]'
20
+ c.summary = 'Gets a vm or vms based on the os flag'
21
+ c.description = ''
22
+ c.example 'Gets 3 vms', 'floaty get --user brian --url http://vmpooler.example.com --os centos,centos,debian'
23
+ c.option '--verbose', 'Enables verbose output'
24
+ c.option '--user STRING', String, 'User to authenticate with'
25
+ c.option '--url STRING', String, 'URL of vmpooler'
26
+ c.option '--token STRING', String, 'Token for vmpooler'
27
+ c.option '--os STRING', String, 'Operating systems to retrieve'
28
+ c.option '--notoken', 'Makes a request without a token'
29
+ c.action do |args, options|
30
+ verbose = options.verbose || config['verbose']
31
+ token = options.token || config['token']
32
+ user = options.user ||= config['user']
33
+ url = options.url ||= config['url']
34
+ os_types = options.os
35
+ no_token = options.notoken
36
+
37
+ unless no_token.nil?
38
+ response = Pooler.retrieve(verbose, os_types, token, url)
39
+ puts response
40
+ return
41
+ end
42
+
43
+ unless options.token
44
+ pass = password "Enter your password please:", '*'
45
+ token = Auth.get_token(verbose, url, user, pass)
46
+ end
47
+
48
+ unless os_types.nil?
49
+ response = Pooler.retrieve(verbose, os_types, token, url)
50
+ puts response
51
+ else
52
+ puts 'You did not provide an OS to get'
53
+ end
54
+ end
55
+ end
56
+
57
+ command :list do |c|
58
+ c.syntax = 'floaty list [options]'
59
+ c.summary = 'Shows a list of available vms from the pooler'
60
+ c.description = ''
61
+ c.example 'Filter the list on centos', 'floaty list --filter centos --url http://vmpooler.example.com'
62
+ c.option '--verbose', 'Enables verbose output'
63
+ c.option '--filter STRING', String, 'A filter to apply to the list'
64
+ c.option '--url STRING', String, 'URL of vmpooler'
65
+ c.action do |args, options|
66
+ verbose = options.verbose || config['verbose']
67
+ filter = options.filter
68
+ url = options.url ||= config['url']
69
+
70
+ os_list = Pooler.list(verbose, url, filter)
71
+ puts os_list
72
+ end
73
+ end
74
+
75
+ command :query do |c|
76
+ c.syntax = 'floaty query [options]'
77
+ c.summary = 'Get information about a given vm'
78
+ c.description = ''
79
+ c.example 'Get information about a sample host', 'floaty query --url http://vmpooler.example.com --host myvmhost.example.com'
80
+ c.option '--verbose', 'Enables verbose output'
81
+ c.option '--url STRING', String, 'URL of vmpooler'
82
+ c.option '--host STRING', String, 'Hostname to query'
83
+ c.action do |args, options|
84
+ verbose = options.verbose || config['verbose']
85
+ url = options.url ||= config['url']
86
+ hostname = options.host
87
+
88
+ query = Pooler.query(verbose, url, hostname)
89
+ puts query
90
+ end
91
+ end
92
+
93
+ command :modify do |c|
94
+ c.syntax = 'floaty modify [options]'
95
+ c.summary = 'Modify a vms tags and TTL'
96
+ c.description = ''
97
+ c.example 'description', 'command example'
98
+ c.option '--verbose', 'Enables verbose output'
99
+ c.option '--url STRING', String, 'URL of vmpooler'
100
+ c.option '--token STRING', String, 'Token for vmpooler'
101
+ c.option '--host STRING', String, 'Hostname to modify'
102
+ c.option '--lifetime INT', Integer, 'VM TTL (Integer, in hours)'
103
+ c.option '--tags HASH', Hash, 'free-form VM tagging'
104
+ c.action do |args, options|
105
+ verbose = options.verbose || config['verbose']
106
+ url = options.url ||= config['url']
107
+ hostname = options.host
108
+ lifetime = options.lifetime
109
+ tags = options.tags
110
+ token = options.token || config['token']
111
+
112
+ res_body = Pooler.modify(verbose, url, hostname, token, lifetime, tags)
113
+ puts res_body
114
+ end
115
+ end
5
116
 
6
- def initialize(env)
7
- $vmpooler_url = env['VMPOOLER_URL']
117
+ command :delete do |c|
118
+ c.syntax = 'floaty delete [options]'
119
+ c.summary = 'Schedules the deletion of a host or hosts'
120
+ c.description = ''
121
+ c.example 'Schedules the deletion of a host or hosts', 'floaty delete --hosts myhost1,myhost2 --url http://vmpooler.example.com'
122
+ c.option '--verbose', 'Enables verbose output'
123
+ c.option '--hosts STRING', String, 'Hostname(s) to delete'
124
+ c.option '--url STRING', String, 'URL of vmpooler'
125
+ c.action do |args, options|
126
+ verbose = options.verbose || config['verbose']
127
+ hosts = options.hosts
128
+ url = options.url ||= config['url']
8
129
 
9
- unless $vmpooler_url
10
- $vmpooler_url = 'http://vcloud.delivery.puppetlabs.net'
130
+ Pooler.delete(verbose, url, hosts)
131
+ end
11
132
  end
133
+
134
+ command :snapshot do |c|
135
+ c.syntax = 'floaty snapshot [options]'
136
+ c.summary = 'Takes a snapshot of a given vm'
137
+ c.description = ''
138
+ c.example 'Takes a snapshot for a given host', 'floaty snapshot --url http://vmpooler.example.com --host myvm.example.com --token a9znth9dn01t416hrguu56ze37t790bl'
139
+ c.option '--verbose', 'Enables verbose output'
140
+ c.option '--url STRING', String, 'URL of vmpooler'
141
+ c.option '--host STRING', String, 'Hostname to modify'
142
+ c.option '--token STRING', String, 'Token for vmpooler'
143
+ c.action do |args, options|
144
+ verbose = options.verbose || config['verbose']
145
+ url = options.url ||= config['url']
146
+ hostname = options.host
147
+ token = options.token ||= config['token']
148
+
149
+ res_body = Pooler.snapshot(verbose, url, hostname, token)
150
+ puts res_body
151
+ end
152
+ end
153
+
154
+ command :revert do |c|
155
+ c.syntax = 'floaty revert [options]'
156
+ c.summary = 'Reverts a vm to a specified snapshot'
157
+ c.description = ''
158
+ c.example 'Reverts to a snapshot for a given host', 'floaty revert --url http://vmpooler.example.com --host myvm.example.com --token a9znth9dn01t416hrguu56ze37t790bl --snapshot n4eb4kdtp7rwv4x158366vd9jhac8btq'
159
+ c.option '--verbose', 'Enables verbose output'
160
+ c.option '--url STRING', String, 'URL of vmpooler'
161
+ c.option '--host STRING', String, 'Hostname to modify'
162
+ c.option '--token STRING', String, 'Token for vmpooler'
163
+ c.option '--snapshot STRING', String, 'SHA of snapshot'
164
+ c.action do |args, options|
165
+ verbose = options.verbose || config['verbose']
166
+ url = options.url ||= config['url']
167
+ hostname = options.host
168
+ token = options.token || config['token']
169
+ snapshot_sha = options.snapshot
170
+
171
+ res_body = Pooler.revert(verbose, url, hostname, token, snapshot_sha)
172
+ puts res_body
173
+ end
174
+ end
175
+
176
+ command :status do |c|
177
+ c.syntax = 'floaty status [options]'
178
+ c.summary = 'Prints the status of vmpooler'
179
+ c.description = ''
180
+ c.example 'Gets the current vmpooler status', 'floaty status --url http://vmpooler.example.com'
181
+ c.option '--verbose', 'Enables verbose output'
182
+ c.option '--url STRING', String, 'URL of vmpooler'
183
+ c.action do |args, options|
184
+ verbose = options.verbose || config['verbose']
185
+ url = options.url ||= config['url']
186
+
187
+ status = Pooler.status(verbose, url)
188
+ puts status
189
+ end
190
+ end
191
+
192
+ command :summary do |c|
193
+ c.syntax = 'floaty summary [options]'
194
+ c.summary = 'Prints the summary of vmpooler'
195
+ c.description = ''
196
+ c.example 'Gets the current day summary of vmpooler', 'floaty summary --url http://vmpooler.example.com'
197
+ c.option '--verbose', 'Enables verbose output'
198
+ c.option '--url STRING', String, 'URL of vmpooler'
199
+ c.action do |args, options|
200
+ verbose = options.verbose || config['verbose']
201
+ url = options.url ||= config['url']
202
+
203
+ summary = Pooler.summary(verbose, url)
204
+ puts summary
205
+ end
206
+ end
207
+
208
+ command :token do |c|
209
+ c.syntax = 'floaty token [get | delete | status]'
210
+ c.summary = 'Retrieves or deletes a token'
211
+ c.description = ''
212
+ c.example '', ''
213
+ c.option '--verbose', 'Enables verbose output'
214
+ c.option '--url STRING', String, 'URL of vmpooler'
215
+ c.option '--user STRING', String, 'User to authenticate with'
216
+ c.option '--token STRING', String, 'Token for vmpooler'
217
+ c.action do |args, options|
218
+ verbose = options.verbose || config['verbose']
219
+ action = args.first
220
+ url = options.url ||= config['url']
221
+ token = options.token ||= config['token']
222
+ user = options.user ||= config['user']
223
+ pass = password "Enter your password please:", '*'
224
+
225
+ case action
226
+ when "get"
227
+ puts Auth.get_token(verbose, url, user, pass)
228
+ when "delete"
229
+ Auth.delete_token(verbose, url, user, pass, token)
230
+ when "status"
231
+ Auth.token_status(verbose, url, user, pass, token)
232
+ when nil
233
+ STDERR.puts "No action provided"
234
+ else
235
+ STDERR.puts "Unknown action: #{action}"
236
+ end
237
+ end
238
+ end
239
+
240
+ run!
12
241
  end
13
242
 
14
- def start
15
- CLI.start(ARGV)
243
+ def read_config
244
+ conf = {}
245
+ begin
246
+ conf = YAML.load_file("#{Dir.home}/.vmfloaty.yml")
247
+ rescue
248
+ STDERR.puts "There was no config file at #{Dir.home}/.vmfloaty.yml"
249
+ end
250
+ conf
16
251
  end
17
252
  end
@@ -0,0 +1,59 @@
1
+ require 'faraday'
2
+ require 'json'
3
+ require 'vmfloaty/http'
4
+
5
+ class Auth
6
+ def self.get_token(verbose, url, user, password)
7
+ conn = Http.get_conn_with_auth(verbose, url, user, password)
8
+
9
+ resp = conn.post "/token"
10
+
11
+ res_body = JSON.parse(resp.body)
12
+ if res_body["ok"]
13
+ return res_body["token"]
14
+ else
15
+ STDERR.puts "There was a problem with your request:"
16
+ puts res_body
17
+ exit 1
18
+ end
19
+ end
20
+
21
+ def self.delete_token(verbose, url, user, password, token)
22
+ if token.nil?
23
+ STDERR.puts 'You did not provide a token'
24
+ exit 1
25
+ end
26
+
27
+ conn = Http.get_conn_with_auth(verbose, url, user, password)
28
+
29
+ response = conn.delete "/token/#{token}"
30
+ res_body = JSON.parse(response.body)
31
+ if res_body["ok"]
32
+ puts res_body
33
+ else
34
+ STDERR.puts "There was a problem with your request:"
35
+ puts res_body
36
+ exit 1
37
+ end
38
+ end
39
+
40
+ def self.token_status(verbose, url, user, password, token)
41
+ if token.nil?
42
+ STDERR.puts 'You did not provide a token'
43
+ exit 1
44
+ end
45
+
46
+ conn = Http.get_conn_with_auth(verbose, url, user, password)
47
+
48
+ response = conn.get "/token/#{token}"
49
+ res_body = JSON.parse(response.body)
50
+
51
+ if res_body["ok"]
52
+ puts res_body
53
+ else
54
+ STDERR.puts "There was a problem with your request:"
55
+ puts res_body
56
+ exit 1
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,60 @@
1
+ require 'faraday'
2
+
3
+ class Http
4
+ def self.get_conn(verbose, url)
5
+ if url.nil?
6
+ STDERR.puts "The url you provided was empty"
7
+ exit 1
8
+ end
9
+
10
+ conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
11
+ faraday.request :url_encoded
12
+ faraday.response :logger if verbose
13
+ faraday.adapter Faraday.default_adapter
14
+ end
15
+
16
+ return conn
17
+ end
18
+
19
+ def self.get_conn_with_auth(verbose, url, user, password)
20
+ if url.nil?
21
+ STDERR.puts "The url you provided was empty"
22
+ exit 1
23
+ end
24
+
25
+ if user.nil?
26
+ STDERR.puts "You did not provide a user to authenticate with"
27
+ exit 1
28
+ end
29
+
30
+ conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
31
+ faraday.request :url_encoded
32
+ faraday.request :basic_auth, user, password
33
+ faraday.response :logger if verbose
34
+ faraday.adapter Faraday.default_adapter
35
+ end
36
+
37
+ return conn
38
+ end
39
+
40
+ def self.get_conn_with_token(verbose, url, token)
41
+ if url.nil?
42
+ STDERR.puts "The url you provided was empty"
43
+ exit 1
44
+ end
45
+
46
+ if token.nil?
47
+ STDERR.puts "The token you provided was empty"
48
+ exit 1
49
+ end
50
+
51
+ conn = Faraday.new(:url => url, :ssl => {:verify => false}) do |faraday|
52
+ faraday.request :url_encoded
53
+ faraday.request :token_auth, token
54
+ faraday.response :logger if verbose
55
+ faraday.adapter Faraday.default_adapter
56
+ end
57
+
58
+ return conn
59
+ end
60
+ end
@@ -0,0 +1,108 @@
1
+ require 'faraday'
2
+ require 'vmfloaty/http'
3
+ require 'json'
4
+
5
+ class Pooler
6
+ def self.list(verbose, url, os_filter=nil)
7
+ conn = Http.get_conn(verbose, url)
8
+
9
+ response = conn.get '/vm'
10
+ response_body = JSON.parse(response.body)
11
+
12
+ if os_filter
13
+ hosts = response_body.select { |i| i[/#{os_filter}/] }
14
+ else
15
+ hosts = response_body
16
+ end
17
+
18
+ hosts
19
+ end
20
+
21
+ def self.retrieve(verbose, os_type, token, url)
22
+ os = os_type.gsub(',','+')
23
+ if token.nil?
24
+ conn = Http.get_conn(verbose, url)
25
+ else
26
+ conn = Http.get_conn_with_token(verbose, url, token)
27
+ conn.headers['X-AUTH-TOKEN']
28
+ end
29
+
30
+ response = conn.post "/vm/#{os}"
31
+
32
+ res_body = JSON.parse(response.body)
33
+ res_body
34
+ end
35
+
36
+ def self.modify(verbose, url, hostname, token, lifetime, tags)
37
+ modify_body = {'lifetime'=>lifetime, 'tags'=>tags}
38
+ conn = Http.get_conn_with_token(verbose, url, token)
39
+ conn.headers['X-AUTH-TOKEN']
40
+
41
+ response = conn.put do |req|
42
+ req.url "/vm/#{hostname}"
43
+ end
44
+ res_body = JSON.parse(response.body)
45
+
46
+ res_body
47
+ end
48
+
49
+ def self.delete(verbose, url, hostnames)
50
+ if hostnames.nil?
51
+ STDERR.puts "You did not provide any hosts to delete"
52
+ exit 1
53
+ end
54
+
55
+ hosts = hostnames.split(',')
56
+ conn = Http.get_conn(verbose, url)
57
+
58
+ hosts.each do |host|
59
+ puts "Scheduling host #{host} for deletion"
60
+ response = conn.delete "/vm/#{host}"
61
+ res_body = JSON.parse(response.body)
62
+ puts res_body
63
+ end
64
+ end
65
+
66
+ def self.status(verbose, url)
67
+ conn = Http.get_conn(verbose, url)
68
+
69
+ response = conn.get '/status'
70
+ res_body = JSON.parse(response.body)
71
+ res_body
72
+ end
73
+
74
+ def self.summary(verbose, url)
75
+ conn = Http.get_conn(verbose, url)
76
+
77
+ response = conn.get '/summary'
78
+ res_body = JSON.parse(response.body)
79
+ res_body
80
+ end
81
+
82
+ def self.query(verbose, url, hostname)
83
+ conn = Http.get_conn(verbose, url)
84
+
85
+ response = conn.get "/vm/#{hostname}"
86
+ res_body = JSON.parse(response.body)
87
+
88
+ res_body
89
+ end
90
+
91
+ def self.snapshot(verbose, url, hostname, token)
92
+ conn = Http.get_conn_with_token(verbose, url, token)
93
+ conn.headers['X-AUTH-TOKEN']
94
+
95
+ response = conn.post "/vm/#{hostname}/snapshot"
96
+ res_body = JSON.parse(response.body)
97
+ res_body
98
+ end
99
+
100
+ def self.revert(verbose, url, hostname, token, snapshot_sha)
101
+ conn = Http.get_conn_with_token(verbose, url, token)
102
+ conn.headers['X-AUTH-TOKEN']
103
+
104
+ response = conn.post "/vm/#{hostname}/snapshot/#{snapshot}"
105
+ res_body = JSON.parse(response.body)
106
+ res_body
107
+ end
108
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmfloaty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.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: 2014-12-09 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: thor
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '0.19'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '0.19'
11
+ date: 2015-09-15 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: A helper tool for vmpooler to help you stay afloat
28
14
  email:
29
15
  - brian.cain@puppetlabs.com
@@ -36,9 +22,9 @@ files:
36
22
  - README.md
37
23
  - bin/floaty
38
24
  - lib/vmfloaty.rb
39
- - lib/vmfloaty/cli.rb
40
- - lib/vmfloaty/hosts.rb
41
- - lib/vmfloaty/version.rb
25
+ - lib/vmfloaty/auth.rb
26
+ - lib/vmfloaty/http.rb
27
+ - lib/vmfloaty/pooler.rb
42
28
  - spec/spec_helper.rb
43
29
  homepage: https://github.com/briancain/vmfloaty
44
30
  licenses:
@@ -60,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
46
  version: '0'
61
47
  requirements: []
62
48
  rubyforge_project:
63
- rubygems_version: 2.2.2
49
+ rubygems_version: 2.4.8
64
50
  signing_key:
65
51
  specification_version: 4
66
52
  summary: CLI application to interface with vmpooler
data/lib/vmfloaty/cli.rb DELETED
@@ -1,87 +0,0 @@
1
- require 'thor'
2
- require 'net/http'
3
- require 'uri'
4
- require 'json'
5
-
6
- class CLI < Thor
7
- desc "get <OPERATING SYSTEM,...>", "Gets a VM"
8
- def get(os_list)
9
- # HTTP POST -d os_list vmpooler.company.com/vm
10
-
11
- uri = URI.parse("#{$vmpooler_url}/vm/#{os_list.gsub(",","+")}")
12
- http = Net::HTTP.new(uri.host, uri.port)
13
- request = Net::HTTP::Post.new(uri.request_uri)
14
- response = http.request(request)
15
-
16
- if response.code.to_i == 200
17
- hosts = JSON.parse(response.body)
18
-
19
- # puts hosts
20
-
21
- save_hosts = {}
22
- hosts.each do |k,v|
23
- unless k == 'ok' || k == 'domain'
24
- save_hosts[k] = v['hostname']
25
- end
26
- end
27
-
28
- puts 'New Hosts:'
29
- puts save_hosts
30
-
31
- #hosts.add_host save_hosts
32
- end
33
-
34
- # parse host names/os's and save
35
- end
36
-
37
- desc "modify <HOSTNAME>", "Modify a VM"
38
- def modify(hostname)
39
- say 'Modify a vm'
40
- end
41
-
42
- desc "status", "List status of all active VMs"
43
- def status
44
- #$hosts.print_host_list
45
- end
46
-
47
- desc "list [PATTERN]", "List all open VMs"
48
- def list(pattern=nil)
49
- # HTTP GET vmpooler.company.com/vm
50
- uri = URI.parse("#{$vmpooler_url}/vm")
51
- response = Net::HTTP.get_response(uri)
52
- host_res = JSON.parse(response.body)
53
-
54
- if pattern
55
- # Filtering VMs based on pattern
56
- hosts = host_res.select { |i| i[/#{pattern}/] }
57
- else
58
- hosts = host_res
59
- end
60
-
61
- puts hosts
62
- end
63
-
64
- desc "release <HOSTNAME,...> [--all]", "Schedules a VM for deletion"
65
- option :all
66
- def release(hostname_list=nil)
67
- # HTTP DELETE vmpooler.company.com/vm/#{hostname}
68
- # { "ok": true }
69
-
70
- if options[:all]
71
- # release all hosts managed by vmfloaty
72
- else
73
- hostname_arr = hostname_list.split(',')
74
-
75
- hostname_arr.each do |hostname|
76
- say "Releasing host #{hostname}..."
77
- uri = URI.parse("#{$vmpooler_url}/vm/#{hostname}")
78
- http = Net::HTTP.new(uri.host, uri.port)
79
- request = Net::HTTP::Delete.new(uri.request_uri)
80
- response = http.request(request)
81
- res = JSON.parse(response.body)
82
-
83
- puts res
84
- end
85
- end
86
- end
87
- end
@@ -1,29 +0,0 @@
1
- # manage hosts used from vm pooler
2
- class Hosts
3
- def initialize
4
- @host_list = {}
5
- end
6
-
7
- def add_host(host_hash)
8
- host_hash.each do |k,v|
9
- if @host_list[k]
10
- @host_list[k].push(v)
11
- else
12
- if v.is_a?(Array)
13
- @host_list[k] = v
14
- else
15
- @host_list[k] = [v]
16
- end
17
- end
18
- end
19
-
20
- puts @host_list
21
- end
22
-
23
- def remove_host(host_id)
24
- end
25
-
26
- def print_host_list
27
- puts @host_list
28
- end
29
- end
@@ -1,5 +0,0 @@
1
- module Vmfloaty
2
- module CLI
3
- VERSION = '0.1.0'
4
- end
5
- end