opennebula-cli 5.6.2 → 5.7.80.pre
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/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
|