opennebula-cli 5.6.2 → 5.7.80.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/oneacct +37 -35
- data/bin/oneacl +15 -15
- data/bin/onecluster +31 -31
- data/bin/onedatastore +35 -35
- data/bin/oneflow +274 -237
- data/bin/oneflow-template +161 -138
- data/bin/onegroup +32 -30
- data/bin/onehost +68 -63
- data/bin/oneimage +92 -81
- data/bin/onemarket +31 -29
- data/bin/onemarketapp +83 -75
- data/bin/onesecgroup +37 -33
- data/bin/oneshowback +40 -43
- data/bin/onetemplate +73 -70
- data/bin/oneuser +171 -158
- data/bin/onevcenter +70 -64
- data/bin/onevdc +61 -45
- data/bin/onevm +396 -260
- data/bin/onevmgroup +47 -47
- data/bin/onevnet +94 -158
- data/bin/onevntemplate +361 -0
- data/bin/onevrouter +76 -70
- data/bin/onezone +30 -31
- data/lib/one_helper.rb +106 -22
- data/lib/one_helper/oneacl_helper.rb +6 -4
- data/lib/one_helper/onevcenter_helper.rb +1 -1
- data/lib/one_helper/onevm_helper.rb +134 -91
- data/lib/one_helper/onevnet_helper.rb +20 -8
- data/lib/one_helper/onevntemplate_helper.rb +104 -0
- metadata +9 -6
data/bin/oneflow
CHANGED
@@ -16,16 +16,16 @@
|
|
16
16
|
# limitations under the License. #
|
17
17
|
#--------------------------------------------------------------------------- #
|
18
18
|
|
19
|
-
ONE_LOCATION=ENV[
|
19
|
+
ONE_LOCATION = ENV['ONE_LOCATION']
|
20
20
|
|
21
21
|
if !ONE_LOCATION
|
22
|
-
RUBY_LIB_LOCATION=
|
22
|
+
RUBY_LIB_LOCATION = '/usr/lib/one/ruby'
|
23
23
|
else
|
24
|
-
RUBY_LIB_LOCATION=ONE_LOCATION+
|
24
|
+
RUBY_LIB_LOCATION = ONE_LOCATION + '/lib/ruby'
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
$LOAD_PATH << RUBY_LIB_LOCATION
|
28
|
+
$LOAD_PATH << RUBY_LIB_LOCATION + '/cli'
|
29
29
|
|
30
30
|
require 'command_parser'
|
31
31
|
require 'opennebula/oneflow_client'
|
@@ -35,139 +35,142 @@ require 'one_helper/onevm_helper'
|
|
35
35
|
|
36
36
|
require 'json'
|
37
37
|
|
38
|
-
USER_AGENT =
|
38
|
+
USER_AGENT = 'CLI'
|
39
39
|
|
40
40
|
# Base Path representing the resource to be used in the requests
|
41
|
-
RESOURCE_PATH =
|
41
|
+
RESOURCE_PATH = '/service'
|
42
42
|
|
43
43
|
#
|
44
44
|
# Table
|
45
45
|
#
|
46
46
|
|
47
47
|
SERVICE_TABLE = CLIHelper::ShowTable.new(nil, self) do
|
48
|
-
column :ID,
|
49
|
-
d[
|
48
|
+
column :ID, 'ID', :size => 10 do |d|
|
49
|
+
d['ID']
|
50
50
|
end
|
51
51
|
|
52
|
-
column :USER,
|
53
|
-
d[
|
52
|
+
column :USER, 'Username', :left, :size => 15 do |d|
|
53
|
+
d['UNAME']
|
54
54
|
end
|
55
55
|
|
56
|
-
column :GROUP,
|
57
|
-
d[
|
56
|
+
column :GROUP, 'Group', :left, :size => 15 do |d|
|
57
|
+
d['GNAME']
|
58
58
|
end
|
59
59
|
|
60
|
-
column :NAME,
|
61
|
-
d[
|
60
|
+
column :NAME, 'Name', :size => 25, :left => true do |d|
|
61
|
+
d['NAME']
|
62
62
|
end
|
63
63
|
|
64
|
-
column :STATE,
|
65
|
-
Service.state_str(d[
|
64
|
+
column :STATE, 'State', :size => 11, :left => true do |d|
|
65
|
+
Service.state_str(d['TEMPLATE']['BODY']['state'])
|
66
66
|
end
|
67
67
|
|
68
68
|
default :ID, :USER, :GROUP, :NAME, :STATE
|
69
69
|
end
|
70
70
|
|
71
71
|
NODE_TABLE = CLIHelper::ShowTable.new(nil, self) do
|
72
|
-
column :VM_ID,
|
73
|
-
st =
|
72
|
+
column :VM_ID, 'ONE identifier for Virtual Machine', :size => 6 do |d|
|
73
|
+
st = ''
|
74
74
|
if d['scale_up']
|
75
|
-
st <<
|
75
|
+
st << '\u2191 '
|
76
76
|
elsif d['disposed']
|
77
|
-
st <<
|
77
|
+
st << '\u2193 '
|
78
78
|
end
|
79
79
|
|
80
80
|
if d['vm_info'].nil?
|
81
81
|
st << d['deploy_id'].to_s
|
82
82
|
else
|
83
|
-
st << d['vm_info']['VM'][
|
83
|
+
st << d['vm_info']['VM']['ID']
|
84
84
|
end
|
85
85
|
|
86
86
|
st
|
87
87
|
end
|
88
88
|
|
89
|
-
column :NAME,
|
90
|
-
|
89
|
+
column :NAME, 'Name of the Virtual Machine', :left,
|
90
|
+
:size => 23 do |d|
|
91
91
|
if !d['vm_info'].nil?
|
92
|
-
if d['vm_info']['VM'][
|
93
|
-
"*#{d[
|
92
|
+
if d['vm_info']['VM']['RESCHED'] == '1'
|
93
|
+
"*#{d['NAME']}"
|
94
94
|
else
|
95
|
-
d['vm_info']['VM'][
|
95
|
+
d['vm_info']['VM']['NAME']
|
96
96
|
end
|
97
97
|
else
|
98
|
-
|
98
|
+
''
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
column :USER,
|
103
|
-
|
102
|
+
column :USER, 'Username of the Virtual Machine owner', :left,
|
103
|
+
:size => 8 do |d|
|
104
104
|
if !d['vm_info'].nil?
|
105
|
-
d['vm_info']['VM'][
|
105
|
+
d['vm_info']['VM']['UNAME']
|
106
106
|
else
|
107
|
-
|
107
|
+
''
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
-
column :GROUP,
|
112
|
-
|
111
|
+
column :GROUP, 'Group of the Virtual Machine', :left,
|
112
|
+
:size => 8 do |d|
|
113
113
|
if !d['vm_info'].nil?
|
114
|
-
d['vm_info']['VM'][
|
114
|
+
d['vm_info']['VM']['GNAME']
|
115
115
|
else
|
116
|
-
|
116
|
+
''
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
-
column :STAT,
|
120
|
+
column :STAT, 'Actual status', :size => 4 do |d, _|
|
121
121
|
if !d['vm_info'].nil?
|
122
|
-
OneVMHelper.state_to_str(d['vm_info']['VM'][
|
122
|
+
OneVMHelper.state_to_str(d['vm_info']['VM']['STATE'],
|
123
|
+
d['vm_info']['VM']['LCM_STATE'])
|
123
124
|
else
|
124
|
-
|
125
|
+
''
|
125
126
|
end
|
126
127
|
end
|
127
128
|
|
128
|
-
column :UCPU,
|
129
|
+
column :UCPU, 'CPU percentage used by the VM', :size => 4 do |d|
|
129
130
|
if !d['vm_info'].nil?
|
130
|
-
d['vm_info']['VM'][
|
131
|
+
d['vm_info']['VM']['CPU']
|
131
132
|
else
|
132
|
-
|
133
|
+
''
|
133
134
|
end
|
134
135
|
end
|
135
136
|
|
136
|
-
column :UMEM,
|
137
|
+
column :UMEM, 'Memory used by the VM', :size => 7 do |d|
|
137
138
|
if !d['vm_info'].nil?
|
138
|
-
OpenNebulaHelper.unit_to_str(d['vm_info']['VM'][
|
139
|
+
OpenNebulaHelper.unit_to_str(d['vm_info']['VM']['MEMORY'].to_i, {})
|
139
140
|
else
|
140
|
-
|
141
|
+
''
|
141
142
|
end
|
142
143
|
end
|
143
144
|
|
144
|
-
column :HOST,
|
145
|
+
column :HOST, 'Host where the VM is running', :left, :size => 20 do |d|
|
145
146
|
if !d['vm_info'].nil?
|
146
|
-
if d['vm_info']['VM']['HISTORY_RECORDS'] &&
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
end
|
154
|
-
|
147
|
+
if d['vm_info']['VM']['HISTORY_RECORDS'] &&
|
148
|
+
d['vm_info']['VM']['HISTORY_RECORDS']['HISTORY']
|
149
|
+
state_str =
|
150
|
+
VirtualMachine::VM_STATE[d['vm_info']['VM']['STATE'].to_i]
|
151
|
+
history = d['vm_info']['VM']['HISTORY_RECORDS']['HISTORY']
|
152
|
+
if %w[ACTIVE SUSPENDED].include? state_str
|
153
|
+
history = history.last if history.instance_of?(Array)
|
155
154
|
history['HOSTNAME']
|
156
155
|
end
|
157
156
|
end
|
158
157
|
else
|
159
|
-
|
158
|
+
''
|
160
159
|
end
|
161
160
|
end
|
162
161
|
|
163
|
-
column :TIME,
|
162
|
+
column :TIME, 'Time since the VM was submitted', :size => 10 do |d|
|
164
163
|
if !d['vm_info'].nil?
|
165
|
-
stime = d['vm_info']['VM'][
|
166
|
-
|
167
|
-
|
164
|
+
stime = d['vm_info']['VM']['STIME'].to_i
|
165
|
+
if d['vm_info']['VM']['ETIME'] == '0'
|
166
|
+
etime = Time.now.to_i
|
167
|
+
else
|
168
|
+
etime = d['vm_info']['VM']['ETIME'].to_i
|
169
|
+
end
|
170
|
+
dtime = etime - stime
|
168
171
|
OpenNebulaHelper.period_to_str(dtime, false)
|
169
172
|
else
|
170
|
-
|
173
|
+
''
|
171
174
|
end
|
172
175
|
end
|
173
176
|
|
@@ -176,19 +179,18 @@ end
|
|
176
179
|
|
177
180
|
# List the services. This method is used in top and list commands
|
178
181
|
# @param [Service::Client] client
|
179
|
-
# @param [Array] args
|
180
182
|
# @param [Hash] options
|
181
183
|
# @return [[Integer, String], Integer] Returns the exit_code and optionally
|
182
184
|
# a String to be printed
|
183
|
-
def list_services(client,
|
185
|
+
def list_services(client, options)
|
184
186
|
response = client.get(RESOURCE_PATH)
|
185
187
|
|
186
|
-
if CloudClient
|
188
|
+
if CloudClient.is_error?(response)
|
187
189
|
[response.code.to_i, response.to_s]
|
188
190
|
else
|
189
|
-
#[0,response.body]
|
191
|
+
# [0,response.body]
|
190
192
|
if options[:json]
|
191
|
-
[0,response.body]
|
193
|
+
[0, response.body]
|
192
194
|
else
|
193
195
|
array_list = JSON.parse(response.body)
|
194
196
|
SERVICE_TABLE.show(array_list['DOCUMENT_POOL']['DOCUMENT'])
|
@@ -206,73 +208,92 @@ end
|
|
206
208
|
def show_service(client, args, options)
|
207
209
|
response = client.get("#{RESOURCE_PATH}/#{args[0]}")
|
208
210
|
|
209
|
-
if CloudClient
|
211
|
+
if CloudClient.is_error?(response)
|
210
212
|
[response.code.to_i, response.to_s]
|
211
213
|
else
|
212
|
-
#[0,response.body]
|
214
|
+
# [0,response.body]
|
213
215
|
if options[:json]
|
214
|
-
[0,response.body]
|
216
|
+
[0, response.body]
|
215
217
|
else
|
216
|
-
str=
|
217
|
-
str_h1=
|
218
|
+
str = '%-20s: %-20s'
|
219
|
+
str_h1 = '%-80s'
|
218
220
|
|
219
221
|
document_hash = JSON.parse(response.body)
|
220
222
|
template = document_hash['DOCUMENT']['TEMPLATE']['BODY']
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
puts str
|
226
|
-
puts str
|
227
|
-
puts str
|
228
|
-
|
229
|
-
|
230
|
-
puts str
|
231
|
-
puts str
|
223
|
+
str_header = "SERVICE #{document_hash['DOCUMENT']['ID']} "\
|
224
|
+
'INFORMATION'
|
225
|
+
CLIHelper.print_header(str_h1 % str_header)
|
226
|
+
|
227
|
+
puts format(str, ['ID', document_hash['DOCUMENT']['ID']])
|
228
|
+
puts format(str, ['NAME', document_hash['DOCUMENT']['NAME']])
|
229
|
+
puts format(str, ['USER', document_hash['DOCUMENT']['UNAME']])
|
230
|
+
puts format(str, ['GROUP', document_hash['DOCUMENT']['GNAME']])
|
231
|
+
|
232
|
+
puts format(str, ['STRATEGY', template['deployment']])
|
233
|
+
puts format(str,
|
234
|
+
['SERVICE STATE', Service.state_str(template['state'])])
|
235
|
+
if template['shutdown_action']
|
236
|
+
puts format(str, ['SHUTDOWN', template['shutdown_action']])
|
237
|
+
end
|
232
238
|
|
233
239
|
puts
|
234
240
|
|
235
|
-
CLIHelper.print_header(str_h1 %
|
241
|
+
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
236
242
|
|
237
|
-
[
|
238
|
-
mask =
|
239
|
-
|
240
|
-
mask[
|
241
|
-
mask[
|
243
|
+
%w[OWNER GROUP OTHER].each do |e|
|
244
|
+
mask = '---'
|
245
|
+
permissions_hash = document_hash['DOCUMENT']['PERMISSIONS']
|
246
|
+
mask[0] = 'u' if permissions_hash["#{e}_U"] == '1'
|
247
|
+
mask[1] = 'm' if permissions_hash["#{e}_M"] == '1'
|
248
|
+
mask[2] = 'a' if permissions_hash["#{e}_A"] == '1'
|
242
249
|
|
243
|
-
puts str
|
244
|
-
|
250
|
+
puts format(str, [e, mask])
|
251
|
+
end
|
245
252
|
|
246
253
|
puts
|
247
254
|
|
248
|
-
template['roles'].each
|
255
|
+
template['roles'].each do |role|
|
249
256
|
CLIHelper.print_header("ROLE #{role['name']}", false)
|
250
257
|
|
251
|
-
puts str
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
puts str
|
256
|
-
puts str
|
257
|
-
|
258
|
-
|
258
|
+
puts format(str, ['ROLE STATE', Role.state_str(role['state'])])
|
259
|
+
if role['parents']
|
260
|
+
puts format(str, ['PARENTS', role['parents'].join(', ')])
|
261
|
+
end
|
262
|
+
puts format(str, ['VM TEMPLATE', role['vm_template']])
|
263
|
+
puts format(str, ['CARDINALITY', role['cardinality']])
|
264
|
+
if role['min_vms']
|
265
|
+
puts format(str, ['MIN VMS', role['min_vms']])
|
266
|
+
end
|
267
|
+
if role['max_vms']
|
268
|
+
puts format(str, ['MAX VMS', role['max_vms']])
|
269
|
+
end
|
270
|
+
if role['coolddown']
|
271
|
+
puts format(str, ['COOLDOWN', "#{role['cooldown']}s"])
|
272
|
+
end
|
273
|
+
if role['shutdown_action']
|
274
|
+
puts format(str, ['SHUTDOWN', role['shutdown_action']])
|
275
|
+
end
|
259
276
|
|
260
|
-
puts
|
277
|
+
puts 'NODES INFORMATION'
|
261
278
|
NODE_TABLE.show(role['nodes'])
|
262
279
|
|
263
|
-
if !role['elasticity_policies'].nil? &&
|
280
|
+
if !role['elasticity_policies'].nil? &&
|
281
|
+
!role['elasticity_policies'].empty? ||
|
282
|
+
!role['scheduled_policies'].nil? &&
|
283
|
+
!role['scheduled_policies'].emtpty?
|
264
284
|
puts
|
265
|
-
puts
|
285
|
+
puts 'ELASTICITY RULES'
|
266
286
|
|
267
|
-
if role['elasticity_policies'] &&
|
287
|
+
if role['elasticity_policies'] &&
|
288
|
+
!role['elasticity_policies'].emtpty?
|
268
289
|
puts
|
269
|
-
# puts
|
290
|
+
# puts 'ELASTICITY POLICIES'
|
270
291
|
CLIHelper::ShowTable.new(nil, self) do
|
271
|
-
column :ADJUST,
|
292
|
+
column :ADJUST, '', :left, :size => 12 do |d|
|
272
293
|
adjust_str(d)
|
273
294
|
end
|
274
295
|
|
275
|
-
column :EXPRESSION,
|
296
|
+
column :EXPRESSION, '', :left, :size => 48 do |d|
|
276
297
|
if !d['expression_evaluated'].nil?
|
277
298
|
d['expression_evaluated']
|
278
299
|
else
|
@@ -280,19 +301,20 @@ def show_service(client, args, options)
|
|
280
301
|
end
|
281
302
|
end
|
282
303
|
|
283
|
-
column :
|
304
|
+
column :EVALS, '', :right, :size => 5 do |d|
|
284
305
|
if d['period_number']
|
285
|
-
"#{d['true_evals'].to_i}
|
306
|
+
"#{d['true_evals'].to_i}/"\
|
307
|
+
"#{d['period_number']}"
|
286
308
|
else
|
287
|
-
|
309
|
+
'-'
|
288
310
|
end
|
289
311
|
end
|
290
312
|
|
291
|
-
column :PERIOD,
|
292
|
-
d['period'] ?
|
313
|
+
column :PERIOD, '', :size => 6 do |d|
|
314
|
+
d['period'] ? "#{d['period']}s" : '-'
|
293
315
|
end
|
294
316
|
|
295
|
-
column :COOL,
|
317
|
+
column :COOL, '', :size => 5 do |d|
|
296
318
|
d['cooldown'] ? "#{d['cooldown']}s" : '-'
|
297
319
|
end
|
298
320
|
|
@@ -300,15 +322,16 @@ def show_service(client, args, options)
|
|
300
322
|
end.show([role['elasticity_policies']].flatten, {})
|
301
323
|
end
|
302
324
|
|
303
|
-
if role['scheduled_policies'] &&
|
325
|
+
if role['scheduled_policies'] &&
|
326
|
+
!role['scheduled_policies'].empty?
|
304
327
|
puts
|
305
|
-
# puts
|
328
|
+
# puts 'SCHEDULED POLICIES'
|
306
329
|
CLIHelper::ShowTable.new(nil, self) do
|
307
|
-
column :ADJUST,
|
330
|
+
column :ADJUST, '', :left, :size => 12 do |d|
|
308
331
|
adjust_str(d)
|
309
332
|
end
|
310
333
|
|
311
|
-
column :TIME,
|
334
|
+
column :TIME, '', :left, :size => 67 do |d|
|
312
335
|
if d['start_time']
|
313
336
|
Time.parse(d['start_time']).to_s
|
314
337
|
else
|
@@ -322,17 +345,17 @@ def show_service(client, args, options)
|
|
322
345
|
end
|
323
346
|
|
324
347
|
puts
|
325
|
-
|
348
|
+
end
|
326
349
|
|
327
350
|
puts
|
328
351
|
|
329
|
-
CLIHelper.print_header(str_h1 %
|
352
|
+
CLIHelper.print_header(str_h1 % 'LOG MESSAGES', false)
|
330
353
|
|
331
354
|
if template['log']
|
332
|
-
template['log'].each
|
333
|
-
t = Time.at(log['timestamp']).strftime(
|
355
|
+
template['log'].each do |log|
|
356
|
+
t = Time.at(log['timestamp']).strftime('%m/%d/%y %H:%M')
|
334
357
|
puts "#{t} [#{log['severity']}] #{log['message']}"
|
335
|
-
|
358
|
+
end
|
336
359
|
end
|
337
360
|
|
338
361
|
0
|
@@ -341,7 +364,7 @@ def show_service(client, args, options)
|
|
341
364
|
end
|
342
365
|
|
343
366
|
def adjust_str(policy)
|
344
|
-
|
367
|
+
policy['adjust'].to_i >= 0 ? sign = '+' : sign = '-'
|
345
368
|
adjust = policy['adjust'].to_i.abs
|
346
369
|
|
347
370
|
case policy['type']
|
@@ -363,8 +386,8 @@ end
|
|
363
386
|
# Commands
|
364
387
|
#
|
365
388
|
|
366
|
-
|
367
|
-
usage
|
389
|
+
CommandParser::CmdParser.new(ARGV) do
|
390
|
+
usage '`oneflow` <command> [<args>] [<options>]'
|
368
391
|
version OpenNebulaHelper::ONE_VERSION
|
369
392
|
|
370
393
|
set :option, Service::DEFAULT_OPTIONS
|
@@ -374,27 +397,29 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
374
397
|
#
|
375
398
|
# Formatters for arguments
|
376
399
|
#
|
377
|
-
set :format, :groupid, OpenNebulaHelper.rname_to_id_desc(
|
378
|
-
OpenNebulaHelper.rname_to_id(arg,
|
400
|
+
set :format, :groupid, OpenNebulaHelper.rname_to_id_desc('GROUP') do |arg|
|
401
|
+
OpenNebulaHelper.rname_to_id(arg, 'GROUP')
|
379
402
|
end
|
380
403
|
|
381
|
-
set :format, :userid, OpenNebulaHelper.rname_to_id_desc(
|
382
|
-
OpenNebulaHelper.rname_to_id(arg,
|
404
|
+
set :format, :userid, OpenNebulaHelper.rname_to_id_desc('USER') do |arg|
|
405
|
+
OpenNebulaHelper.rname_to_id(arg, 'USER')
|
383
406
|
end
|
384
407
|
|
385
|
-
set :format, :service_id, Service.rname_to_id_desc(
|
386
|
-
Service.rname_to_id(arg,
|
408
|
+
set :format, :service_id, Service.rname_to_id_desc('SERVICE') do |arg|
|
409
|
+
Service.rname_to_id(arg, 'SERVICE')
|
387
410
|
end
|
388
411
|
|
389
|
-
set :format, :service_id_list, Service.list_to_id_desc(
|
390
|
-
Service.list_to_id(arg,
|
412
|
+
set :format, :service_id_list, Service.list_to_id_desc('SERVICE') do |arg|
|
413
|
+
Service.list_to_id(arg, 'SERVICE')
|
391
414
|
end
|
392
415
|
|
393
|
-
set :format, :vm_action,
|
416
|
+
set :format, :vm_action,
|
417
|
+
'Actions supported: #{Role::SCHEDULE_ACTIONS.join(', ')}' do |arg|
|
394
418
|
if Role::SCHEDULE_ACTIONS.include?(arg)
|
395
419
|
[0, arg]
|
396
420
|
else
|
397
|
-
[-1, "Action #{arg} is not supported. Actions supported:
|
421
|
+
[-1, "Action #{arg} is not supported. Actions supported: "\
|
422
|
+
"#{Role::SCHEDULE_ACTIONS.join(', ')}"]
|
398
423
|
end
|
399
424
|
end
|
400
425
|
|
@@ -408,12 +433,13 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
408
433
|
|
409
434
|
command :list, list_desc, :options => Service::JSON_FORMAT do
|
410
435
|
client = Service::Client.new(
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
436
|
+
:username => options[:username],
|
437
|
+
:password => options[:password],
|
438
|
+
:url => options[:server],
|
439
|
+
:user_agent => USER_AGENT
|
440
|
+
)
|
415
441
|
|
416
|
-
list_services(client,
|
442
|
+
list_services(client, options)
|
417
443
|
end
|
418
444
|
|
419
445
|
#
|
@@ -426,10 +452,11 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
426
452
|
|
427
453
|
command :show, show_desc, :service_id, :options => Service::JSON_FORMAT do
|
428
454
|
client = Service::Client.new(
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
455
|
+
:username => options[:username],
|
456
|
+
:password => options[:password],
|
457
|
+
:url => options[:server],
|
458
|
+
:user_agent => USER_AGENT
|
459
|
+
)
|
433
460
|
|
434
461
|
show_service(client, args, options)
|
435
462
|
end
|
@@ -444,37 +471,34 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
444
471
|
EOT
|
445
472
|
|
446
473
|
command :top, top_desc, [:service_id, nil],
|
447
|
-
:options => [Service::JSON_FORMAT,
|
474
|
+
:options => [Service::JSON_FORMAT,
|
475
|
+
Service::TOP,
|
476
|
+
CLIHelper::DELAY] do
|
448
477
|
client = Service::Client.new(
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
478
|
+
:username => options[:username],
|
479
|
+
:password => options[:password],
|
480
|
+
:url => options[:server],
|
481
|
+
:user_agent => USER_AGENT
|
482
|
+
)
|
453
483
|
|
454
|
-
|
484
|
+
options[:delay] ? delay = options[:delay] : delay = 3
|
455
485
|
|
456
486
|
begin
|
457
|
-
|
487
|
+
loop do
|
458
488
|
CLIHelper.scr_cls
|
459
|
-
CLIHelper.scr_move(0,0)
|
489
|
+
CLIHelper.scr_move(0, 0)
|
460
490
|
|
461
491
|
if args[0]
|
462
492
|
rc, message = show_service(client, args, options)
|
463
|
-
|
464
|
-
if rc != 0
|
465
|
-
raise message
|
466
|
-
end
|
467
493
|
else
|
468
|
-
rc, message = list_services(client,
|
469
|
-
|
470
|
-
if rc != 0
|
471
|
-
raise message
|
472
|
-
end
|
494
|
+
rc, message = list_services(client, options)
|
473
495
|
end
|
474
496
|
|
497
|
+
raise message if rc
|
498
|
+
|
475
499
|
sleep delay
|
476
500
|
end
|
477
|
-
rescue
|
501
|
+
rescue StandardError => e
|
478
502
|
puts e.message
|
479
503
|
-1
|
480
504
|
end
|
@@ -490,14 +514,15 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
490
514
|
|
491
515
|
command :delete, delete_desc, [:range, :service_id_list] do
|
492
516
|
client = Service::Client.new(
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
517
|
+
:username => options[:username],
|
518
|
+
:password => options[:password],
|
519
|
+
:url => options[:server],
|
520
|
+
:user_agent => USER_AGENT
|
521
|
+
)
|
497
522
|
|
498
|
-
Service.perform_actions(args[0])
|
523
|
+
Service.perform_actions(args[0]) do |service_id|
|
499
524
|
client.delete("#{RESOURCE_PATH}/#{service_id}")
|
500
|
-
|
525
|
+
end
|
501
526
|
end
|
502
527
|
|
503
528
|
#
|
@@ -511,16 +536,17 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
511
536
|
|
512
537
|
command :shutdown, shutdown_desc, [:range, :service_id_list] do
|
513
538
|
client = Service::Client.new(
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
539
|
+
:username => options[:username],
|
540
|
+
:password => options[:password],
|
541
|
+
:url => options[:server],
|
542
|
+
:user_agent => USER_AGENT
|
543
|
+
)
|
518
544
|
|
519
|
-
Service.perform_actions(args[0])
|
545
|
+
Service.perform_actions(args[0]) do |service_id|
|
520
546
|
json_action = Service.build_json_action('shutdown')
|
521
547
|
|
522
548
|
client.post("#{RESOURCE_PATH}/#{service_id}/action", json_action)
|
523
|
-
|
549
|
+
end
|
524
550
|
end
|
525
551
|
|
526
552
|
#
|
@@ -538,16 +564,17 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
538
564
|
|
539
565
|
command :recover, recover_desc, [:range, :service_id_list] do
|
540
566
|
client = Service::Client.new(
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
567
|
+
:username => options[:username],
|
568
|
+
:password => options[:password],
|
569
|
+
:url => options[:server],
|
570
|
+
:user_agent => USER_AGENT
|
571
|
+
)
|
545
572
|
|
546
|
-
Service.perform_actions(args[0])
|
573
|
+
Service.perform_actions(args[0]) do |service_id|
|
547
574
|
json_action = Service.build_json_action('recover')
|
548
575
|
|
549
576
|
client.post("#{RESOURCE_PATH}/#{service_id}/action", json_action)
|
550
|
-
|
577
|
+
end
|
551
578
|
end
|
552
579
|
|
553
580
|
#
|
@@ -558,27 +585,29 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
558
585
|
Scale a role to the given cardinality
|
559
586
|
EOT
|
560
587
|
|
561
|
-
command :
|
562
|
-
|
588
|
+
command :scale, scale_desc, :service_id, :role_name,
|
589
|
+
:cardinality, :options => [Service::FORCE] do
|
563
590
|
client = Service::Client.new(
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
591
|
+
:username => options[:username],
|
592
|
+
:password => options[:password],
|
593
|
+
:url => options[:server],
|
594
|
+
:user_agent => USER_AGENT
|
595
|
+
)
|
596
|
+
|
597
|
+
if args[2] !~ /^\d+$/
|
598
|
+
puts 'Cardinality must be an integer number'
|
599
|
+
exit(-1)
|
572
600
|
end
|
573
601
|
|
574
602
|
exit_code = 0
|
575
603
|
|
576
|
-
json = "{ \"cardinality\" : #{args[2]},\n"
|
604
|
+
json = "{ \"cardinality\" : #{args[2]},\n" \
|
577
605
|
" \"force\" : #{options[:force] == true} }"
|
578
606
|
|
579
|
-
response = client
|
607
|
+
response = client
|
608
|
+
.put("#{RESOURCE_PATH}/#{args[0]}/role/#{args[1]}", json)
|
580
609
|
|
581
|
-
if CloudClient
|
610
|
+
if CloudClient.is_error?(response)
|
582
611
|
puts response.to_s
|
583
612
|
exit_code = response.code.to_i
|
584
613
|
end
|
@@ -592,41 +621,44 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
592
621
|
|
593
622
|
command :chgrp, chgrp_desc, [:range, :service_id_list], :groupid do
|
594
623
|
client = Service::Client.new(
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
624
|
+
:username => options[:username],
|
625
|
+
:password => options[:password],
|
626
|
+
:url => options[:server],
|
627
|
+
:user_agent => USER_AGENT
|
628
|
+
)
|
629
|
+
|
630
|
+
Service.perform_actions(args[0]) do |service_id|
|
631
|
+
params = {}
|
602
632
|
params['group_id'] = args[1].to_i
|
603
633
|
|
604
634
|
json_action = Service.build_json_action('chgrp', params)
|
605
635
|
|
606
636
|
client.post("#{RESOURCE_PATH}/#{service_id}/action", json_action)
|
607
|
-
|
637
|
+
end
|
608
638
|
end
|
609
639
|
|
610
640
|
chown_desc = <<-EOT.unindent
|
611
641
|
Changes the service owner and group
|
612
642
|
EOT
|
613
643
|
|
614
|
-
command :chown, chown_desc,
|
644
|
+
command :chown, chown_desc,
|
645
|
+
[:range, :service_id_list], :userid, [:groupid, nil] do
|
615
646
|
client = Service::Client.new(
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
647
|
+
:username => options[:username],
|
648
|
+
:password => options[:password],
|
649
|
+
:url => options[:server],
|
650
|
+
:user_agent => USER_AGENT
|
651
|
+
)
|
652
|
+
|
653
|
+
Service.perform_actions(args[0]) do |service_id|
|
654
|
+
params = {}
|
623
655
|
params['owner_id'] = args[1]
|
624
656
|
params['group_id'] = args[2] if args[2]
|
625
657
|
|
626
658
|
json_action = Service.build_json_action('chown', params)
|
627
659
|
|
628
660
|
client.post("#{RESOURCE_PATH}/#{service_id}/action", json_action)
|
629
|
-
|
661
|
+
end
|
630
662
|
end
|
631
663
|
|
632
664
|
chmod_desc = <<-EOT.unindent
|
@@ -635,40 +667,43 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
635
667
|
|
636
668
|
command :chmod, chmod_desc, [:range, :service_id_list], :octet do
|
637
669
|
client = Service::Client.new(
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
670
|
+
:username => options[:username],
|
671
|
+
:password => options[:password],
|
672
|
+
:url => options[:server],
|
673
|
+
:user_agent => USER_AGENT
|
674
|
+
)
|
675
|
+
|
676
|
+
Service.perform_actions(args[0]) do |service_id|
|
677
|
+
params = {}
|
645
678
|
params['octet'] = args[1]
|
646
679
|
|
647
680
|
json_action = Service.build_json_action('chmod', params)
|
648
681
|
|
649
682
|
client.post("#{RESOURCE_PATH}/#{service_id}/action", json_action)
|
650
|
-
|
683
|
+
end
|
651
684
|
end
|
652
685
|
|
653
686
|
rename_desc = <<-EOT.unindent
|
654
|
-
Renames the Service
|
687
|
+
Renames the Service
|
655
688
|
EOT
|
656
689
|
|
657
690
|
command :rename, rename_desc, :service_id, :name do
|
658
691
|
client = Service::Client.new(
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
692
|
+
:username => options[:username],
|
693
|
+
:password => options[:password],
|
694
|
+
:url => options[:server],
|
695
|
+
:user_agent => USER_AGENT
|
696
|
+
)
|
663
697
|
|
664
|
-
params =
|
698
|
+
params = {}
|
665
699
|
params['name'] = args[1]
|
666
700
|
|
667
701
|
json_action = Service.build_json_action('rename', params)
|
668
702
|
|
669
|
-
response = client
|
703
|
+
response = client
|
704
|
+
.post("#{RESOURCE_PATH}/#{args[0]}/action", json_action)
|
670
705
|
|
671
|
-
if CloudClient
|
706
|
+
if CloudClient.is_error?(response)
|
672
707
|
[response.code.to_i, response.to_s]
|
673
708
|
else
|
674
709
|
response.code.to_i
|
@@ -677,26 +712,28 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
677
712
|
|
678
713
|
action_desc = <<-EOT.unindent
|
679
714
|
Perform an action on all the Virtual Machines of a given role.
|
680
|
-
Actions supported: #{Role::SCHEDULE_ACTIONS.join(
|
715
|
+
Actions supported: #{Role::SCHEDULE_ACTIONS.join(',')}
|
681
716
|
EOT
|
682
717
|
|
683
|
-
command :
|
684
|
-
|
718
|
+
command :action, action_desc, :service_id, :role_name, :vm_action,
|
719
|
+
:options => [Service::PERIOD, Service::NUMBER] do
|
685
720
|
|
686
721
|
client = Service::Client.new(
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
722
|
+
:username => options[:username],
|
723
|
+
:password => options[:password],
|
724
|
+
:url => options[:server],
|
725
|
+
:user_agent => USER_AGENT
|
726
|
+
)
|
727
|
+
|
728
|
+
Service.perform_actions([args[0]]) do |service_id|
|
729
|
+
params = {}
|
694
730
|
params[:period] = options[:period].to_i if options[:period]
|
695
731
|
params[:number] = options[:number].to_i if options[:number]
|
696
732
|
|
697
733
|
json_action = Service.build_json_action(args[2], params)
|
698
734
|
|
699
|
-
client.post("#{RESOURCE_PATH}/#{service_id}/role/#{args[1]}/action",
|
700
|
-
|
735
|
+
client.post("#{RESOURCE_PATH}/#{service_id}/role/#{args[1]}/action",
|
736
|
+
json_action)
|
737
|
+
end
|
701
738
|
end
|
702
739
|
end
|