knife-ovmcli 0.0.5
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 +7 -0
- data/lib/chef/knife/BaseOraclevmCommand.rb +536 -0
- data/lib/chef/knife/ovmcli_serverpool_list.rb +32 -0
- data/lib/chef/knife/ovmcli_tag_list.rb +33 -0
- data/lib/chef/knife/ovmcli_vm_addvnic.rb +46 -0
- data/lib/chef/knife/ovmcli_vm_clone.rb +52 -0
- data/lib/chef/knife/ovmcli_vm_delete.rb +43 -0
- data/lib/chef/knife/ovmcli_vm_edit.rb +58 -0
- data/lib/chef/knife/ovmcli_vm_list.rb +32 -0
- data/lib/chef/knife/ovmcli_vm_message.rb +46 -0
- data/lib/chef/knife/ovmcli_vm_state.rb +117 -0
- data/lib/knife-ovmcli/version.rb +4 -0
- metadata +82 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fd4ff98527b955b67add9fc80e2a32ee4d4a6976
|
4
|
+
data.tar.gz: dbfd4153b048926fa3b33d5cc13d566dec27878c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d0c9bf631443ed356fd5e9d566a63fb64c9967c88c3cfcb2b1a4ef964d1550c1e7d669900139eb937e9ab771243344496323968429d2c19db63c9e1621a38bbe
|
7
|
+
data.tar.gz: 46eecc680fda0331fe7f65b7420150b5801098fefe54d4264efa0b3baa6d6379a70cf000074e0febe0296248ef3db74c66eacf7cfe1f4c44ae173088750a583f
|
@@ -0,0 +1,536 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# Contributor::
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife'
|
8
|
+
|
9
|
+
# Base class for OvmCli knife commands
|
10
|
+
class Chef
|
11
|
+
class Knife
|
12
|
+
class BaseOraclevmCommand < Knife
|
13
|
+
|
14
|
+
deps do
|
15
|
+
require 'chef/knife/bootstrap'
|
16
|
+
Chef::Knife::Bootstrap.load_deps
|
17
|
+
require 'fog'
|
18
|
+
require 'socket'
|
19
|
+
require 'net/ssh'
|
20
|
+
require 'readline'
|
21
|
+
require 'chef/json_compat'
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get_common_options
|
25
|
+
unless defined? $default
|
26
|
+
$default = Hash.new
|
27
|
+
end
|
28
|
+
|
29
|
+
option :ovmmgr_user,
|
30
|
+
:short => "-u USERNAME",
|
31
|
+
:long => "--ovmmgruser USERNAME",
|
32
|
+
:description => "The username for OracleVM Manager"
|
33
|
+
$default[:ovmmgr_user] = "admin"
|
34
|
+
|
35
|
+
option :ovmmgr_pass,
|
36
|
+
:short => "-p PASSWORD",
|
37
|
+
:long => "--ovmmgrpass PASSWORD",
|
38
|
+
:description => "The password for OracleVM Manager"
|
39
|
+
|
40
|
+
option :ovmmgr_host,
|
41
|
+
:long => "--ovmmgrhost HOST",
|
42
|
+
:description => "The OracleVM Manager host"
|
43
|
+
|
44
|
+
option :ovmmgr_port,
|
45
|
+
:long => "--ovmmgrport PORT",
|
46
|
+
:description => "The OracleVM Manager CLI port number to use"
|
47
|
+
$default[:ovmmgr_port] = 10000
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_config(key)
|
51
|
+
key = key.to_sym
|
52
|
+
rval = config[key] || Chef::Config[:knife][key] || $default[key]
|
53
|
+
Chef::Log.debug("value for config item #{key}: #{rval}")
|
54
|
+
rval
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_cli_connection
|
58
|
+
|
59
|
+
conn_opts = {
|
60
|
+
:host => get_config(:ovmmgr_host),
|
61
|
+
:path => get_config(:ovmmgr_path),
|
62
|
+
:port => get_config(:ovmmgr_port),
|
63
|
+
:user => get_config(:ovmmgr_user),
|
64
|
+
:password => get_config(:ovmmgr_pass),
|
65
|
+
}
|
66
|
+
|
67
|
+
# Grab the ovmmgr host from the command line
|
68
|
+
# if tt is not in the config file
|
69
|
+
if not conn_opts[:host]
|
70
|
+
conn_opts[:host] = get_host
|
71
|
+
end
|
72
|
+
# Grab the password from the command line
|
73
|
+
# if tt is not in the config file
|
74
|
+
if not conn_opts[:password]
|
75
|
+
conn_opts[:password] = get_password
|
76
|
+
end
|
77
|
+
if conn_opts[:port]
|
78
|
+
Chef::Log.debug("Waiting for port #{conn_opts[:port]} on #{conn_opts[:host]}...")
|
79
|
+
tcp_test_port(conn_opts[:host],conn_opts[:port])
|
80
|
+
end
|
81
|
+
return conn_opts
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_host
|
85
|
+
@host ||= ui.ask("Enter your OVM Mgr Host: ") { |q| q.echo = true }
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_password
|
89
|
+
@password ||= ui.ask("Enter your password: ") { |q| q.echo = false }
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_vm(vmname)
|
93
|
+
return retval
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
def fatal_exit(msg)
|
98
|
+
ui.fatal(msg)
|
99
|
+
exit 1
|
100
|
+
end
|
101
|
+
|
102
|
+
def tcp_test_port(hostname,port)
|
103
|
+
tcp_socket = TCPSocket.new(hostname, port)
|
104
|
+
readable = IO.select([tcp_socket], nil, nil, 5)
|
105
|
+
if readable
|
106
|
+
Chef::Log.debug("accepting connections on #{hostname}, banner is #{tcp_socket.gets}")
|
107
|
+
true
|
108
|
+
else
|
109
|
+
false
|
110
|
+
end
|
111
|
+
rescue Errno::ETIMEDOUT
|
112
|
+
false
|
113
|
+
rescue Errno::EPERM
|
114
|
+
false
|
115
|
+
rescue Errno::ECONNREFUSED
|
116
|
+
sleep 2
|
117
|
+
false
|
118
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH
|
119
|
+
sleep 2
|
120
|
+
false
|
121
|
+
ensure
|
122
|
+
tcp_socket && tcp_socket.close
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
# show_vm_status, given a vmname return the operational status of the vm
|
127
|
+
#
|
128
|
+
def show_vm_status(vmname)
|
129
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
130
|
+
|
131
|
+
conn_opts=get_cli_connection
|
132
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
133
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
134
|
+
output = ssh.exec!("show vm name=#{vmname}")
|
135
|
+
output.each_line do |line|
|
136
|
+
if line.match(/Status:/)
|
137
|
+
current[:status]=line.split[1].strip
|
138
|
+
elsif line.match(/Time:/)
|
139
|
+
line["Time: "]=""
|
140
|
+
current[:time]=line.strip
|
141
|
+
elsif line.match(/ Status = /)
|
142
|
+
current[:vmstatus]=line.split('=')[1].strip
|
143
|
+
elsif line.match(/Error Msg:/)
|
144
|
+
line["Error Msg: "]=""
|
145
|
+
current[:errormsg]=line.strip
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
return current
|
150
|
+
end
|
151
|
+
|
152
|
+
#
|
153
|
+
# start_vm, given a vmname issue a start request
|
154
|
+
#
|
155
|
+
def start_vm(vmname)
|
156
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
157
|
+
|
158
|
+
conn_opts=get_cli_connection
|
159
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
160
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
161
|
+
output = ssh.exec!("start vm name=#{vmname}")
|
162
|
+
output.each_line do |line|
|
163
|
+
if line.match(/Status:/)
|
164
|
+
current[:status]=line.split[1].strip
|
165
|
+
elsif line.match(/Time:/)
|
166
|
+
line["Time: "]=""
|
167
|
+
current[:time]=line.strip
|
168
|
+
elsif line.match(/Error Msg:/)
|
169
|
+
line["Error Msg: "]=""
|
170
|
+
current[:errormsg]=line.strip
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
return current
|
175
|
+
end
|
176
|
+
#
|
177
|
+
# stop_vm, given a vmname issue a stop request
|
178
|
+
#
|
179
|
+
def stop_vm(vmname)
|
180
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
181
|
+
|
182
|
+
conn_opts=get_cli_connection
|
183
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
184
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
185
|
+
output = ssh.exec!("stop vm name=#{vmname}")
|
186
|
+
output.each_line do |line|
|
187
|
+
if line.match(/Status:/)
|
188
|
+
current[:status]=line.split[1].strip
|
189
|
+
elsif line.match(/Time:/)
|
190
|
+
line["Time: "]=""
|
191
|
+
current[:time]=line.strip
|
192
|
+
elsif line.match(/Error Msg:/)
|
193
|
+
line["Error Msg: "]=""
|
194
|
+
current[:errormsg]=line.strip
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
return current
|
199
|
+
end
|
200
|
+
#
|
201
|
+
# suspend_vm, given a vmname issue a suspend request
|
202
|
+
#
|
203
|
+
def suspend_vm(vmname)
|
204
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
205
|
+
|
206
|
+
conn_opts=get_cli_connection
|
207
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
208
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
209
|
+
output = ssh.exec!("suspend vm name=#{vmname}")
|
210
|
+
output.each_line do |line|
|
211
|
+
if line.match(/Status:/)
|
212
|
+
current[:status]=line.split[1].strip
|
213
|
+
elsif line.match(/Time:/)
|
214
|
+
line["Time: "]=""
|
215
|
+
current[:time]=line.strip
|
216
|
+
elsif line.match(/Error Msg:/)
|
217
|
+
line["Error Msg: "]=""
|
218
|
+
current[:errormsg]=line.strip
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
return current
|
223
|
+
end
|
224
|
+
#
|
225
|
+
# resume_vm, given a vmname issue a resume request
|
226
|
+
#
|
227
|
+
def resume_vm(vmname)
|
228
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
229
|
+
|
230
|
+
conn_opts=get_cli_connection
|
231
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
232
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
233
|
+
output = ssh.exec!("resume vm name=#{vmname}")
|
234
|
+
output.each_line do |line|
|
235
|
+
if line.match(/Status:/)
|
236
|
+
current[:status]=line.split[1].strip
|
237
|
+
elsif line.match(/Time:/)
|
238
|
+
line["Time: "]=""
|
239
|
+
current[:time]=line.strip
|
240
|
+
elsif line.match(/Error Msg:/)
|
241
|
+
line["Error Msg: "]=""
|
242
|
+
current[:errormsg]=line.strip
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
return current
|
247
|
+
end
|
248
|
+
#
|
249
|
+
# restart_vm, given a vmname issue a restart request
|
250
|
+
#
|
251
|
+
def restart_vm(vmname)
|
252
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
253
|
+
|
254
|
+
conn_opts=get_cli_connection
|
255
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
256
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
257
|
+
output = ssh.exec!("restart vm name=#{vmname}")
|
258
|
+
output.each_line do |line|
|
259
|
+
if line.match(/Status:/)
|
260
|
+
current[:status]=line.split[1].strip
|
261
|
+
elsif line.match(/Time:/)
|
262
|
+
line["Time: "]=""
|
263
|
+
current[:time]=line.strip
|
264
|
+
elsif line.match(/Error Msg:/)
|
265
|
+
line["Error Msg: "]=""
|
266
|
+
current[:errormsg]=line.strip
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
return current
|
271
|
+
end
|
272
|
+
#
|
273
|
+
# list_vm, display all vm's
|
274
|
+
#
|
275
|
+
def list_vm(vmname)
|
276
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
277
|
+
|
278
|
+
conn_opts=get_cli_connection
|
279
|
+
if not vmname
|
280
|
+
Chef::Log.debug("#{conn_opts[:host]}...list vm")
|
281
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
282
|
+
output = ssh.exec!("list vm")
|
283
|
+
output.each_line do |line|
|
284
|
+
if line.match(/Status:/)
|
285
|
+
current[:status]=line.split[1].strip
|
286
|
+
elsif line.match(/Time:/)
|
287
|
+
line["Time: "]=""
|
288
|
+
current[:time]=line.strip
|
289
|
+
elsif line.match(/ id:/)
|
290
|
+
puts line.split(':')[2].strip
|
291
|
+
elsif line.match(/Error Msg:/)
|
292
|
+
line["Error Msg: "]=""
|
293
|
+
current[:errormsg]=line.strip
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
return current
|
298
|
+
else
|
299
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{vmname}")
|
300
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
301
|
+
output = ssh.exec!("show vm name=#{vmname}")
|
302
|
+
output.each_line do |line|
|
303
|
+
if line.match(/Status:/)
|
304
|
+
current[:status]=line.split[1].strip
|
305
|
+
elsif line.match(/Time:/)
|
306
|
+
line["Time: "]=""
|
307
|
+
current[:time]=line.strip
|
308
|
+
elsif line.match(/Error Msg:/)
|
309
|
+
line["Error Msg: "]=""
|
310
|
+
current[:errormsg]=line.strip
|
311
|
+
elsif line.match(/ /)
|
312
|
+
puts line
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
return current
|
317
|
+
end
|
318
|
+
end
|
319
|
+
#
|
320
|
+
# list_serverpool, display all server pool's
|
321
|
+
#
|
322
|
+
def list_serverpool(pool)
|
323
|
+
current = {:errormsg => "", :status => "", :time => "", :poolstatus => ""}
|
324
|
+
|
325
|
+
conn_opts=get_cli_connection
|
326
|
+
if not pool
|
327
|
+
Chef::Log.debug("#{conn_opts[:host]}...list serverpool")
|
328
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
329
|
+
output = ssh.exec!("list serverpool")
|
330
|
+
output.each_line do |line|
|
331
|
+
if line.match(/Status:/)
|
332
|
+
current[:status]=line.split[1].strip
|
333
|
+
elsif line.match(/Time:/)
|
334
|
+
line["Time: "]=""
|
335
|
+
current[:time]=line.strip
|
336
|
+
elsif line.match(/ id:/)
|
337
|
+
puts line.split(':')[2].strip
|
338
|
+
elsif line.match(/Error Msg:/)
|
339
|
+
line["Error Msg: "]=""
|
340
|
+
current[:errormsg]=line.strip
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
344
|
+
return current
|
345
|
+
else
|
346
|
+
Chef::Log.debug("#{conn_opts[:host]}...show serverpool name=#{pool}")
|
347
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
348
|
+
output = ssh.exec!("show serverpool name=#{pool}")
|
349
|
+
output.each_line do |line|
|
350
|
+
if line.match(/Status:/)
|
351
|
+
current[:status]=line.split[1].strip
|
352
|
+
elsif line.match(/Time:/)
|
353
|
+
line["Time: "]=""
|
354
|
+
current[:time]=line.strip
|
355
|
+
elsif line.match(/Error Msg:/)
|
356
|
+
line["Error Msg: "]=""
|
357
|
+
current[:errormsg]=line.strip
|
358
|
+
elsif line.match(/ /)
|
359
|
+
puts line
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
return current
|
364
|
+
end
|
365
|
+
end
|
366
|
+
#
|
367
|
+
# delete_vm, delete VM
|
368
|
+
#
|
369
|
+
def delete_vm(vmname)
|
370
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
371
|
+
|
372
|
+
conn_opts=get_cli_connection
|
373
|
+
Chef::Log.debug("#{conn_opts[:host]}...delete vm name=#{vmname}")
|
374
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
375
|
+
output = ssh.exec!("delete vm name=#{vmname}")
|
376
|
+
output.each_line do |line|
|
377
|
+
if line.match(/Status:/)
|
378
|
+
current[:status]=line.split[1].strip
|
379
|
+
elsif line.match(/Time:/)
|
380
|
+
line["Time: "]=""
|
381
|
+
current[:time]=line.strip
|
382
|
+
elsif line.match(/Error Msg:/)
|
383
|
+
line["Error Msg: "]=""
|
384
|
+
current[:errormsg]=line.strip
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
return current
|
389
|
+
end
|
390
|
+
|
391
|
+
#
|
392
|
+
# clone_vm, clone VM
|
393
|
+
#
|
394
|
+
def clone_vm(vmname, desttype, destname, serverpool)
|
395
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
396
|
+
|
397
|
+
conn_opts=get_cli_connection
|
398
|
+
Chef::Log.debug("#{conn_opts[:host]}...clone vm name=#{vmname},#{desttype},#{destname},#{serverpool}")
|
399
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
400
|
+
output = ssh.exec!("clone vm name=#{vmname} destType=#{desttype} destname=#{destname} serverPool=#{serverpool}")
|
401
|
+
output.each_line do |line|
|
402
|
+
if line.match(/Status:/)
|
403
|
+
current[:status]=line.split[1].strip
|
404
|
+
elsif line.match(/Time:/)
|
405
|
+
line["Time: "]=""
|
406
|
+
current[:time]=line.strip
|
407
|
+
elsif line.match(/Error Msg:/)
|
408
|
+
line["Error Msg: "]=""
|
409
|
+
current[:errormsg]=line.strip
|
410
|
+
end
|
411
|
+
end
|
412
|
+
end
|
413
|
+
return current
|
414
|
+
end
|
415
|
+
#
|
416
|
+
# edit_vm, edit VM cpu and memory
|
417
|
+
#
|
418
|
+
def edit_vm(vmname, memory, memorylimit, cpucount, cpucountlimit)
|
419
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
420
|
+
|
421
|
+
conn_opts=get_cli_connection
|
422
|
+
Chef::Log.debug("#{conn_opts[:host]}...edit vm name=#{vmname},#{memory},#{memorylimit},#{cpucount},#{cpucountlimit}")
|
423
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
424
|
+
output = ssh.exec!("edit vm name=#{vmname} memory=#{memory} memorylimit=#{memorylimit} cpucount=#{cpucount} cpucountlimit=#{cpucountlimit}")
|
425
|
+
output.each_line do |line|
|
426
|
+
if line.match(/Status:/)
|
427
|
+
current[:status]=line.split[1].strip
|
428
|
+
elsif line.match(/Time:/)
|
429
|
+
line["Time: "]=""
|
430
|
+
current[:time]=line.strip
|
431
|
+
elsif line.match(/Error Msg:/)
|
432
|
+
line["Error Msg: "]=""
|
433
|
+
current[:errormsg]=line.strip
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
437
|
+
return current
|
438
|
+
end
|
439
|
+
#
|
440
|
+
# add_vnic, add vnic on vm
|
441
|
+
#
|
442
|
+
def add_vnic(vmname, network, vnicname)
|
443
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
444
|
+
|
445
|
+
conn_opts=get_cli_connection
|
446
|
+
Chef::Log.debug("#{conn_opts[:host]}...create vnic name=#{vnicname},#{network},#{vmname}")
|
447
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
448
|
+
output = ssh.exec!("create vnic name=#{vnicname} network=#{network} on vm name=#{vmname}")
|
449
|
+
output.each_line do |line|
|
450
|
+
if line.match(/Status:/)
|
451
|
+
current[:status]=line.split[1].strip
|
452
|
+
elsif line.match(/Time:/)
|
453
|
+
line["Time: "]=""
|
454
|
+
current[:time]=line.strip
|
455
|
+
elsif line.match(/Error Msg:/)
|
456
|
+
line["Error Msg: "]=""
|
457
|
+
current[:errormsg]=line.strip
|
458
|
+
end
|
459
|
+
end
|
460
|
+
end
|
461
|
+
return current
|
462
|
+
end
|
463
|
+
#
|
464
|
+
# send_message, send a vm message to a vm
|
465
|
+
#
|
466
|
+
def send_message(vmname, key, message)
|
467
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
468
|
+
|
469
|
+
conn_opts=get_cli_connection
|
470
|
+
Chef::Log.debug("#{conn_opts[:host]}...sendvmmessage vm name=#{vmname},#{key},#{message}")
|
471
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
472
|
+
output = ssh.exec!("sendvmmessage vm name=#{vmname} key=#{key} message=#{message} log=no")
|
473
|
+
output.each_line do |line|
|
474
|
+
if line.match(/Status:/)
|
475
|
+
current[:status]=line.split[1].strip
|
476
|
+
elsif line.match(/Time:/)
|
477
|
+
line["Time: "]=""
|
478
|
+
current[:time]=line.strip
|
479
|
+
elsif line.match(/Error Msg:/)
|
480
|
+
line["Error Msg: "]=""
|
481
|
+
current[:errormsg]=line.strip
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
return current
|
486
|
+
end
|
487
|
+
#
|
488
|
+
# List TAG
|
489
|
+
#
|
490
|
+
def list_tag(tag)
|
491
|
+
current = {:errormsg => "", :status => "", :time => "", :vmstatus => ""}
|
492
|
+
|
493
|
+
conn_opts=get_cli_connection
|
494
|
+
if not tag
|
495
|
+
Chef::Log.debug("#{conn_opts[:host]}...list vm")
|
496
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
497
|
+
output = ssh.exec!("list tag")
|
498
|
+
output.each_line do |line|
|
499
|
+
if line.match(/Status:/)
|
500
|
+
current[:status]=line.split[1].strip
|
501
|
+
elsif line.match(/Time:/)
|
502
|
+
line["Time: "]=""
|
503
|
+
current[:time]=line.strip
|
504
|
+
elsif line.match(/ id:/)
|
505
|
+
puts line.split(':')[2].strip
|
506
|
+
elsif line.match(/Error Msg:/)
|
507
|
+
line["Error Msg: "]=""
|
508
|
+
current[:errormsg]=line.strip
|
509
|
+
end
|
510
|
+
end
|
511
|
+
end
|
512
|
+
return current
|
513
|
+
else
|
514
|
+
Chef::Log.debug("#{conn_opts[:host]}...show vm name=#{tag}")
|
515
|
+
Net::SSH.start( conn_opts[:host], conn_opts[:user], :password => conn_opts[:password], :port => conn_opts[:port] ) do|ssh|
|
516
|
+
output = ssh.exec!("show tag name='#{tag}'")
|
517
|
+
output.each_line do |line|
|
518
|
+
if line.match(/Status:/)
|
519
|
+
current[:status]=line.split[1].strip
|
520
|
+
elsif line.match(/Time:/)
|
521
|
+
line["Time: "]=""
|
522
|
+
current[:time]=line.strip
|
523
|
+
elsif line.match(/Error Msg:/)
|
524
|
+
line["Error Msg: "]=""
|
525
|
+
current[:errormsg]=line.strip
|
526
|
+
elsif line.match(/ /)
|
527
|
+
puts line
|
528
|
+
end
|
529
|
+
end
|
530
|
+
end
|
531
|
+
return current
|
532
|
+
end
|
533
|
+
end
|
534
|
+
end
|
535
|
+
end
|
536
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'chef/knife'
|
7
|
+
require 'chef/knife/BaseOraclevmCommand'
|
8
|
+
require 'netaddr'
|
9
|
+
require 'net/ssh'
|
10
|
+
|
11
|
+
# list a server pool
|
12
|
+
class Chef::Knife::OvmcliServerpoolList < Chef::Knife::BaseOraclevmCommand
|
13
|
+
|
14
|
+
banner "knife ovmcli serverpool list <name>"
|
15
|
+
|
16
|
+
get_common_options
|
17
|
+
|
18
|
+
def run
|
19
|
+
|
20
|
+
$stdout.sync = true
|
21
|
+
|
22
|
+
pool = @name_args[0]
|
23
|
+
|
24
|
+
current=list_serverpool(pool)
|
25
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:poolstatus]}.")
|
26
|
+
|
27
|
+
if current[:status]!="Success"
|
28
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Code copied from Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# Author:: Michael Huisman michhuis@gmail.com
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife'
|
8
|
+
require 'chef/knife/BaseOraclevmCommand'
|
9
|
+
require 'netaddr'
|
10
|
+
require 'net/ssh'
|
11
|
+
|
12
|
+
# list tag
|
13
|
+
class Chef::Knife::OvmcliTagList < Chef::Knife::BaseOraclevmCommand
|
14
|
+
|
15
|
+
banner "knife ovmcli tag list <name>"
|
16
|
+
|
17
|
+
get_common_options
|
18
|
+
|
19
|
+
def run
|
20
|
+
|
21
|
+
$stdout.sync = true
|
22
|
+
|
23
|
+
tag = @name_args[0]
|
24
|
+
|
25
|
+
current=list_tag(tag)
|
26
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
27
|
+
|
28
|
+
if current[:status]!="Success"
|
29
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# Code copied from Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# Author:: Michael Huisman michhuis@gmail.com
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife'
|
8
|
+
require 'chef/knife/BaseOraclevmCommand'
|
9
|
+
require 'netaddr'
|
10
|
+
require 'net/ssh'
|
11
|
+
|
12
|
+
# Add vnic on a virtual machine
|
13
|
+
class Chef::Knife::OvmcliVmAddvnic < Chef::Knife::BaseOraclevmCommand
|
14
|
+
|
15
|
+
banner "knife ovmcli vm addvnic VMNAME (options)"
|
16
|
+
|
17
|
+
option :network,
|
18
|
+
:short => "-n VALUE",
|
19
|
+
:long => "--network VALUE",
|
20
|
+
:description => "The name of the network."
|
21
|
+
|
22
|
+
option :vnicname,
|
23
|
+
:short => "-s VALUE",
|
24
|
+
:long => "--vnicname VALUE",
|
25
|
+
:description => "The name of the vnic."
|
26
|
+
|
27
|
+
get_common_options
|
28
|
+
|
29
|
+
def run
|
30
|
+
|
31
|
+
$stdout.sync = true
|
32
|
+
|
33
|
+
vmname = @name_args[0]
|
34
|
+
|
35
|
+
network=get_config(:network)
|
36
|
+
vnicname=get_config(:vnicname)
|
37
|
+
|
38
|
+
current=add_vnic(vmname, network, vnicname)
|
39
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
40
|
+
|
41
|
+
if current[:status]!="Success"
|
42
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#
|
2
|
+
# Code copied from Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# Author:: Michael Huisman michhuis@gmail.com
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife'
|
8
|
+
require 'chef/knife/BaseOraclevmCommand'
|
9
|
+
require 'netaddr'
|
10
|
+
require 'net/ssh'
|
11
|
+
|
12
|
+
# Clone a virtual machine
|
13
|
+
class Chef::Knife::OvmcliVmClone < Chef::Knife::BaseOraclevmCommand
|
14
|
+
|
15
|
+
banner "knife ovmcli vm clone VMNAME (options)"
|
16
|
+
|
17
|
+
option :desttype,
|
18
|
+
:short => "-t VALUE",
|
19
|
+
:long => "--desttype VALUE",
|
20
|
+
:description => "The object to create from the virtual machine can be a virtual machine or a template."
|
21
|
+
|
22
|
+
option :destname,
|
23
|
+
:short => "-n VALUE",
|
24
|
+
:long => "--destname VALUE",
|
25
|
+
:description => "The name of the cloned virtual machine or template."
|
26
|
+
|
27
|
+
option :serverpool,
|
28
|
+
:short => "-p VALUE",
|
29
|
+
:long => "--serverpool VALUE",
|
30
|
+
:description => "The server pool on which to deploy the cloned virtual machine or template."
|
31
|
+
|
32
|
+
get_common_options
|
33
|
+
|
34
|
+
def run
|
35
|
+
|
36
|
+
$stdout.sync = true
|
37
|
+
|
38
|
+
vmname = @name_args[0]
|
39
|
+
|
40
|
+
desttype=get_config(:desttype)
|
41
|
+
destname=get_config(:destname)
|
42
|
+
serverpool=get_config(:serverpool)
|
43
|
+
|
44
|
+
current=clone_vm(vmname, desttype, destname, serverpool)
|
45
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
46
|
+
|
47
|
+
if current[:status]!="Success"
|
48
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'chef/knife'
|
7
|
+
require 'chef/knife/BaseOraclevmCommand'
|
8
|
+
require 'netaddr'
|
9
|
+
require 'net/ssh'
|
10
|
+
|
11
|
+
# delete a VM
|
12
|
+
class Chef::Knife::OvmcliVmDelete < Chef::Knife::BaseOraclevmCommand
|
13
|
+
|
14
|
+
banner "knife ovmcli vm delete VMNAME"
|
15
|
+
|
16
|
+
get_common_options
|
17
|
+
|
18
|
+
|
19
|
+
def run
|
20
|
+
|
21
|
+
$stdout.sync = true
|
22
|
+
|
23
|
+
vmname = @name_args[0]
|
24
|
+
if vmname.nil?
|
25
|
+
show_usage
|
26
|
+
ui.fatal("You must specify a virtual machine name")
|
27
|
+
exit 1
|
28
|
+
end
|
29
|
+
current=show_vm_status(vmname)
|
30
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
31
|
+
|
32
|
+
if current[:status]=="Success"
|
33
|
+
dstatus=delete_vm(vmname)
|
34
|
+
if dstatus[:status] == "Success"
|
35
|
+
puts "#{dstatus[:status]}"
|
36
|
+
else
|
37
|
+
puts "Failed with #{dstatus[:errormsg]}"
|
38
|
+
end
|
39
|
+
else
|
40
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#
|
2
|
+
# Code copied from Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# Author:: Michael Huisman michhuis@gmail.com
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife'
|
8
|
+
require 'chef/knife/BaseOraclevmCommand'
|
9
|
+
require 'netaddr'
|
10
|
+
require 'net/ssh'
|
11
|
+
|
12
|
+
# Add vnic on a virtual machine
|
13
|
+
class Chef::Knife::OvmcliVmEdit < Chef::Knife::BaseOraclevmCommand
|
14
|
+
|
15
|
+
banner "knife ovmcli vm edit VMNAME (options)"
|
16
|
+
|
17
|
+
option :memory,
|
18
|
+
:short => "-m VALUE",
|
19
|
+
:long => "--memory VALUE",
|
20
|
+
:description => "The memory size the virtual machine is allocated in MB."
|
21
|
+
|
22
|
+
option :memorylimit,
|
23
|
+
:short => "-l VALUE",
|
24
|
+
:long => "--memoryLimit VALUE",
|
25
|
+
:description => "The maximum memory size the virtual machine can be allocated in MB."
|
26
|
+
|
27
|
+
option :cpucount,
|
28
|
+
:short => "-c VALUE",
|
29
|
+
:long => "--cpucount VALUE",
|
30
|
+
:description => "The number of processors the virtual machine is allocated."
|
31
|
+
|
32
|
+
option :cpucountlimit,
|
33
|
+
:short => "-x VALUE",
|
34
|
+
:long => "--cpucountlimit VALUE",
|
35
|
+
:description => "The maximum number of processors the virtual machine can be allocated."
|
36
|
+
|
37
|
+
get_common_options
|
38
|
+
|
39
|
+
def run
|
40
|
+
|
41
|
+
$stdout.sync = true
|
42
|
+
|
43
|
+
vmname = @name_args[0]
|
44
|
+
|
45
|
+
memory=get_config(:memory)
|
46
|
+
memorylimit=get_config(:memorylimit)
|
47
|
+
cpucount=get_config(:cpucount)
|
48
|
+
cpucountlimit=get_config(:cpucountlimit)
|
49
|
+
|
50
|
+
current=edit_vm(vmname, memory, memorylimit, cpucount, cpucountlimit)
|
51
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
52
|
+
|
53
|
+
if current[:status]!="Success"
|
54
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'chef/knife'
|
7
|
+
require 'chef/knife/BaseOraclevmCommand'
|
8
|
+
require 'netaddr'
|
9
|
+
require 'net/ssh'
|
10
|
+
|
11
|
+
# Manage power state of a virtual machine
|
12
|
+
class Chef::Knife::OvmcliVmList < Chef::Knife::BaseOraclevmCommand
|
13
|
+
|
14
|
+
banner "knife ovmcli vm list <name>"
|
15
|
+
|
16
|
+
get_common_options
|
17
|
+
|
18
|
+
def run
|
19
|
+
|
20
|
+
$stdout.sync = true
|
21
|
+
|
22
|
+
vmname = @name_args[0]
|
23
|
+
|
24
|
+
current=list_vm(vmname)
|
25
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
26
|
+
|
27
|
+
if current[:status]!="Success"
|
28
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# Code copied from Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# Author:: Michael Huisman michhuis@gmail.com
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife'
|
8
|
+
require 'chef/knife/BaseOraclevmCommand'
|
9
|
+
require 'netaddr'
|
10
|
+
require 'net/ssh'
|
11
|
+
|
12
|
+
# Add vnic on a virtual machine
|
13
|
+
class Chef::Knife::OvmcliVmMessage < Chef::Knife::BaseOraclevmCommand
|
14
|
+
|
15
|
+
banner "knife ovmcli vm message VMNAME (options)"
|
16
|
+
|
17
|
+
option :key,
|
18
|
+
:short => "-k VALUE",
|
19
|
+
:long => "--key VALUE",
|
20
|
+
:description => "The name of the key."
|
21
|
+
|
22
|
+
option :message,
|
23
|
+
:short => "-m VALUE",
|
24
|
+
:long => "--message VALUE",
|
25
|
+
:description => "The value of the message."
|
26
|
+
|
27
|
+
get_common_options
|
28
|
+
|
29
|
+
def run
|
30
|
+
|
31
|
+
$stdout.sync = true
|
32
|
+
|
33
|
+
vmname = @name_args[0]
|
34
|
+
|
35
|
+
key=get_config(:key)
|
36
|
+
message=get_config(:message)
|
37
|
+
|
38
|
+
current=send_message(vmname, key, message)
|
39
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
40
|
+
|
41
|
+
if current[:status]!="Success"
|
42
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Geoff O'Callaghan (<geoffocallaghan@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'chef/knife'
|
7
|
+
require 'chef/knife/BaseOraclevmCommand'
|
8
|
+
require 'netaddr'
|
9
|
+
require 'net/ssh'
|
10
|
+
|
11
|
+
# Manage power state of a virtual machine
|
12
|
+
class Chef::Knife::OvmcliVmState < Chef::Knife::BaseOraclevmCommand
|
13
|
+
|
14
|
+
banner "knife ovmcli vm state VMNAME (options)"
|
15
|
+
|
16
|
+
get_common_options
|
17
|
+
|
18
|
+
option :state,
|
19
|
+
:short => "-s STATE",
|
20
|
+
:long => "--state STATE",
|
21
|
+
:description => "The power state to transition the VM into; one of on|off|suspend|resume|restart"
|
22
|
+
|
23
|
+
|
24
|
+
def run
|
25
|
+
|
26
|
+
$stdout.sync = true
|
27
|
+
|
28
|
+
vmname = @name_args[0]
|
29
|
+
if vmname.nil?
|
30
|
+
show_usage
|
31
|
+
ui.fatal("You must specify a virtual machine name")
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
current=show_vm_status(vmname)
|
35
|
+
Chef::Log.debug("Status = #{current[:status]}. Time = #{current[:time]}. VM Status = #{current[:vmstatus]}.")
|
36
|
+
|
37
|
+
state=get_config(:state)
|
38
|
+
|
39
|
+
if current[:status]=="Success"
|
40
|
+
if not state
|
41
|
+
puts "Virtual machine #{vmname} is in state #{current[:vmstatus]}"
|
42
|
+
else
|
43
|
+
case current[:vmstatus]
|
44
|
+
when 'Running'
|
45
|
+
case state
|
46
|
+
when 'on'
|
47
|
+
puts "Virtual machine #{vmname} was already powered on"
|
48
|
+
when 'off'
|
49
|
+
result=stop_vm(vmname)
|
50
|
+
puts "Power off virtual machine #{vmname} : #{result[:status]}"
|
51
|
+
when 'suspend'
|
52
|
+
result=suspend_vm(vmname)
|
53
|
+
puts "Suspend virtual machine #{vmname} : #{result[:status]}"
|
54
|
+
when 'restart'
|
55
|
+
result=restart_vm(vmname)
|
56
|
+
puts "Restart virtual machine #{vmname} : #{result[:status]}"
|
57
|
+
when 'resume'
|
58
|
+
puts "Cannot Resume virtual machine #{vmname} as it is on"
|
59
|
+
else
|
60
|
+
show_usage
|
61
|
+
end
|
62
|
+
when 'Stopped'
|
63
|
+
case state
|
64
|
+
when 'on'
|
65
|
+
result=start_vm(vmname)
|
66
|
+
puts "Power on virtual machine #{vmname} : #{result[:status]}"
|
67
|
+
when 'off'
|
68
|
+
puts "virtual machine #{vmname} was already off"
|
69
|
+
when 'suspend'
|
70
|
+
puts "Cannot Suspend virtual machine #{vmname} as it is off"
|
71
|
+
when 'restart'
|
72
|
+
puts "Cannot Restrt virtual machine #{vmname} as it is off"
|
73
|
+
when 'resume'
|
74
|
+
puts "Cannot Resume virtual machine #{vmname} as it is off"
|
75
|
+
else
|
76
|
+
show_usage
|
77
|
+
end
|
78
|
+
when 'Stopping'
|
79
|
+
case state
|
80
|
+
when 'on'
|
81
|
+
puts "Cannot power on virtual machine #{vmname} as it is Stopping"
|
82
|
+
when 'off'
|
83
|
+
puts "Cannot power off virtual machine #{vmname} as it is Stopping"
|
84
|
+
when 'suspend'
|
85
|
+
puts "Cannot Suspend virtual machine #{vmname} as it is Stopping"
|
86
|
+
when 'restart'
|
87
|
+
puts "Cannot Restrt virtual machine #{vmname} as it is Stopping"
|
88
|
+
when 'resume'
|
89
|
+
puts "Cannot Resume virtual machine #{vmname} as it is Stopping"
|
90
|
+
else
|
91
|
+
show_usage
|
92
|
+
end
|
93
|
+
when 'Suspended'
|
94
|
+
case state
|
95
|
+
when 'on'
|
96
|
+
puts "Cannot Power on virtual machine #{vmname} as it is suspended"
|
97
|
+
when 'off'
|
98
|
+
puts "Cannot Power off virtual machine #{vmname} as it is suspended"
|
99
|
+
when 'suspend'
|
100
|
+
puts "Cannot Suspend virtual machine #{vmname} as it is already suspended"
|
101
|
+
when 'restart'
|
102
|
+
puts "Cannot Restart virtual machine #{vmname} as it is suspended"
|
103
|
+
when 'resume'
|
104
|
+
result=resume_vm(vmname)
|
105
|
+
puts "Resume virtual machine #{vmname} : #{result[:status]}"
|
106
|
+
else
|
107
|
+
show_usage
|
108
|
+
end
|
109
|
+
else
|
110
|
+
puts "I don't know what a state of #{current[:vmstatus]} is on #{vmname}"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
else
|
114
|
+
puts "Call to OVM CLI Failed with #{current[:errormsg]}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knife-ovmcli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Geoff O'Callaghan / Michael Huisman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: netaddr
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: chef
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.10.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.10.0
|
41
|
+
description: OracleVM Support for Chef's Knife Command
|
42
|
+
email: geoffocallaghan@gmail.com / michhuis@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/chef/knife/BaseOraclevmCommand.rb
|
48
|
+
- lib/chef/knife/ovmcli_serverpool_list.rb
|
49
|
+
- lib/chef/knife/ovmcli_tag_list.rb
|
50
|
+
- lib/chef/knife/ovmcli_vm_addvnic.rb
|
51
|
+
- lib/chef/knife/ovmcli_vm_clone.rb
|
52
|
+
- lib/chef/knife/ovmcli_vm_delete.rb
|
53
|
+
- lib/chef/knife/ovmcli_vm_edit.rb
|
54
|
+
- lib/chef/knife/ovmcli_vm_list.rb
|
55
|
+
- lib/chef/knife/ovmcli_vm_message.rb
|
56
|
+
- lib/chef/knife/ovmcli_vm_state.rb
|
57
|
+
- lib/knife-ovmcli/version.rb
|
58
|
+
homepage: http://github.com/michaelhuisman/knife-oraclevm
|
59
|
+
licenses: []
|
60
|
+
metadata: {}
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 2.6.4
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: OracleVM Support for Knife
|
81
|
+
test_files: []
|
82
|
+
has_rdoc:
|