opennebula-cli 6.8.0 → 6.8.1
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 +1 -1
- data/bin/onebackupjob +6 -0
- data/bin/onedatastore +5 -2
- data/bin/oneflow +4 -2
- data/bin/oneflow-template +34 -29
- data/bin/onehook +9 -0
- data/bin/oneimage +11 -0
- data/bin/onemarket +5 -2
- data/bin/onesecgroup +8 -1
- data/bin/oneshowback +1 -1
- data/bin/onevm +29 -8
- data/bin/onevmgroup +13 -3
- data/bin/onevnet +7 -2
- data/bin/onevntemplate +8 -0
- data/bin/onevrouter +5 -2
- data/bin/onezone +8 -1
- data/lib/one_helper/onebackupjob_helper.rb +2 -0
- data/lib/one_helper/oneflow_helper.rb +4 -1
- data/lib/one_helper/oneflowtemplate_helper.rb +4 -1
- data/lib/one_helper/oneimage_helper.rb +12 -3
- data/lib/one_helper/onevm_helper.rb +18 -1
- data/lib/one_helper.rb +12 -2
- data/share/schemas/xsd/acct.xsd +1 -0
- data/share/schemas/xsd/backupjob.xsd +1 -0
- data/share/schemas/xsd/vm.xsd +1 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cf54d4b60a559aec10ac15e21dbbe7b6ec46f6955552809d39f520ef764933f
|
4
|
+
data.tar.gz: b329c6848fd04338713db8c31728254d54a885fd0c24094d1f67d199a9722b29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7509c3cce87f1fc8c0e185612a98b60a91fce02b605c0ba1d551174793730991d099f1f3f66f392c3f0b3a715d8296880da6b4506b578e9017cccce3cdc3ebe2
|
7
|
+
data.tar.gz: 3c7fde70522ba16e9bbf3e7b8b6719962a23d6c6c51ea21c2ab73151655699aeec66729c2b26213ab91cd432bae5c7932fccdd4d8cc4044eb0ab1604cd9c1000
|
data/bin/oneacct
CHANGED
@@ -75,7 +75,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
75
75
|
exit(0)
|
76
76
|
end
|
77
77
|
|
78
|
-
filter_flag =
|
78
|
+
filter_flag = options[:userfilter] || VirtualMachinePool::INFO_ALL
|
79
79
|
if options[:start_time]
|
80
80
|
start_time = options[:start_time].to_i
|
81
81
|
else
|
data/bin/onebackupjob
CHANGED
@@ -130,6 +130,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
130
130
|
- using a template description file:
|
131
131
|
|
132
132
|
onebackupjob create weekly_backup.tmpl
|
133
|
+
|
134
|
+
- using a template description via stdin:
|
135
|
+
|
136
|
+
cat $bj_template | onebackupjob create
|
133
137
|
EOT
|
134
138
|
|
135
139
|
command :create,
|
@@ -143,6 +147,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
143
147
|
begin
|
144
148
|
if args[0]
|
145
149
|
template = File.read(args[0])
|
150
|
+
elsif STDIN.wait_readable?(0)
|
151
|
+
template = STDIN.read
|
146
152
|
else
|
147
153
|
template = OneBackupJobHelper.create_backupjob_template(options)
|
148
154
|
end
|
data/bin/onedatastore
CHANGED
@@ -113,8 +113,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
113
113
|
|
114
114
|
helper.create_resource(options) do |datastore|
|
115
115
|
begin
|
116
|
-
|
117
|
-
|
116
|
+
if args[0]
|
117
|
+
template = File.read(args[0])
|
118
|
+
elsif STDIN.wait_readable(0)
|
119
|
+
template = STDIN.read
|
120
|
+
end
|
118
121
|
datastore.allocate(template, cid)
|
119
122
|
rescue StandardError => e
|
120
123
|
STDERR.puts e.message
|
data/bin/oneflow
CHANGED
@@ -79,7 +79,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
79
79
|
DELETE = {
|
80
80
|
:name => 'delete',
|
81
81
|
:large => '--delete',
|
82
|
-
:description => 'Force flow
|
82
|
+
:description => 'Force flow recover delete'
|
83
83
|
}
|
84
84
|
|
85
85
|
APPEND = {
|
@@ -130,7 +130,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
130
130
|
List the available services
|
131
131
|
EOT
|
132
132
|
|
133
|
-
command :list, list_desc,
|
133
|
+
command :list, list_desc,
|
134
|
+
:options => FORMAT + CLIHelper::OPTIONS + [OpenNebulaHelper::DESCRIBE] do
|
134
135
|
helper.list_service_pool(helper.client(options), options)
|
135
136
|
end
|
136
137
|
|
@@ -162,6 +163,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
162
163
|
|
163
164
|
delete_desc = <<-EOT.unindent
|
164
165
|
Delete a given service
|
166
|
+
To force service removal please use 'oneflow recover --delete <service_id>' command
|
165
167
|
EOT
|
166
168
|
|
167
169
|
command :delete, delete_desc, [:range, :service_id_list] do
|
data/bin/oneflow-template
CHANGED
@@ -143,7 +143,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
143
143
|
List the available Service Templates
|
144
144
|
EOT
|
145
145
|
|
146
|
-
command :list, list_desc,
|
146
|
+
command :list, list_desc,
|
147
|
+
:options => FORMAT + CLIHelper::OPTIONS + [OpenNebulaHelper::DESCRIBE] do
|
147
148
|
helper.list_service_template_pool(helper.client(options), options)
|
148
149
|
end
|
149
150
|
|
@@ -186,11 +187,13 @@ CommandParser::CmdParser.new(ARGV) do
|
|
186
187
|
command :create, create_desc, [:file, nil], :options => Service::JSON_FORMAT do
|
187
188
|
client = helper.client(options)
|
188
189
|
|
189
|
-
|
190
|
-
|
191
|
-
|
190
|
+
if args[0]
|
191
|
+
template = File.read(args[0])
|
192
|
+
elsif STDIN.wait_readable(0)
|
193
|
+
template = STDIN.read
|
194
|
+
end
|
192
195
|
|
193
|
-
if template
|
196
|
+
if !template
|
194
197
|
STDERR.puts 'A template must be provided'
|
195
198
|
exit(-1)
|
196
199
|
end
|
@@ -257,38 +260,40 @@ CommandParser::CmdParser.new(ARGV) do
|
|
257
260
|
rc = 0
|
258
261
|
client = helper.client(options)
|
259
262
|
|
260
|
-
|
261
|
-
template =
|
262
|
-
|
263
|
-
template = STDIN.read
|
263
|
+
if args[1]
|
264
|
+
template = File.read(args[1])
|
265
|
+
elsif STDIN.wait_readable(0)
|
266
|
+
template = STDIN.read
|
267
|
+
end
|
268
|
+
params['merge_template'] = JSON.parse(template) if template
|
264
269
|
|
265
|
-
|
270
|
+
unless params['merge_template']
|
271
|
+
response = client.get("#{RESOURCE_PATH}/#{args[0]}")
|
266
272
|
|
267
|
-
|
268
|
-
|
273
|
+
if CloudClient.is_error?(response)
|
274
|
+
rc = [response.code.to_i, response.to_s]
|
275
|
+
break
|
276
|
+
end
|
269
277
|
|
270
|
-
|
271
|
-
|
272
|
-
break
|
273
|
-
end
|
278
|
+
params['merge_template'] = {}
|
279
|
+
body = JSON.parse(response.body)['DOCUMENT']['TEMPLATE']['BODY']
|
274
280
|
|
275
|
-
|
276
|
-
|
281
|
+
# Check global custom attributes
|
282
|
+
custom_attrs = helper.custom_attrs(body['custom_attrs'])
|
283
|
+
params['merge_template'].merge!(custom_attrs) unless custom_attrs.nil?
|
277
284
|
|
278
|
-
|
279
|
-
|
280
|
-
|
285
|
+
# Check role level custom attributes
|
286
|
+
custom_role_attrs = helper.custom_role_attrs(body['roles'])
|
287
|
+
params['merge_template'].merge!(custom_role_attrs) unless custom_role_attrs.nil?
|
281
288
|
|
282
|
-
|
283
|
-
|
284
|
-
|
289
|
+
# Check vnets attributes
|
290
|
+
vnets = helper.networks(body['networks'])
|
291
|
+
params['merge_template'].merge!(vnets) unless vnets.nil?
|
292
|
+
end
|
285
293
|
|
286
|
-
|
287
|
-
vnets = helper.networks(body['networks'])
|
288
|
-
params['merge_template'].merge!(vnets) unless vnets.nil?
|
289
|
-
end
|
294
|
+
json = Service.build_json_action('instantiate', params)
|
290
295
|
|
291
|
-
|
296
|
+
number.times do
|
292
297
|
response = client.post("#{RESOURCE_PATH}/#{args[0]}/action", json)
|
293
298
|
|
294
299
|
if CloudClient.is_error?(response)
|
data/bin/onehook
CHANGED
@@ -164,6 +164,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
164
164
|
|
165
165
|
onehook create hook.tmpl
|
166
166
|
|
167
|
+
- using a Hook description file via stdin:
|
168
|
+
|
169
|
+
cat $hook_template | onehook create
|
170
|
+
|
167
171
|
EOT
|
168
172
|
|
169
173
|
command :create, create_desc, :file, :options =>
|
@@ -172,6 +176,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
172
176
|
begin
|
173
177
|
if args[0]
|
174
178
|
template = File.read(args[0])
|
179
|
+
elsif STDIN.wait_readable(0)
|
180
|
+
template = STDIN.read
|
181
|
+
else
|
182
|
+
STDERR.puts 'No hook template provided'
|
183
|
+
exit(-1)
|
175
184
|
end
|
176
185
|
|
177
186
|
if options[:dry]
|
data/bin/oneimage
CHANGED
@@ -130,6 +130,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
130
130
|
list_options += OpenNebulaHelper::FORMAT
|
131
131
|
list_options << OpenNebulaHelper::NUMERIC
|
132
132
|
list_options << OpenNebulaHelper::DESCRIBE
|
133
|
+
list_options << OneImageHelper::FILTERS
|
133
134
|
|
134
135
|
CREATE_OPTIONS = [OneDatastoreHelper::DATASTORE,
|
135
136
|
OneImageHelper::IMAGE,
|
@@ -487,6 +488,16 @@ CommandParser::CmdParser.new(ARGV) do
|
|
487
488
|
EOT
|
488
489
|
|
489
490
|
command :list, list_desc, [:filterflag, nil], :options => list_options do
|
491
|
+
if options.key?(:backup)
|
492
|
+
filter = 'TYPE=BK'
|
493
|
+
|
494
|
+
if options[:filter]
|
495
|
+
options[:filter] << filter
|
496
|
+
else
|
497
|
+
options[:filter] = [filter]
|
498
|
+
end
|
499
|
+
options.delete(:backup)
|
500
|
+
end
|
490
501
|
helper.list_pool(options, false, args[0])
|
491
502
|
end
|
492
503
|
|
data/bin/onemarket
CHANGED
@@ -105,8 +105,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
105
105
|
command :create, create_desc, [:file, nil] do
|
106
106
|
helper.create_resource(options) do |marketplace|
|
107
107
|
begin
|
108
|
-
|
109
|
-
|
108
|
+
if args[0]
|
109
|
+
template = File.read(args[0])
|
110
|
+
elsif STDIN.wait_readable(0)
|
111
|
+
template = STDIN.read
|
112
|
+
end
|
110
113
|
marketplace.allocate(template)
|
111
114
|
rescue StandardError => e
|
112
115
|
STDERR.puts e.message
|
data/bin/onesecgroup
CHANGED
@@ -110,7 +110,14 @@ CommandParser::CmdParser.new(ARGV) do
|
|
110
110
|
command :create, create_desc, :file do
|
111
111
|
helper.create_resource(options) do |obj|
|
112
112
|
begin
|
113
|
-
|
113
|
+
if args[0]
|
114
|
+
template = File.read(args[0])
|
115
|
+
elsif STDIN.wait_readable(0)
|
116
|
+
template = STDIN.read
|
117
|
+
else
|
118
|
+
STDERR.puts 'No Security Group description provided'
|
119
|
+
exit(-1)
|
120
|
+
end
|
114
121
|
|
115
122
|
obj.allocate(template)
|
116
123
|
rescue StandardError => e
|
data/bin/oneshowback
CHANGED
data/bin/onevm
CHANGED
@@ -1267,8 +1267,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1267
1267
|
end
|
1268
1268
|
|
1269
1269
|
resize_desc = <<-EOT.unindent
|
1270
|
-
Resizes the capacity of a Virtual Machine
|
1271
|
-
RUNNING)
|
1270
|
+
Resizes the capacity of a Virtual Machine
|
1272
1271
|
|
1273
1272
|
#{OpenNebulaHelper::TEMPLATE_INPUT}
|
1274
1273
|
EOT
|
@@ -1325,6 +1324,26 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1325
1324
|
end
|
1326
1325
|
end
|
1327
1326
|
|
1327
|
+
backupmode_set_desc = <<-EOT.unindent
|
1328
|
+
Updates the backup mode of a VM. Can be #{OpenNebulaHelper::BACKUP_MODES.join('|')}
|
1329
|
+
EOT
|
1330
|
+
|
1331
|
+
command :backupmode, backupmode_set_desc, :vmid, :mode do
|
1332
|
+
vm_ref = args[0]
|
1333
|
+
backup_mode = args[1]
|
1334
|
+
|
1335
|
+
if !helper.backup_mode_valid?(backup_mode)
|
1336
|
+
err_msg = "Invalid backup mode: #{backup_mode}\n"
|
1337
|
+
err_msg << "Valid backup modes are: #{OpenNebulaHelper::BACKUP_MODES.join(',')}"
|
1338
|
+
|
1339
|
+
STDERR.puts err_msg
|
1340
|
+
exit(-1)
|
1341
|
+
end
|
1342
|
+
|
1343
|
+
# TODO: Ensure other BACKUP_CONFIG is not overwritten
|
1344
|
+
helper.set_backup_mode(vm_ref, backup_mode)
|
1345
|
+
end
|
1346
|
+
|
1328
1347
|
updateconf_desc = <<-EOT.unindent
|
1329
1348
|
Updates the configuration of a VM. Valid states are: running, pending,
|
1330
1349
|
failure, poweroff, undeploy, hold or cloning.
|
@@ -1337,13 +1356,13 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1337
1356
|
The full list of configuration attributes are:
|
1338
1357
|
|
1339
1358
|
OS = ["ARCH", "MACHINE", "KERNEL", "INITRD", "BOOTLOADER", "BOOT", "UUID"]
|
1340
|
-
FEATURES = ["ACPI", "PAE", "APIC", "LOCALTIME", "HYPERV", "GUEST_AGENT", "IOTHREADS"]
|
1359
|
+
FEATURES = ["ACPI", "PAE", "APIC", "LOCALTIME", "HYPERV", "GUEST_AGENT", "VIRTIO_SCSI_QUEUES", "VIRTIO_BLK_QUEUES", "IOTHREADS"]
|
1341
1360
|
INPUT = ["TYPE", "BUS"]
|
1342
1361
|
GRAPHICS = ["TYPE", "LISTEN", "PASSWD", "KEYMAP" ]
|
1343
1362
|
VIDEO = ["TYPE", "IOMMU", "ATS", "VRAM", "RESOLUTION"]
|
1344
1363
|
RAW = ["DATA", "DATA_VMX", "TYPE", "VALIDATE"]
|
1345
1364
|
CPU_MODEL = ["MODEL"]
|
1346
|
-
BACKUP_CONFIG = ["FS_FREEZE", "KEEP_LAST", "BACKUP_VOLATILE", "MODE"]
|
1365
|
+
BACKUP_CONFIG = ["FS_FREEZE", "KEEP_LAST", "BACKUP_VOLATILE", "MODE", "INCREMENT_MODE"]
|
1347
1366
|
CONTEXT (any value, **variable substitution will be made**)
|
1348
1367
|
EOT
|
1349
1368
|
|
@@ -1352,15 +1371,17 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1352
1371
|
template = ''
|
1353
1372
|
|
1354
1373
|
begin
|
1355
|
-
|
1356
|
-
|
1374
|
+
if args[1]
|
1375
|
+
template = File.read(args[1])
|
1376
|
+
elsif STDIN.wait_readable(0)
|
1377
|
+
template = STDIN.read
|
1378
|
+
end
|
1357
1379
|
rescue StandardError => e
|
1358
1380
|
STDERR.puts "Error reading template: #{e.message}."
|
1359
1381
|
exit(-1)
|
1360
1382
|
end
|
1361
1383
|
|
1362
|
-
helper.perform_action(args[0], options,
|
1363
|
-
'Updating VM configuration') do |vm|
|
1384
|
+
helper.perform_action(args[0], options, 'Updating VM configuration') do |vm|
|
1364
1385
|
if template.empty?
|
1365
1386
|
rc = vm.info
|
1366
1387
|
|
data/bin/onevmgroup
CHANGED
@@ -136,7 +136,14 @@ CommandParser::CmdParser.new(ARGV) do
|
|
136
136
|
command :create, create_desc, :file do
|
137
137
|
helper.create_resource(options) do |obj|
|
138
138
|
begin
|
139
|
-
|
139
|
+
if args[0]
|
140
|
+
template = File.read(args[0])
|
141
|
+
elsif STDIN.wait_readable(0)
|
142
|
+
template = STDIN.read
|
143
|
+
else
|
144
|
+
STDERR.puts 'No VM Group description provided'
|
145
|
+
exit(-1)
|
146
|
+
end
|
140
147
|
|
141
148
|
obj.allocate(template)
|
142
149
|
rescue StandardError => e
|
@@ -283,8 +290,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
283
290
|
|
284
291
|
command :"role-add", role_add_desc, :vmgroupid, [:file, nil] do
|
285
292
|
begin
|
286
|
-
|
287
|
-
|
293
|
+
if args[1]
|
294
|
+
template = File.read(args[1])
|
295
|
+
elsif STDIN.wait_readable(0)
|
296
|
+
template = STDIN.read
|
297
|
+
end
|
288
298
|
rescue StandardError => e
|
289
299
|
STDERR.puts "Error reading template: #{e.message}."
|
290
300
|
exit(-1)
|
data/bin/onevnet
CHANGED
@@ -171,8 +171,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
171
171
|
|
172
172
|
helper.create_resource(options) do |vn|
|
173
173
|
begin
|
174
|
-
|
175
|
-
|
174
|
+
if args[0]
|
175
|
+
template = File.read(args[0])
|
176
|
+
elsif STDIN.wait_readable(0)
|
177
|
+
template = STDIN.read
|
178
|
+
end
|
176
179
|
vn.allocate(template, cid)
|
177
180
|
rescue StandardError => e
|
178
181
|
STDERR.puts "Error creating network: #{e.message}"
|
@@ -200,6 +203,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
200
203
|
helper.perform_action(args[0], options, 'address range added') do |vn|
|
201
204
|
if args[1]
|
202
205
|
ar = File.read(args[1])
|
206
|
+
elsif STDIN.wait_readable(0)
|
207
|
+
ar = STDIN.read
|
203
208
|
else
|
204
209
|
ar = OpenNebulaHelper.create_ar(options)
|
205
210
|
end
|
data/bin/onevntemplate
CHANGED
@@ -149,6 +149,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
149
149
|
|
150
150
|
onevntemplate create vn_description.tmpl
|
151
151
|
|
152
|
+
- using a Virtual Network Template description file via stdin:
|
153
|
+
|
154
|
+
cat $vn_template | onevntemplate create
|
155
|
+
|
152
156
|
EOT
|
153
157
|
|
154
158
|
command :create, create_desc, [:file, nil], :options =>
|
@@ -157,6 +161,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
157
161
|
begin
|
158
162
|
if args[0]
|
159
163
|
template = File.read(args[0])
|
164
|
+
elsif STDIN.wait_readable(0)
|
165
|
+
template = STDIN.read
|
160
166
|
end
|
161
167
|
|
162
168
|
if options[:dry]
|
@@ -250,6 +256,8 @@ CommandParser::CmdParser.new(ARGV) do
|
|
250
256
|
|
251
257
|
if args[1]
|
252
258
|
extra_template = File.read(args[1])
|
259
|
+
elsif STDIN.wait_readable(0)
|
260
|
+
extra_template = STDIN.read
|
253
261
|
else
|
254
262
|
res = OpenNebulaHelper.create_template(options, t)
|
255
263
|
|
data/bin/onevrouter
CHANGED
@@ -140,8 +140,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
140
140
|
command :create, create_desc, [:file, nil] do
|
141
141
|
helper.create_resource(options) do |obj|
|
142
142
|
begin
|
143
|
-
|
144
|
-
|
143
|
+
if args[0]
|
144
|
+
template = File.read(args[0])
|
145
|
+
elsif STDIN.wait_readable(0)
|
146
|
+
template = STDIN.read
|
147
|
+
end
|
145
148
|
obj.allocate(template)
|
146
149
|
rescue StandardError => e
|
147
150
|
STDERR.puts e.message
|
data/bin/onezone
CHANGED
@@ -109,7 +109,14 @@ CommandParser::CmdParser.new(ARGV) do
|
|
109
109
|
command :create, create_desc, :file do
|
110
110
|
helper.create_resource(options) do |zone|
|
111
111
|
begin
|
112
|
-
|
112
|
+
if args[0]
|
113
|
+
template = File.read(args[0])
|
114
|
+
elsif STDIN.wait_readable(0)
|
115
|
+
template = STDIN.read
|
116
|
+
else
|
117
|
+
STDERR.puts 'No zone template provided'
|
118
|
+
exit(-1)
|
119
|
+
end
|
113
120
|
zone.allocate(template)
|
114
121
|
rescue StandardError => e
|
115
122
|
STDERR.puts e.message
|
@@ -155,6 +155,8 @@ class OneBackupJobHelper < OpenNebulaHelper::OneHelper
|
|
155
155
|
# Get user information
|
156
156
|
if file
|
157
157
|
str = File.read(file)
|
158
|
+
elsif STDIN.wait_readable(0)
|
159
|
+
str = STDIN.read
|
158
160
|
else
|
159
161
|
str = OpenNebulaHelper.update_template(id, bj, nil, xpath)
|
160
162
|
end
|
@@ -105,7 +105,10 @@ class OneFlowHelper < OpenNebulaHelper::OneHelper
|
|
105
105
|
elsif options[:yaml]
|
106
106
|
[0, array_list.to_yaml(:indent => 4)]
|
107
107
|
else
|
108
|
-
format_service_pool
|
108
|
+
table = format_service_pool
|
109
|
+
|
110
|
+
table.show(array_list, options)
|
111
|
+
table.describe_columns if options[:describe]
|
109
112
|
|
110
113
|
0
|
111
114
|
end
|
@@ -85,8 +85,11 @@ class OneFlowTemplateHelper < OpenNebulaHelper::OneHelper
|
|
85
85
|
elsif options[:yaml]
|
86
86
|
[0, JSON.parse(response.body).to_yaml(:indent => 4)]
|
87
87
|
else
|
88
|
+
table = format_service_template_pool
|
88
89
|
documents = JSON.parse(response.body)['DOCUMENT_POOL']
|
89
|
-
|
90
|
+
|
91
|
+
table.show(documents['DOCUMENT'], options)
|
92
|
+
table.describe_columns if options[:describe]
|
90
93
|
|
91
94
|
0
|
92
95
|
end
|
@@ -173,6 +173,15 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
173
173
|
:format => String
|
174
174
|
}
|
175
175
|
|
176
|
+
FILTERS = [
|
177
|
+
{
|
178
|
+
:name => 'backup',
|
179
|
+
:large => '--backup',
|
180
|
+
:description => 'Show only backup type images',
|
181
|
+
:format => String
|
182
|
+
}
|
183
|
+
]
|
184
|
+
|
176
185
|
def self.rname
|
177
186
|
'IMAGE'
|
178
187
|
end
|
@@ -263,13 +272,13 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
263
272
|
tmpl_pool.info
|
264
273
|
|
265
274
|
pool.each do |img|
|
275
|
+
next if img['TYPE'].to_i == 6 # skip backup images
|
276
|
+
|
266
277
|
attrs = { :id => img['ID'],
|
267
278
|
:name => img['NAME'],
|
268
279
|
:uname => img['UNAME'] }
|
269
280
|
|
270
|
-
orphans << img['ID'] if check_orphan(tmpl_pool,
|
271
|
-
xpath,
|
272
|
-
'IMAGE', attrs)
|
281
|
+
orphans << img['ID'] if check_orphan(tmpl_pool, xpath, 'IMAGE', attrs)
|
273
282
|
end
|
274
283
|
|
275
284
|
orphans
|
@@ -397,6 +397,8 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
397
397
|
# Get user information
|
398
398
|
if file
|
399
399
|
str = File.read(file)
|
400
|
+
elsif STDIN.wait_readable(0)
|
401
|
+
str = STDIN.read
|
400
402
|
else
|
401
403
|
str = OpenNebulaHelper.update_template(vm_id, vm, nil, xpath)
|
402
404
|
end
|
@@ -637,6 +639,21 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
637
639
|
# rubocop:enable Style/SpecialGlobalVars
|
638
640
|
end
|
639
641
|
|
642
|
+
def get_backup_mode(vm_id)
|
643
|
+
vm = retrieve_resource(vm_id)
|
644
|
+
|
645
|
+
if vm.has_elements?('/VM/BACKUPS/BACKUP_CONFIG')
|
646
|
+
vm.template_like_str('BACKUPS/BACKUP_CONFIG/MODE')
|
647
|
+
else
|
648
|
+
nil
|
649
|
+
end
|
650
|
+
end
|
651
|
+
|
652
|
+
def set_backup_mode(vm_ref, backup_mode)
|
653
|
+
vm = retrieve_resource(vm_ref)
|
654
|
+
vm.updateconf("BACKUP_CONFIG = [\"MODE\"=\"#{backup_mode}\"]")
|
655
|
+
end
|
656
|
+
|
640
657
|
private
|
641
658
|
|
642
659
|
def factory(id = nil)
|
@@ -1449,7 +1466,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1449
1466
|
vm_snapshots.each do |disk|
|
1450
1467
|
disk_id = disk['DISK_ID']
|
1451
1468
|
|
1452
|
-
sshots = [disk['SNAPSHOT']].flatten
|
1469
|
+
sshots = [disk['SNAPSHOT'] || []].flatten
|
1453
1470
|
sshots.each do |snapshot|
|
1454
1471
|
data = snapshot.merge('DISK_ID' => disk_id)
|
1455
1472
|
snapshots << data
|
data/lib/one_helper.rb
CHANGED
@@ -593,6 +593,8 @@ Bash symbols must be escaped on STDIN passing'
|
|
593
593
|
|
594
594
|
OPTIONS = FORMAT, EXTENDED, NUMERIC, KILOBYTES
|
595
595
|
|
596
|
+
BACKUP_MODES = ['FULL', 'INCREMENT']
|
597
|
+
|
596
598
|
class OneHelper
|
597
599
|
|
598
600
|
attr_accessor :client
|
@@ -717,6 +719,14 @@ Bash symbols must be escaped on STDIN passing'
|
|
717
719
|
end
|
718
720
|
end
|
719
721
|
|
722
|
+
def backup_mode_valid?(sus_backup_mode)
|
723
|
+
BACKUP_MODES.each do |backup_mode|
|
724
|
+
return true if backup_mode.casecmp?(sus_backup_mode)
|
725
|
+
end
|
726
|
+
|
727
|
+
false
|
728
|
+
end
|
729
|
+
|
720
730
|
#-----------------------------------------------------------------------
|
721
731
|
# List pool functions
|
722
732
|
#-----------------------------------------------------------------------
|
@@ -2313,7 +2323,7 @@ Bash symbols must be escaped on STDIN passing'
|
|
2313
2323
|
answer = STDIN.readline.chop
|
2314
2324
|
|
2315
2325
|
answer = initial if answer == ''
|
2316
|
-
noanswer = (
|
2326
|
+
noanswer = (answer == '') && optional
|
2317
2327
|
end while !noanswer && (answer =~ exp).nil?
|
2318
2328
|
|
2319
2329
|
if noanswer
|
@@ -2379,7 +2389,7 @@ Bash symbols must be escaped on STDIN passing'
|
|
2379
2389
|
answer = options[answer.to_i]
|
2380
2390
|
end
|
2381
2391
|
|
2382
|
-
noanswer = (
|
2392
|
+
noanswer = (answer == '') && optional
|
2383
2393
|
end while !noanswer && !options.include?(answer)
|
2384
2394
|
|
2385
2395
|
if noanswer
|
data/share/schemas/xsd/acct.xsd
CHANGED
@@ -162,6 +162,7 @@
|
|
162
162
|
<xs:element name="BACKUP_VOLATILE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
163
163
|
<xs:element name="FS_FREEZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
164
164
|
<xs:element name="INCREMENTAL_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
165
|
+
<xs:element name="INCREMENT_MODE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
165
166
|
<xs:element name="KEEP_LAST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
166
167
|
<xs:element name="LAST_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
167
168
|
<xs:element name="LAST_BACKUP_SIZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
@@ -27,6 +27,7 @@
|
|
27
27
|
<xs:element name="BACKUP_VMS" type="xs:string"/>
|
28
28
|
<xs:element name="BACKUP_VOLATILE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
29
29
|
<xs:element name="DATASTORE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
30
|
+
<xs:element name="ERROR" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
30
31
|
<xs:element name="EXECUTION" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
31
32
|
<xs:element name="FS_FREEZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
32
33
|
<xs:element name="KEEP_LAST" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
data/share/schemas/xsd/vm.xsd
CHANGED
@@ -299,6 +299,7 @@
|
|
299
299
|
<xs:element name="BACKUP_VOLATILE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
300
300
|
<xs:element name="FS_FREEZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
301
301
|
<xs:element name="INCREMENTAL_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
302
|
+
<xs:element name="INCREMENT_MODE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
302
303
|
<xs:element name="KEEP_LAST" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
303
304
|
<xs:element name="LAST_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
304
305
|
<xs:element name="LAST_BACKUP_SIZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
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: 6.8.
|
4
|
+
version: 6.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenNebula
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-16 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: 6.8.
|
19
|
+
version: 6.8.1
|
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: 6.8.
|
26
|
+
version: 6.8.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|