opennebula-cli 5.10.2 → 5.10.3
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/onehook +8 -4
- data/bin/onetemplate +6 -2
- data/lib/cli_helper.rb +1 -1
- data/lib/one_helper.rb +15 -0
- data/lib/one_helper/oneimage_helper.rb +199 -187
- data/lib/one_helper/onetemplate_helper.rb +11 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db84680874bbde511e8ffc04129cf914bf23e04b
|
4
|
+
data.tar.gz: ba353a408b6ac968cf13fe5e3cd062d08bb5ed91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1709c9dbc7100d21beb1c0ca96f1c8281bdda6758a727f30cbe98b49ffbdafd7ccc659d3bf8db2e46abb70ec9007225478170c7d94c07c454a2e061cfec42975
|
7
|
+
data.tar.gz: 0a1bf968f039c46a6a6b032ef9888caf86c88946361650e2c109bc9ed8006cb62f3056556e10b4fedb9f6d4cd1c3c53b98c74e3b4cf4666e09d254766f69ef71
|
data/bin/onehook
CHANGED
@@ -79,8 +79,12 @@ CommandParser::CmdParser.new(ARGV) do
|
|
79
79
|
:description => 'execution ID'
|
80
80
|
}
|
81
81
|
|
82
|
-
set :format, :hookid,
|
83
|
-
|
82
|
+
set :format, :hookid, OneHookHelper.to_id_desc do |arg|
|
83
|
+
helper.to_id(arg)
|
84
|
+
end
|
85
|
+
|
86
|
+
set :format, :hookid_list, OneHookHelper.list_to_id_desc do |arg|
|
87
|
+
helper.list_to_id(arg)
|
84
88
|
end
|
85
89
|
|
86
90
|
########################################################################
|
@@ -172,8 +176,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
172
176
|
EOT
|
173
177
|
|
174
178
|
command :delete, delete_desc, [:range, :hookid_list] do
|
175
|
-
helper.perform_actions(args[0], options, 'deleted') do |
|
176
|
-
|
179
|
+
helper.perform_actions(args[0], options, 'deleted') do |hook|
|
180
|
+
hook.delete
|
177
181
|
end
|
178
182
|
end
|
179
183
|
|
data/bin/onetemplate
CHANGED
@@ -224,8 +224,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
224
224
|
next -1
|
225
225
|
end
|
226
226
|
|
227
|
-
number
|
228
|
-
user_inputs =
|
227
|
+
number = options[:multiple] || 1
|
228
|
+
user_inputs = options[:user_inputs]
|
229
229
|
|
230
230
|
number.times do |i|
|
231
231
|
exit_code = helper.perform_action(args[0], options,
|
@@ -258,6 +258,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
258
258
|
|
259
259
|
if !user_inputs
|
260
260
|
user_inputs = OneTemplateHelper.get_user_inputs(t.to_hash)
|
261
|
+
else
|
262
|
+
optionals = OneTemplateHelper.get_user_inputs(t.to_hash,
|
263
|
+
true)
|
264
|
+
user_inputs = user_inputs + "\n" + optionals
|
261
265
|
end
|
262
266
|
|
263
267
|
extra_template << "\n#{user_inputs}"
|
data/lib/cli_helper.rb
CHANGED
@@ -633,7 +633,7 @@ module CLIHelper
|
|
633
633
|
def expand_columns(expand_columns, all = false)
|
634
634
|
return if expand_columns.empty?
|
635
635
|
|
636
|
-
if $stdout.tty?
|
636
|
+
if $stdout.tty? || (IO.console && IO.console.tty?)
|
637
637
|
terminal_size = IO.console.winsize[1]
|
638
638
|
else
|
639
639
|
terminal_size = nil
|
data/lib/one_helper.rb
CHANGED
@@ -381,6 +381,21 @@ EOT
|
|
381
381
|
:description => "In a vCenter environment sets the the VMs and Template folder where the VM will be placed in." \
|
382
382
|
" The path uses slashes to separate folders. For example: --vcenter_vm_folder \"/Management/VMs\""
|
383
383
|
},
|
384
|
+
{
|
385
|
+
:name => 'user_inputs',
|
386
|
+
:large => '--user-inputs ui1,ui2,ui3',
|
387
|
+
:format => Array,
|
388
|
+
:description => 'Specify the user inputs values when instantiating',
|
389
|
+
:proc => lambda do |o, options|
|
390
|
+
# escape values
|
391
|
+
options[:user_inputs].map! do |user_input|
|
392
|
+
user_input_split = user_input.split('=')
|
393
|
+
"#{user_input_split[0]}=\"#{user_input_split[1]}\""
|
394
|
+
end
|
395
|
+
|
396
|
+
options[:user_inputs] = o.join("\n")
|
397
|
+
end
|
398
|
+
},
|
384
399
|
AS_GROUP,
|
385
400
|
AS_USER
|
386
401
|
]
|
@@ -17,139 +17,140 @@
|
|
17
17
|
require 'one_helper'
|
18
18
|
require 'one_helper/onevm_helper'
|
19
19
|
|
20
|
+
# CLI helper for oneimage command
|
20
21
|
class OneImageHelper < OpenNebulaHelper::OneHelper
|
22
|
+
|
21
23
|
TEMPLATE_OPTIONS=[
|
22
24
|
{
|
23
|
-
:name =>
|
24
|
-
:large =>
|
25
|
+
:name => 'name',
|
26
|
+
:large => '--name name',
|
25
27
|
:format => String,
|
26
|
-
:description =>
|
28
|
+
:description => 'Name of the new image'
|
27
29
|
},
|
28
30
|
{
|
29
|
-
:name =>
|
30
|
-
:large =>
|
31
|
+
:name => 'description',
|
32
|
+
:large => '--description description',
|
31
33
|
:format => String,
|
32
|
-
:description =>
|
34
|
+
:description => 'Description for the new Image'
|
33
35
|
},
|
34
36
|
{
|
35
|
-
:name =>
|
36
|
-
:large =>
|
37
|
+
:name => 'type',
|
38
|
+
:large => '--type type',
|
37
39
|
:format => String,
|
38
|
-
:description => "Type of the new Image:
|
39
|
-
|
40
|
+
:description => "Type of the new Image: \
|
41
|
+
#{Image::IMAGE_TYPES.join(', ')}",
|
42
|
+
|
43
|
+
:proc => lambda do |o, _options|
|
40
44
|
type=o.strip.upcase
|
41
45
|
|
42
46
|
if Image::IMAGE_TYPES.include? type
|
43
47
|
[0, type]
|
44
48
|
else
|
45
|
-
[-1, "Type should be: #{Image::IMAGE_TYPES.join(
|
49
|
+
[-1, "Type should be: #{Image::IMAGE_TYPES.join(', ')}"]
|
46
50
|
end
|
47
51
|
end
|
48
52
|
},
|
49
53
|
{
|
50
|
-
:name =>
|
51
|
-
:large =>
|
52
|
-
:description =>
|
54
|
+
:name => 'persistent',
|
55
|
+
:large => '--persistent',
|
56
|
+
:description => 'Tells if the image will be persistent'
|
53
57
|
},
|
54
58
|
{
|
55
|
-
:name =>
|
56
|
-
:large =>
|
59
|
+
:name => 'prefix',
|
60
|
+
:large => '--prefix prefix',
|
57
61
|
:description => "Device prefix for the disk (eg. hd, sd, xvd\n"<<
|
58
|
-
|
62
|
+
' '*31<<'or vd)',
|
59
63
|
:format => String,
|
60
|
-
:proc => lambda do |o,
|
64
|
+
:proc => lambda do |o, _options|
|
61
65
|
prefix=o.strip.downcase
|
62
|
-
if %w
|
66
|
+
if %w[hd sd xvd vd].include? prefix
|
63
67
|
[0, prefix]
|
64
68
|
else
|
65
|
-
[-1,
|
69
|
+
[-1, 'The prefix must be hd, sd, xvd or vd']
|
66
70
|
end
|
67
71
|
end
|
68
72
|
},
|
69
73
|
{
|
70
|
-
:name =>
|
71
|
-
:large =>
|
72
|
-
:description =>
|
74
|
+
:name => 'target',
|
75
|
+
:large => '--target target',
|
76
|
+
:description => 'Device the disk will be attached to',
|
73
77
|
:format => String
|
74
78
|
},
|
75
79
|
{
|
76
|
-
:name =>
|
77
|
-
:large =>
|
78
|
-
:description =>
|
80
|
+
:name => 'path',
|
81
|
+
:large => '--path path',
|
82
|
+
:description => 'Path of the image file',
|
79
83
|
:format => String,
|
80
|
-
:proc => lambda do |o,
|
81
|
-
if o.match(
|
82
|
-
|
83
|
-
|
84
|
+
:proc => lambda do |o, _options|
|
85
|
+
next [0, o] if o.match(%r{^https?://})
|
86
|
+
|
87
|
+
if o[0, 1]=='/'
|
84
88
|
path=o
|
85
89
|
else
|
86
|
-
path=Dir.pwd+
|
90
|
+
path=Dir.pwd+'/'+o
|
87
91
|
end
|
88
92
|
|
89
|
-
|
90
|
-
[0, path]
|
91
|
-
else
|
92
|
-
[-1, "File '#{path}' does not exist or is not readable."]
|
93
|
-
end
|
93
|
+
[0, path]
|
94
94
|
end
|
95
95
|
},
|
96
96
|
{
|
97
|
-
:name =>
|
98
|
-
:large =>
|
99
|
-
:description =>
|
97
|
+
:name => 'driver',
|
98
|
+
:large => '--driver driver',
|
99
|
+
:description => 'Driver to use image (raw, qcow2, tap:aio:...)',
|
100
100
|
:format => String
|
101
101
|
},
|
102
102
|
{
|
103
|
-
:name =>
|
104
|
-
:large =>
|
103
|
+
:name => 'disk_type',
|
104
|
+
:large => '--disk_type disk_type',
|
105
105
|
:description => "Type of the image \n"<<
|
106
|
-
|
107
|
-
|
106
|
+
' ' * 31 << "BLOCK, CDROM, RBD or FILE \n" \
|
107
|
+
'(for others, check the documentation) ',
|
108
108
|
:format => String
|
109
109
|
},
|
110
110
|
{
|
111
|
-
:name =>
|
112
|
-
:large =>
|
111
|
+
:name => 'vcenter_disk_type',
|
112
|
+
:large => '--vcenter_disk_type vcenter_disk_type',
|
113
113
|
:description => "The vCenter Disk Type of the image \n"<<
|
114
|
-
|
115
|
-
|
116
|
-
|
114
|
+
' ' * 31 <<
|
115
|
+
'for vCenter: THIN, THICK, ZEROEDTHICK ' \
|
116
|
+
'(for others, check the documentation) ',
|
117
117
|
:format => String
|
118
118
|
},
|
119
119
|
{
|
120
|
-
:name =>
|
121
|
-
:large =>
|
122
|
-
:description =>
|
123
|
-
|
124
|
-
|
120
|
+
:name => 'vcenter_adapter_type',
|
121
|
+
:large => '--vcenter_adapter_type vcenter_adapter_type',
|
122
|
+
:description => 'Controller that will handle this image in ' \
|
123
|
+
'vCenter (lsiLogic, ide, busLogic). For other '\
|
124
|
+
'values check the documentation',
|
125
125
|
:format => String
|
126
126
|
},
|
127
127
|
{
|
128
|
-
:name =>
|
129
|
-
:large =>
|
128
|
+
:name => 'source',
|
129
|
+
:large => '--source source',
|
130
130
|
:description =>
|
131
131
|
"Source to be used. Useful for not file-based\n"<<
|
132
|
-
|
132
|
+
' '*31<<'images',
|
133
133
|
:format => String
|
134
134
|
},
|
135
135
|
{
|
136
|
-
:name =>
|
137
|
-
:large =>
|
138
|
-
:description => "Size in MB.
|
139
|
-
|
140
|
-
:proc => lambda do |o, options|
|
136
|
+
:name => 'size',
|
137
|
+
:large => '--size size',
|
138
|
+
:description => "Size in MB. \
|
139
|
+
Used for DATABLOCK type or SOURCE based images.",
|
141
140
|
|
141
|
+
:format => String,
|
142
|
+
:proc => lambda do |o, _options|
|
142
143
|
m=o.strip.match(/^(\d+(?:\.\d+)?)(m|mb|g|gb)?$/i)
|
143
144
|
|
144
145
|
if !m
|
145
146
|
[-1, 'Size value malformed']
|
146
147
|
else
|
147
148
|
multiplier=case m[2]
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
149
|
+
when /(g|gb)/i
|
150
|
+
1024
|
151
|
+
else
|
152
|
+
1
|
153
|
+
end
|
153
154
|
|
154
155
|
value=m[1].to_f*multiplier
|
155
156
|
|
@@ -161,89 +162,89 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
161
162
|
]
|
162
163
|
|
163
164
|
IMAGE = {
|
164
|
-
:name =>
|
165
|
-
:large =>
|
165
|
+
:name => 'no_check_capacity',
|
166
|
+
:large => '--no_check_capacity',
|
166
167
|
:description =>
|
167
|
-
|
168
|
+
'Check Datastore capacity. By Default YES',
|
168
169
|
:format => String
|
169
170
|
}
|
170
171
|
|
171
172
|
def self.rname
|
172
|
-
|
173
|
+
'IMAGE'
|
173
174
|
end
|
174
175
|
|
175
176
|
def self.conf_file
|
176
|
-
|
177
|
+
'oneimage.yaml'
|
177
178
|
end
|
178
179
|
|
179
180
|
def self.state_to_str(id)
|
180
181
|
id = id.to_i
|
181
182
|
state_str = Image::IMAGE_STATES[id]
|
182
|
-
|
183
|
+
Image::SHORT_IMAGE_STATES[state_str]
|
183
184
|
end
|
184
185
|
|
185
186
|
def self.type_to_str(id)
|
186
187
|
id = id.to_i
|
187
188
|
type_str = Image::IMAGE_TYPES[id]
|
188
|
-
|
189
|
+
Image::SHORT_IMAGE_TYPES[type_str]
|
189
190
|
end
|
190
191
|
|
191
192
|
def format_pool(options)
|
192
193
|
config_file = self.class.table_conf
|
193
194
|
|
194
195
|
table = CLIHelper::ShowTable.new(config_file, self) do
|
195
|
-
column :ID,
|
196
|
-
d[
|
196
|
+
column :ID, 'ONE identifier for the Image', :size=>4 do |d|
|
197
|
+
d['ID']
|
197
198
|
end
|
198
199
|
|
199
|
-
column :USER,
|
200
|
-
|
200
|
+
column :USER, 'Username of the Image owner', :left,
|
201
|
+
:size=>10 do |d|
|
201
202
|
helper.user_name(d, options)
|
202
203
|
end
|
203
204
|
|
204
|
-
column :GROUP,
|
205
|
-
|
205
|
+
column :GROUP, 'Group of the Image', :left,
|
206
|
+
:size=>10 do |d|
|
206
207
|
helper.group_name(d, options)
|
207
208
|
end
|
208
209
|
|
209
|
-
column :NAME,
|
210
|
-
d[
|
210
|
+
column :NAME, 'Name of the Image', :left, :size=>15 do |d|
|
211
|
+
d['NAME']
|
211
212
|
end
|
212
213
|
|
213
|
-
column :DATASTORE,
|
214
|
-
d[
|
214
|
+
column :DATASTORE, 'Name of the Datastore', :left, :size=>10 do |d|
|
215
|
+
d['DATASTORE']
|
215
216
|
end
|
216
217
|
|
217
|
-
column :TYPE,
|
218
|
-
OneImageHelper.type_to_str(d[
|
218
|
+
column :TYPE, 'Type of the Image', :left, :size=>4 do |d, _e|
|
219
|
+
OneImageHelper.type_to_str(d['TYPE'])
|
219
220
|
end
|
220
221
|
|
221
|
-
column :REGTIME,
|
222
|
-
|
223
|
-
OpenNebulaHelper.time_to_str(d[
|
222
|
+
column :REGTIME, 'Registration time of the Image',
|
223
|
+
:size=>15 do |d|
|
224
|
+
OpenNebulaHelper.time_to_str(d['REGTIME'])
|
224
225
|
end
|
225
226
|
|
226
|
-
column :PERSISTENT,
|
227
|
-
|
228
|
-
OpenNebulaHelper.boolean_to_str(d[
|
227
|
+
column :PERSISTENT, 'Whether the Image is persistent or not',
|
228
|
+
:size=>3 do |d|
|
229
|
+
OpenNebulaHelper.boolean_to_str(d['PERSISTENT'])
|
229
230
|
end
|
230
231
|
|
231
|
-
column :STAT,
|
232
|
-
OneImageHelper.state_to_str(d[
|
232
|
+
column :STAT, 'State of the Image', :left, :size=>4 do |d|
|
233
|
+
OneImageHelper.state_to_str(d['STATE'])
|
233
234
|
end
|
234
235
|
|
235
|
-
column :RVMS,
|
236
|
-
|
236
|
+
column :RVMS, 'Number of VMs currently running from this Image',
|
237
|
+
:size=>4 do |d|
|
237
238
|
d['RUNNING_VMS']
|
238
239
|
end
|
239
240
|
|
240
|
-
column :SIZE,
|
241
|
-
|
242
|
-
OpenNebulaHelper.unit_to_str(d['SIZE'].to_i,options,
|
241
|
+
column :SIZE, 'Size of the image',
|
242
|
+
:size=>7 do |d|
|
243
|
+
OpenNebulaHelper.unit_to_str(d['SIZE'].to_i, options, 'M')
|
243
244
|
end
|
244
245
|
|
245
246
|
default :ID, :USER, :GROUP, :NAME, :DATASTORE, :SIZE, :TYPE,
|
246
|
-
|
247
|
+
:PERSISTENT, :STAT, :RVMS
|
247
248
|
end
|
248
249
|
|
249
250
|
table
|
@@ -274,7 +275,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
274
275
|
|
275
276
|
private
|
276
277
|
|
277
|
-
def factory(id=nil)
|
278
|
+
def factory(id = nil)
|
278
279
|
if id
|
279
280
|
OpenNebula::Image.new_with_id(id, @client)
|
280
281
|
else
|
@@ -283,109 +284,115 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
283
284
|
end
|
284
285
|
end
|
285
286
|
|
286
|
-
def factory_pool(user_flag
|
287
|
+
def factory_pool(user_flag = -2)
|
287
288
|
OpenNebula::ImagePool.new(@client, user_flag)
|
288
289
|
end
|
289
290
|
|
290
|
-
def format_resource(image,
|
291
|
-
str=
|
292
|
-
str_h1=
|
291
|
+
def format_resource(image, _options = {})
|
292
|
+
str='%-15s: %-20s'
|
293
|
+
str_h1='%-80s'
|
294
|
+
|
295
|
+
path = image['PATH']
|
296
|
+
fstype = image['FSTYPE']
|
297
|
+
|
298
|
+
size = OpenNebulaHelper.unit_to_str(image['SIZE'].to_i, {}, 'M')
|
299
|
+
lock = OpenNebulaHelper.level_lock_to_str(image['LOCK/LOCKED'])
|
300
|
+
regtime = OpenNebulaHelper.time_to_str(image['REGTIME'])
|
301
|
+
pers = OpenNebulaHelper.boolean_to_str(image['PERSISTENT'])
|
293
302
|
|
294
303
|
CLIHelper.print_header(str_h1 % "IMAGE #{image['ID']} INFORMATION")
|
295
|
-
puts str
|
296
|
-
puts str
|
297
|
-
puts str
|
298
|
-
puts str
|
299
|
-
puts str
|
300
|
-
puts str
|
301
|
-
puts str
|
302
|
-
puts str
|
303
|
-
|
304
|
-
puts str
|
305
|
-
|
306
|
-
puts str
|
307
|
-
puts str
|
308
|
-
puts str
|
309
|
-
puts str
|
310
|
-
puts str % ["STATE", image.short_state_str]
|
311
|
-
puts str % ["RUNNING_VMS", image['RUNNING_VMS']]
|
304
|
+
puts format(str, 'ID', image.id.to_s)
|
305
|
+
puts format(str, 'NAME', image.name)
|
306
|
+
puts format(str, 'USER', image['UNAME'])
|
307
|
+
puts format(str, 'GROUP', image['GNAME'])
|
308
|
+
puts format(str, 'LOCK', lock)
|
309
|
+
puts format(str, 'DATASTORE', image['DATASTORE'])
|
310
|
+
puts format(str, 'TYPE', image.type_str)
|
311
|
+
puts format(str, 'REGISTER TIME', regtime)
|
312
|
+
puts format(str, 'PERSISTENT', pers)
|
313
|
+
puts format(str, 'SOURCE', image['SOURCE'])
|
314
|
+
puts format(str, 'PATH', path) if path && !path.empty?
|
315
|
+
puts format(str, 'FSTYPE', fstype) if fstype && !fstype.empty?
|
316
|
+
puts format(str, 'SIZE', size)
|
317
|
+
puts format(str, 'STATE', image.short_state_str)
|
318
|
+
puts format(str, 'RUNNING_VMS', image['RUNNING_VMS'])
|
312
319
|
puts
|
313
320
|
|
314
|
-
CLIHelper.print_header(str_h1 %
|
321
|
+
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
315
322
|
|
316
|
-
[
|
317
|
-
mask =
|
318
|
-
mask[0] =
|
319
|
-
mask[1] =
|
320
|
-
mask[2] =
|
323
|
+
%w[OWNER GROUP OTHER].each do |e|
|
324
|
+
mask = '---'
|
325
|
+
mask[0] = 'u' if image["PERMISSIONS/#{e}_U"] == '1'
|
326
|
+
mask[1] = 'm' if image["PERMISSIONS/#{e}_M"] == '1'
|
327
|
+
mask[2] = 'a' if image["PERMISSIONS/#{e}_A"] == '1'
|
321
328
|
|
322
|
-
puts str
|
323
|
-
|
329
|
+
puts format(str, e, mask)
|
330
|
+
end
|
324
331
|
|
325
|
-
if image.has_elements?(
|
332
|
+
if image.has_elements?('/IMAGE/SNAPSHOTS/SNAPSHOT')
|
326
333
|
puts
|
327
|
-
CLIHelper.print_header(str_h1 %
|
334
|
+
CLIHelper.print_header(str_h1 % 'IMAGE SNAPSHOTS', false)
|
328
335
|
format_snapshots(image)
|
329
336
|
end
|
330
337
|
|
331
338
|
puts
|
332
339
|
|
333
|
-
CLIHelper.print_header(str_h1 %
|
340
|
+
CLIHelper.print_header(str_h1 % 'IMAGE TEMPLATE', false)
|
334
341
|
puts image.template_str
|
335
342
|
|
336
343
|
puts
|
337
|
-
CLIHelper.print_header(
|
344
|
+
CLIHelper.print_header('VIRTUAL MACHINES', false)
|
338
345
|
puts
|
339
346
|
|
340
|
-
vms=image.retrieve_elements(
|
347
|
+
vms=image.retrieve_elements('VMS/ID')
|
341
348
|
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
349
|
+
return unless vms
|
350
|
+
|
351
|
+
vms.map! {|e| e.to_i }
|
352
|
+
onevm_helper=OneVMHelper.new
|
353
|
+
onevm_helper.client=@client
|
354
|
+
onevm_helper.list_pool({ :ids=>vms, :no_pager => true }, false)
|
348
355
|
end
|
349
356
|
|
350
357
|
def format_snapshots(image)
|
351
358
|
table=CLIHelper::ShowTable.new(nil, self) do
|
352
|
-
column :AC
|
353
|
-
if d[
|
354
|
-
|
359
|
+
column :AC, 'Is active', :left, :size => 2 do |d|
|
360
|
+
if d['ACTIVE'] == 'YES'
|
361
|
+
'=>'
|
355
362
|
else
|
356
|
-
|
363
|
+
''
|
357
364
|
end
|
358
365
|
end
|
359
|
-
column :ID,
|
360
|
-
d[
|
366
|
+
column :ID, 'Snapshot ID', :size=>3 do |d|
|
367
|
+
d['ID']
|
361
368
|
end
|
362
369
|
|
363
|
-
column :PARENT,
|
364
|
-
d[
|
370
|
+
column :PARENT, 'Snapshot Parent ID', :size=>6 do |d|
|
371
|
+
d['PARENT']
|
365
372
|
end
|
366
373
|
|
367
|
-
column :CHILDREN,
|
368
|
-
d[
|
374
|
+
column :CHILDREN, 'Snapshot Children IDs', :size=>10 do |d|
|
375
|
+
d['CHILDREN']
|
369
376
|
end
|
370
377
|
|
371
|
-
column :SIZE,
|
372
|
-
if d[
|
378
|
+
column :SIZE, '', :left, :size=>8 do |d|
|
379
|
+
if d['SIZE']
|
373
380
|
OpenNebulaHelper.unit_to_str(
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
381
|
+
d['SIZE'].to_i,
|
382
|
+
{},
|
383
|
+
'M'
|
384
|
+
)
|
378
385
|
else
|
379
|
-
|
386
|
+
'-'
|
380
387
|
end
|
381
388
|
end
|
382
389
|
|
383
|
-
column :NAME,
|
384
|
-
d[
|
390
|
+
column :NAME, 'Snapshot Name', :left, :size=>37 do |d|
|
391
|
+
d['NAME']
|
385
392
|
end
|
386
393
|
|
387
|
-
column :DATE,
|
388
|
-
OpenNebulaHelper.time_to_str(d[
|
394
|
+
column :DATE, 'Snapshot creation date', :size=>15 do |d|
|
395
|
+
OpenNebulaHelper.time_to_str(d['DATE'])
|
389
396
|
end
|
390
397
|
|
391
398
|
default :AC, :ID, :PARENT, :DATE, :SIZE, :NAME
|
@@ -397,41 +404,46 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
397
404
|
table.show(image_snapshots)
|
398
405
|
end
|
399
406
|
|
400
|
-
|
401
|
-
if Array === name
|
402
|
-
names = name
|
403
|
-
else
|
404
|
-
names = [name]
|
405
|
-
end
|
407
|
+
class << self
|
406
408
|
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
409
|
+
def create_image_variables(options, name)
|
410
|
+
if name.is_a?(Array)
|
411
|
+
names = name
|
412
|
+
else
|
413
|
+
names = [name]
|
411
414
|
end
|
412
|
-
end
|
413
415
|
|
414
|
-
|
415
|
-
|
416
|
+
t = ''
|
417
|
+
names.each do |n|
|
418
|
+
if options[n]
|
419
|
+
t << "#{n.to_s.upcase}=\"#{options[n]}\"\n"
|
420
|
+
end
|
421
|
+
end
|
416
422
|
|
417
|
-
|
418
|
-
template_options = TEMPLATE_OPTIONS.map do |o|
|
419
|
-
o[:name].to_sym
|
423
|
+
t
|
420
424
|
end
|
421
425
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
+
def create_image_template(options)
|
427
|
+
template_options = TEMPLATE_OPTIONS.map do |o|
|
428
|
+
o[:name].to_sym
|
429
|
+
end
|
426
430
|
|
427
|
-
|
428
|
-
|
429
|
-
|
431
|
+
template = create_image_variables(
|
432
|
+
options,
|
433
|
+
template_options - [:persistent, :dry, :prefix]
|
434
|
+
)
|
435
|
+
|
436
|
+
if options[:persistent]
|
437
|
+
template << "PERSISTENT=YES\n"
|
438
|
+
end
|
430
439
|
|
431
|
-
|
432
|
-
|
440
|
+
if options[:prefix]
|
441
|
+
template << "DEV_PREFIX=\"#{options[:prefix]}\"\n"
|
442
|
+
end
|
443
|
+
|
444
|
+
[0, template]
|
433
445
|
end
|
434
446
|
|
435
|
-
[0, template]
|
436
447
|
end
|
448
|
+
|
437
449
|
end
|
@@ -128,14 +128,18 @@ EOT
|
|
128
128
|
INT_EXP = /^-?\d+$/
|
129
129
|
FLOAT_EXP = /^-?\d+(\.\d+)?$/
|
130
130
|
|
131
|
-
def self.get_user_inputs(template)
|
131
|
+
def self.get_user_inputs(template, get_defaults = false)
|
132
132
|
user_inputs = template['VMTEMPLATE']['TEMPLATE']['USER_INPUTS']
|
133
133
|
|
134
134
|
return "" if !user_inputs
|
135
135
|
|
136
136
|
answers = ""
|
137
137
|
|
138
|
-
|
138
|
+
unless get_defaults
|
139
|
+
puts 'There are some parameters that require user input. ' \
|
140
|
+
'Use the string <<EDITOR>> to launch an editor ' \
|
141
|
+
'(e.g. for multi-line inputs)'
|
142
|
+
end
|
139
143
|
|
140
144
|
user_inputs.each do |key, val|
|
141
145
|
input_cfg = val.split('|', -1)
|
@@ -162,6 +166,11 @@ EOT
|
|
162
166
|
initial.strip!
|
163
167
|
end
|
164
168
|
|
169
|
+
if get_defaults
|
170
|
+
answers << "#{key}=\"#{initial}\"" unless mandatory == 'M'
|
171
|
+
next
|
172
|
+
end
|
173
|
+
|
165
174
|
puts " * (#{key}) #{description}"
|
166
175
|
|
167
176
|
header = " "
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opennebula-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.10.
|
4
|
+
version: 5.10.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenNebula
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opennebula
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.10.
|
19
|
+
version: 5.10.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.10.
|
26
|
+
version: 5.10.3
|
27
27
|
description: Commands used to talk to OpenNebula
|
28
28
|
email: contact@opennebula.org
|
29
29
|
executables:
|