opennebula-cli 6.8.3 → 6.9.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/oneflow +23 -3
- data/bin/oneflow-template +19 -1
- data/bin/oneimage +1 -86
- data/bin/onemarketapp +2 -13
- data/bin/onevm +41 -1
- data/bin/onezone +1 -5
- data/lib/one_helper/onegroup_helper.rb +1 -1
- data/lib/one_helper/oneimage_helper.rb +1 -1
- data/lib/one_helper/onequota_helper.rb +75 -0
- data/lib/one_helper/oneuser_helper.rb +1 -1
- data/lib/one_helper/onevm_helper.rb +2 -1
- data/lib/one_helper/onezone_helper.rb +2 -2
- data/share/schemas/xsd/host.xsd +15 -2
- data/share/schemas/xsd/image.xsd +5 -21
- data/share/schemas/xsd/opennebula_configuration.xsd +0 -2
- metadata +27 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38482e5c20e3b6bd22fe7b91b7d24bf7d7663fc1c43d8ea53d592c36395c652c
|
4
|
+
data.tar.gz: 143fa13eee00b3e666b0a8105e021c71062d668db57630b39d9c3b221e329101
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5b689b4788e3122e7a80407ff2846c87d56ba903e9254c4e70add4dae6f8c55e573996e75867c8f9de1aa64a592aa133861edee4e009205b46f700bdec7eb8a
|
7
|
+
data.tar.gz: 9704f4990ac5c7243cad58ffbe59e9f3f323acd8ea23b142059bdb21c6fe510587f8ad5eab05514e8abae6c1ce55c6bf713e7c1acc316c8b4cfe81b62c6137da
|
data/bin/oneflow
CHANGED
@@ -61,6 +61,21 @@ USER_AGENT = 'CLI'
|
|
61
61
|
# Base Path representing the resource to be used in the requests
|
62
62
|
RESOURCE_PATH = '/service'
|
63
63
|
|
64
|
+
RESOURCE_DOCUMENT_TYPE = '100'
|
65
|
+
|
66
|
+
def check_document_type(response)
|
67
|
+
if CloudClient.is_error?(response)
|
68
|
+
return if response.code == '500' # could be wrong document_type; skip this id
|
69
|
+
|
70
|
+
exit_with_code response.code.to_i, response.to_s
|
71
|
+
else
|
72
|
+
document_type = JSON.parse(response.body)['DOCUMENT']['TYPE']
|
73
|
+
if document_type == RESOURCE_DOCUMENT_TYPE
|
74
|
+
yield
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
64
79
|
CommandParser::CmdParser.new(ARGV) do
|
65
80
|
usage '`oneflow` <command> [<args>] [<options>]'
|
66
81
|
version OpenNebulaHelper::ONE_VERSION
|
@@ -168,9 +183,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
168
183
|
|
169
184
|
command :delete, delete_desc, [:range, :service_id_list] do
|
170
185
|
client = helper.client(options)
|
171
|
-
|
172
186
|
Service.perform_actions(args[0]) do |service_id|
|
173
|
-
client.
|
187
|
+
response = client.get("#{RESOURCE_PATH}/#{service_id}")
|
188
|
+
check_document_type response do
|
189
|
+
client.delete("#{RESOURCE_PATH}/#{service_id}")
|
190
|
+
end
|
174
191
|
end
|
175
192
|
end
|
176
193
|
|
@@ -197,7 +214,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
197
214
|
|
198
215
|
json = Service.build_json_action('recover', params)
|
199
216
|
|
200
|
-
client.
|
217
|
+
response = client.get("#{RESOURCE_PATH}/#{service_id}")
|
218
|
+
check_document_type response do
|
219
|
+
client.post("#{RESOURCE_PATH}/#{service_id}/action", json)
|
220
|
+
end
|
201
221
|
end
|
202
222
|
end
|
203
223
|
|
data/bin/oneflow-template
CHANGED
@@ -68,6 +68,21 @@ USER_AGENT = 'CLI'
|
|
68
68
|
# Base Path representing the resource to be used in the requests
|
69
69
|
RESOURCE_PATH = '/service_template'
|
70
70
|
|
71
|
+
RESOURCE_DOCUMENT_TYPE = '101'
|
72
|
+
|
73
|
+
def check_document_type(response)
|
74
|
+
if CloudClient.is_error?(response)
|
75
|
+
return if response.code == '500' # could be wrong document_type; skip this id
|
76
|
+
|
77
|
+
exit_with_code response.code.to_i, response.to_s
|
78
|
+
else
|
79
|
+
document_type = JSON.parse(response.body)['DOCUMENT']['TYPE']
|
80
|
+
if document_type == RESOURCE_DOCUMENT_TYPE
|
81
|
+
yield
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
71
86
|
CommandParser::CmdParser.new(ARGV) do
|
72
87
|
MULTIPLE = {
|
73
88
|
:name => 'multiple',
|
@@ -240,7 +255,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
240
255
|
body['delete_type'] = delete
|
241
256
|
|
242
257
|
Service.perform_actions(args[0]) do |template_id|
|
243
|
-
client.
|
258
|
+
response = client.get("#{RESOURCE_PATH}/#{template_id}")
|
259
|
+
check_document_type response do
|
260
|
+
client.delete("#{RESOURCE_PATH}/#{template_id}", body.to_json)
|
261
|
+
end
|
244
262
|
end
|
245
263
|
end
|
246
264
|
|
data/bin/oneimage
CHANGED
@@ -88,12 +88,6 @@ CommandParser::CmdParser.new(ARGV) do
|
|
88
88
|
:description => 'lock all actions'
|
89
89
|
}
|
90
90
|
|
91
|
-
NO_CONTEXT = {
|
92
|
-
:name => 'no_context',
|
93
|
-
:large => '--no-context',
|
94
|
-
:description => 'Do not add context when building from Dockerfile'
|
95
|
-
}
|
96
|
-
|
97
91
|
NO_IP = {
|
98
92
|
:name => 'no_ip',
|
99
93
|
:large => '--no_ip',
|
@@ -141,8 +135,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
141
135
|
|
142
136
|
CREATE_OPTIONS = [OneDatastoreHelper::DATASTORE,
|
143
137
|
OneImageHelper::IMAGE,
|
144
|
-
NAME
|
145
|
-
NO_CONTEXT]
|
138
|
+
NAME]
|
146
139
|
|
147
140
|
########################################################################
|
148
141
|
# Formatters for arguments
|
@@ -229,15 +222,6 @@ CommandParser::CmdParser.new(ARGV) do
|
|
229
222
|
next -1
|
230
223
|
end
|
231
224
|
|
232
|
-
# Add context information when building image (just working on Docker)
|
233
|
-
if (options.key? :no_context) && options[:path]
|
234
|
-
if options[:path].include?('?')
|
235
|
-
options[:path] << '&context=no'
|
236
|
-
else
|
237
|
-
options[:path] << '?context=no'
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
225
|
helper.create_resource(options) do |image|
|
242
226
|
begin
|
243
227
|
if args[0]
|
@@ -573,73 +557,4 @@ CommandParser::CmdParser.new(ARGV) do
|
|
573
557
|
|
574
558
|
return 0
|
575
559
|
end
|
576
|
-
|
577
|
-
dockerfile_desc = <<-EOT.unindent
|
578
|
-
Create an image based on a Dockerfile
|
579
|
-
EOT
|
580
|
-
|
581
|
-
command :dockerfile,
|
582
|
-
dockerfile_desc,
|
583
|
-
:options => CREATE_OPTIONS +
|
584
|
-
OneImageHelper::TEMPLATE_OPTIONS do
|
585
|
-
# Check user options
|
586
|
-
unless options[:datastore]
|
587
|
-
STDERR.puts 'Datastore to save the image is mandatory: '
|
588
|
-
STDERR.puts "\t -d datastore_id"
|
589
|
-
exit(-1)
|
590
|
-
end
|
591
|
-
|
592
|
-
unless options[:name]
|
593
|
-
STDERR.puts 'No name provided'
|
594
|
-
exit(-1)
|
595
|
-
end
|
596
|
-
|
597
|
-
unless options[:size]
|
598
|
-
STDERR.puts 'No size given'
|
599
|
-
exit(-1)
|
600
|
-
end
|
601
|
-
|
602
|
-
# Prepare editor
|
603
|
-
tmp = Tempfile.new('dockerfile')
|
604
|
-
|
605
|
-
if ENV['EDITOR']
|
606
|
-
editor_path = ENV['EDITOR']
|
607
|
-
else
|
608
|
-
editor_path = EDITOR_PATH
|
609
|
-
end
|
610
|
-
|
611
|
-
system("#{editor_path} #{tmp.path}")
|
612
|
-
|
613
|
-
unless $CHILD_STATUS.exitstatus.zero?
|
614
|
-
STDERR.puts('Editor not defined')
|
615
|
-
exit(-1)
|
616
|
-
end
|
617
|
-
|
618
|
-
tmp.close
|
619
|
-
|
620
|
-
# Create image
|
621
|
-
helper.create_resource(options) do |image|
|
622
|
-
begin
|
623
|
-
b64 = Base64.strict_encode64(File.read(tmp.path))
|
624
|
-
options[:path] = "dockerfile:///?fileb64=#{b64}&" \
|
625
|
-
"size=#{options[:size]}"
|
626
|
-
|
627
|
-
options[:path] << '&context=no' if options.key?(:no_context)
|
628
|
-
|
629
|
-
res = OneImageHelper.create_image_template(options)
|
630
|
-
|
631
|
-
if res.first != 0
|
632
|
-
STDERR.puts res.last
|
633
|
-
next -1
|
634
|
-
end
|
635
|
-
|
636
|
-
template = res.last
|
637
|
-
|
638
|
-
image.allocate(template, options[:datastore], false)
|
639
|
-
rescue StandardError => e
|
640
|
-
STDERR.puts e.message
|
641
|
-
exit(-1)
|
642
|
-
end
|
643
|
-
end
|
644
|
-
end
|
645
560
|
end
|
data/bin/onemarketapp
CHANGED
@@ -90,13 +90,6 @@ CommandParser::CmdParser.new(ARGV) do
|
|
90
90
|
:description => 'lock all actions'
|
91
91
|
}
|
92
92
|
|
93
|
-
TAG = {
|
94
|
-
:name => 'tag',
|
95
|
-
:large => '--tag tag',
|
96
|
-
:format => String,
|
97
|
-
:description => 'DockerHub image tag (default latest)'
|
98
|
-
}
|
99
|
-
|
100
93
|
YES = {
|
101
94
|
:name => 'yes',
|
102
95
|
:large => '--yes',
|
@@ -143,7 +136,6 @@ CommandParser::CmdParser.new(ARGV) do
|
|
143
136
|
EXPORT_OPTIONS = [OneDatastoreHelper::DATASTORE,
|
144
137
|
OneDatastoreHelper::FILE_DATASTORE,
|
145
138
|
OneMarketPlaceAppHelper::VMNAME,
|
146
|
-
TAG,
|
147
139
|
NO,
|
148
140
|
TEMPLATE]
|
149
141
|
IMPORT_OPTIONS = [YES, NO, MARKET, OneMarketPlaceAppHelper::VMNAME]
|
@@ -291,17 +283,14 @@ CommandParser::CmdParser.new(ARGV) do
|
|
291
283
|
|
292
284
|
command :export, export_desc, :appid, :name, :options => EXPORT_OPTIONS do
|
293
285
|
helper.perform_action(args[0], options, 'exporting') do |obj|
|
294
|
-
tag ="tag=#{options[:tag]}" if options[:tag]
|
295
|
-
|
296
286
|
obj.extend(MarketPlaceAppExt)
|
297
287
|
|
298
288
|
rc = obj.export(
|
299
289
|
:dsid => options[:datastore],
|
300
290
|
:name => args[1],
|
301
291
|
:vmtemplate_name => options[:vmname],
|
302
|
-
:
|
303
|
-
:
|
304
|
-
:template => options[:template]
|
292
|
+
:notemplate => options[:no] == 'no',
|
293
|
+
:template => options[:template]
|
305
294
|
)
|
306
295
|
|
307
296
|
if OpenNebula.is_error?(rc)
|
data/bin/onevm
CHANGED
@@ -257,6 +257,21 @@ CommandParser::CmdParser.new(ARGV) do
|
|
257
257
|
:description => 'Creates a new backup image, from a new full backup (only for incremental)'
|
258
258
|
}
|
259
259
|
|
260
|
+
INCREMENT = {
|
261
|
+
:name => 'increment',
|
262
|
+
:large => '--increment increment_id',
|
263
|
+
:format => Integer,
|
264
|
+
:description => 'Use the given increment ID to restore the backup.'\
|
265
|
+
' If not provided the last one will be used'
|
266
|
+
}
|
267
|
+
|
268
|
+
DISK_ID = {
|
269
|
+
:name => 'disk_id',
|
270
|
+
:large => '--disk-id disk_id',
|
271
|
+
:format => Integer,
|
272
|
+
:description => 'Use only selected disk ID'
|
273
|
+
}
|
274
|
+
|
260
275
|
OpenNebulaHelper::TEMPLATE_OPTIONS_VM.delete_if do |v|
|
261
276
|
['as_gid', 'as_uid'].include?(v[:name])
|
262
277
|
end
|
@@ -281,6 +296,10 @@ CommandParser::CmdParser.new(ARGV) do
|
|
281
296
|
OpenNebulaHelper.rname_to_id(arg, 'USER')
|
282
297
|
end
|
283
298
|
|
299
|
+
set :format, :imageid, OpenNebulaHelper.rname_to_id_desc('IMAGE') do |arg|
|
300
|
+
OpenNebulaHelper.rname_to_id(arg, 'IMAGE')
|
301
|
+
end
|
302
|
+
|
284
303
|
set :format,
|
285
304
|
:datastoreid,
|
286
305
|
OpenNebulaHelper.rname_to_id_desc('DATASTORE') do |arg|
|
@@ -720,7 +739,7 @@ CommandParser::CmdParser.new(ARGV) do
|
|
720
739
|
States for success/failure recovers: Any ACTIVE state.
|
721
740
|
States for a retry recover: Any *FAILURE state
|
722
741
|
States for delete: Any
|
723
|
-
States for recreate: Any but DONE
|
742
|
+
States for recreate: Any but DONE
|
724
743
|
States for delete-db: Any
|
725
744
|
EOT
|
726
745
|
|
@@ -1771,6 +1790,27 @@ CommandParser::CmdParser.new(ARGV) do
|
|
1771
1790
|
end
|
1772
1791
|
end
|
1773
1792
|
|
1793
|
+
restore_desc = <<-EOT.unindent
|
1794
|
+
Restore the Virtual Machine from the backup Image. The VM must be in poweroff state.
|
1795
|
+
EOT
|
1796
|
+
|
1797
|
+
command :restore, restore_desc, :vmid, :imageid, :options => [DISK_ID, INCREMENT] do
|
1798
|
+
helper.perform_action(args[0], options, 'Restoring VM from backup') do |vm|
|
1799
|
+
disk_id = options[:disk_id]
|
1800
|
+
disk_id ||= -1 # All disks by default
|
1801
|
+
|
1802
|
+
inc_id = options[:increment]
|
1803
|
+
inc_id ||= -1 # Last increment by default
|
1804
|
+
|
1805
|
+
rc = vm.restore(args[1], inc_id, disk_id)
|
1806
|
+
|
1807
|
+
if OpenNebula.is_error?(rc)
|
1808
|
+
STDERR.puts "Error restoring: #{rc.message}"
|
1809
|
+
exit(-1)
|
1810
|
+
end
|
1811
|
+
end
|
1812
|
+
end
|
1813
|
+
|
1774
1814
|
# Deprecated commands, remove these commands in release 8.x
|
1775
1815
|
|
1776
1816
|
deprecated_command(:'delete-chart', 'sched-delete')
|
data/bin/onezone
CHANGED
@@ -253,15 +253,11 @@ CommandParser::CmdParser.new(ARGV) do
|
|
253
253
|
|
254
254
|
command :serversync, sync_desc, :server, :options => [DATABASE] do
|
255
255
|
begin
|
256
|
-
# Suppress augeas require warning message
|
257
|
-
$VERBOSE = nil
|
258
|
-
|
259
|
-
gem 'augeas', '~> 0.6'
|
260
256
|
require 'augeas'
|
261
257
|
rescue Gem::LoadError
|
262
258
|
STDERR.puts(
|
263
259
|
'Augeas gem is not installed, run `gem install ' \
|
264
|
-
'augeas
|
260
|
+
'opennebula-augeas` to install it'
|
265
261
|
)
|
266
262
|
exit(-1)
|
267
263
|
end
|
@@ -22,7 +22,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
22
22
|
|
23
23
|
# This list contains prefixes that should skip adding user home to the path
|
24
24
|
# This must have the same content as the case $FROM in downloader.sh
|
25
|
-
PREFIXES = ['http', 'https', 'ssh', 's3', 'rbd', 'vcenter', 'lxd'
|
25
|
+
PREFIXES = ['http', 'https', 'ssh', 's3', 'rbd', 'vcenter', 'lxd']
|
26
26
|
|
27
27
|
TEMPLATE_OPTIONS=[
|
28
28
|
{
|
@@ -75,6 +75,10 @@ class OneQuotaHelper
|
|
75
75
|
#-----------------------------------------------------------------------
|
76
76
|
EOT
|
77
77
|
|
78
|
+
def initialize(client = nil)
|
79
|
+
@client=client
|
80
|
+
end
|
81
|
+
|
78
82
|
# Edits the quota template of a resource
|
79
83
|
# @param [XMLElement] resource to get the current info from
|
80
84
|
# @param [String] path to the new contents. If nil a editor will be
|
@@ -207,6 +211,8 @@ class OneQuotaHelper
|
|
207
211
|
|
208
212
|
vm_quotas = [qh['VM_QUOTA']['VM']].flatten
|
209
213
|
|
214
|
+
generic_quotas = get_generic_quotas
|
215
|
+
|
210
216
|
# This initializes the VM quotas for users/groups that don't have any
|
211
217
|
# resource usage yet. It not applied to oneamdin
|
212
218
|
if vm_quotas[0].nil? && resource_id.to_i != 0
|
@@ -228,6 +234,13 @@ class OneQuotaHelper
|
|
228
234
|
"SYSTEM_DISK_SIZE" => limit,
|
229
235
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
230
236
|
}]
|
237
|
+
|
238
|
+
generic_quotas.each do |q|
|
239
|
+
vm_quotas[0][q] = limit
|
240
|
+
vm_quotas[0]["#{q}_USED"] = "0"
|
241
|
+
vm_quotas[0]["RUNNING_#{q}"] = limit
|
242
|
+
vm_quotas[0]["RUNNING_#{q}_USED"] = "0"
|
243
|
+
end
|
231
244
|
end
|
232
245
|
|
233
246
|
if !vm_quotas[0].nil?
|
@@ -378,6 +391,55 @@ class OneQuotaHelper
|
|
378
391
|
puts
|
379
392
|
end
|
380
393
|
|
394
|
+
if !generic_quotas.empty? && !vm_quotas[0].nil?
|
395
|
+
CLIHelper.print_header(str_h1 % "VMS GENERIC QUOTAS",false)
|
396
|
+
size = [80 / generic_quotas.length - 1, 18].min
|
397
|
+
|
398
|
+
CLIHelper::ShowTable.new(nil, self) do
|
399
|
+
generic_quotas.each do |elem|
|
400
|
+
column elem.to_sym, "", :right, :size=>size do |d|
|
401
|
+
if !d.nil?
|
402
|
+
limit = d[elem]
|
403
|
+
limit = helper.get_default_limit(
|
404
|
+
limit, "VM_QUOTA/VM/#{elem}")
|
405
|
+
|
406
|
+
if limit == LIMIT_UNLIMITED
|
407
|
+
"%6s / -" % [d["#{elem}_USED"]]
|
408
|
+
else
|
409
|
+
"%6s / %6s" % [d["#{elem}_USED"], limit]
|
410
|
+
end
|
411
|
+
end
|
412
|
+
end
|
413
|
+
end
|
414
|
+
end.show(vm_quotas, {})
|
415
|
+
|
416
|
+
puts
|
417
|
+
|
418
|
+
CLIHelper.print_header(str_h1 % "VMS GENERIC RUNNING QUOTAS",false)
|
419
|
+
size = [80 / generic_quotas.length - 1, 18].min
|
420
|
+
|
421
|
+
CLIHelper::ShowTable.new(nil, self) do
|
422
|
+
generic_quotas.each do |q|
|
423
|
+
elem = "RUNNING_#{q}"
|
424
|
+
column elem.to_sym, "", :right, :size=>size do |d|
|
425
|
+
if !d.nil?
|
426
|
+
limit = d[elem]
|
427
|
+
limit = helper.get_default_limit(
|
428
|
+
limit, "VM_QUOTA/VM/#{elem}")
|
429
|
+
|
430
|
+
if limit == LIMIT_UNLIMITED
|
431
|
+
"%6s / -" % [d["#{elem}_USED"]]
|
432
|
+
else
|
433
|
+
"%6s / %6s" % [d["#{elem}_USED"], limit]
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
438
|
+
end.show(vm_quotas, {})
|
439
|
+
|
440
|
+
puts
|
441
|
+
end
|
442
|
+
|
381
443
|
CLIHelper.print_header(str_h1 % "DATASTORE USAGE & QUOTAS",false)
|
382
444
|
|
383
445
|
puts
|
@@ -503,4 +565,17 @@ class OneQuotaHelper
|
|
503
565
|
|
504
566
|
return limit
|
505
567
|
end
|
568
|
+
|
569
|
+
private
|
570
|
+
|
571
|
+
def get_generic_quotas
|
572
|
+
conf = OpenNebula::System.new(@client).get_configuration
|
573
|
+
|
574
|
+
return [] if OpenNebula.is_error?(conf)
|
575
|
+
|
576
|
+
conf.retrieve_elements('/OPENNEBULA_CONFIGURATION/QUOTA_VM_ATTRIBUTE') || []
|
577
|
+
rescue StandardError
|
578
|
+
[]
|
579
|
+
end
|
580
|
+
|
506
581
|
end
|
@@ -160,7 +160,8 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
160
160
|
SEARCH = {
|
161
161
|
:name => 'search',
|
162
162
|
:large => '--search search',
|
163
|
-
:description => '
|
163
|
+
:description => 'Query in PATH=VALUE format. For example: ' \
|
164
|
+
'onevm list --search "VM.NAME=abc&VM.TEMPLATE.DISK[*].IMAGE=db1"',
|
164
165
|
:format => String
|
165
166
|
}
|
166
167
|
|
@@ -135,7 +135,7 @@ class Replicator
|
|
135
135
|
def fetch_db_config(configs)
|
136
136
|
configs.store(:backend, configs[:raw]['/OPENNEBULA_CONFIGURATION/DB/BACKEND'])
|
137
137
|
|
138
|
-
if configs[:backend] == 'mysql'
|
138
|
+
if configs[:backend] == 'mysql'
|
139
139
|
configs.store(:server, configs[:raw]['/OPENNEBULA_CONFIGURATION/DB/SERVER'])
|
140
140
|
configs.store(:user, configs[:raw]['/OPENNEBULA_CONFIGURATION/DB/USER'])
|
141
141
|
configs.store(:password, configs[:raw]['/OPENNEBULA_CONFIGURATION/DB/PASSWD'])
|
@@ -143,7 +143,7 @@ class Replicator
|
|
143
143
|
configs.store(:port, configs[:raw]['/OPENNEBULA_CONFIGURATION/DB/PORT'])
|
144
144
|
configs[:port] = '3306' if configs[:port] == '0'
|
145
145
|
else
|
146
|
-
STDERR.puts 'No mysql
|
146
|
+
STDERR.puts 'No mysql backend configuration found'
|
147
147
|
exit(-1)
|
148
148
|
end
|
149
149
|
end
|
data/share/schemas/xsd/host.xsd
CHANGED
@@ -42,12 +42,25 @@
|
|
42
42
|
<xs:element name="VMS_THREAD" type="xs:integer"/>
|
43
43
|
<xs:element name="DATASTORES">
|
44
44
|
<xs:complexType>
|
45
|
-
<xs:
|
45
|
+
<xs:sequence>
|
46
46
|
<xs:element name="DISK_USAGE" type="xs:integer"/>
|
47
|
+
<xs:element name="DS" minOccurs="0" maxOccurs="unbounded">
|
48
|
+
<xs:complexType>
|
49
|
+
<xs:sequence>
|
50
|
+
<xs:element name="FREE_MB" type="xs:integer"/>
|
51
|
+
<xs:element name="ID" type="xs:integer"/>
|
52
|
+
<xs:element name="TOTAL_MB" type="xs:integer"/>
|
53
|
+
<xs:element name="USED_MB" type="xs:integer"/>
|
54
|
+
<xs:element name="REPLICA_CACHE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
55
|
+
<xs:element name="REPLICA_CACHE_SIZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
56
|
+
<xs:element name="REPLICA_IMAGES" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
57
|
+
</xs:sequence>
|
58
|
+
</xs:complexType>
|
59
|
+
</xs:element>
|
47
60
|
<xs:element name="FREE_DISK" type="xs:integer"/>
|
48
61
|
<xs:element name="MAX_DISK" type="xs:integer"/>
|
49
62
|
<xs:element name="USED_DISK" type="xs:integer"/>
|
50
|
-
</xs:
|
63
|
+
</xs:sequence>
|
51
64
|
</xs:complexType>
|
52
65
|
</xs:element>
|
53
66
|
<xs:element name="PCI_DEVICES">
|
data/share/schemas/xsd/image.xsd
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://opennebula.org/XMLSchema" elementFormDefault="qualified" targetNamespace="http://opennebula.org/XMLSchema">
|
3
|
+
<xs:include schemaLocation="shared.xsd"/>
|
3
4
|
<xs:element name="IMAGE">
|
4
5
|
<xs:complexType>
|
5
6
|
<xs:sequence>
|
@@ -65,27 +66,9 @@
|
|
65
66
|
<xs:element name="TARGET_SNAPSHOT" type="xs:integer"/>
|
66
67
|
<xs:element name="DATASTORE_ID" type="xs:integer"/>
|
67
68
|
<xs:element name="DATASTORE" type="xs:string"/>
|
68
|
-
<xs:element name="VMS"
|
69
|
-
|
70
|
-
|
71
|
-
<xs:element name="ID" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
|
72
|
-
</xs:sequence>
|
73
|
-
</xs:complexType>
|
74
|
-
</xs:element>
|
75
|
-
<xs:element name="CLONES">
|
76
|
-
<xs:complexType>
|
77
|
-
<xs:sequence>
|
78
|
-
<xs:element name="ID" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
|
79
|
-
</xs:sequence>
|
80
|
-
</xs:complexType>
|
81
|
-
</xs:element>
|
82
|
-
<xs:element name="APP_CLONES">
|
83
|
-
<xs:complexType>
|
84
|
-
<xs:sequence>
|
85
|
-
<xs:element name="ID" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
|
86
|
-
</xs:sequence>
|
87
|
-
</xs:complexType>
|
88
|
-
</xs:element>
|
69
|
+
<xs:element name="VMS" type="IDS"/>
|
70
|
+
<xs:element name="CLONES" type="IDS"/>
|
71
|
+
<xs:element name="APP_CLONES" type="IDS"/>
|
89
72
|
<xs:element name="TEMPLATE">
|
90
73
|
<xs:complexType>
|
91
74
|
<xs:sequence>
|
@@ -135,6 +118,7 @@
|
|
135
118
|
</xs:sequence>
|
136
119
|
</xs:complexType>
|
137
120
|
</xs:element>
|
121
|
+
<xs:element name="BACKUP_DISK_IDS" type="IDS" minOccurs="0" maxOccurs="1"/>
|
138
122
|
</xs:sequence>
|
139
123
|
</xs:complexType>
|
140
124
|
</xs:element>
|
@@ -50,7 +50,6 @@
|
|
50
50
|
<xs:element name="BACKEND" minOccurs="0" maxOccurs="1" >
|
51
51
|
<xs:simpleType>
|
52
52
|
<xs:restriction base="xs:string">
|
53
|
-
<xs:enumeration value="postgresql"/>
|
54
53
|
<xs:enumeration value="mysql"/>
|
55
54
|
<xs:enumeration value="sqlite"/>
|
56
55
|
</xs:restriction>
|
@@ -250,7 +249,6 @@
|
|
250
249
|
<xs:element name="MAX_CONN_BACKLOG" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
251
250
|
<xs:element name="MESSAGE_SIZE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
252
251
|
<xs:element name="MONITORING_INTERVAL_DATASTORE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
253
|
-
<xs:element name="MONITORING_INTERVAL_DB_UPDATE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
254
252
|
<xs:element name="MONITORING_INTERVAL_HOST" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
255
253
|
<xs:element name="MONITORING_INTERVAL_MARKET" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
256
254
|
<xs:element name="MONITORING_INTERVAL_VM" type="xs:integer" 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.
|
4
|
+
version: 6.9.80.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenNebula
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-07-26 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.
|
19
|
+
version: 6.9.80.pre
|
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.
|
26
|
+
version: 6.9.80.pre
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -41,33 +41,33 @@ dependencies:
|
|
41
41
|
description: Commands used to talk to OpenNebula
|
42
42
|
email: contact@opennebula.io
|
43
43
|
executables:
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
47
|
-
-
|
48
|
-
-
|
44
|
+
- oneacct
|
45
|
+
- oneacl
|
46
|
+
- onebackupjob
|
47
|
+
- onecluster
|
48
|
+
- onedatastore
|
49
|
+
- oneflow
|
50
|
+
- oneflow-template
|
49
51
|
- onegroup
|
50
52
|
- onehook
|
51
|
-
-
|
52
|
-
-
|
53
|
+
- onehost
|
54
|
+
- oneimage
|
53
55
|
- oneirb
|
54
|
-
- oneflow-template
|
55
|
-
- onevrouter
|
56
|
-
- oneshowback
|
57
|
-
- oneuser
|
58
|
-
- oneacct
|
59
|
-
- onesecgroup
|
60
|
-
- onecluster
|
61
56
|
- onelog
|
57
|
+
- onemarket
|
62
58
|
- onemarketapp
|
59
|
+
- onesecgroup
|
60
|
+
- oneshowback
|
63
61
|
- onetemplate
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
- oneflow
|
68
|
-
- onedatastore
|
69
|
-
- onebackupjob
|
62
|
+
- oneuser
|
63
|
+
- onevcenter
|
64
|
+
- onevdc
|
70
65
|
- onevm
|
66
|
+
- onevmgroup
|
67
|
+
- onevnet
|
68
|
+
- onevntemplate
|
69
|
+
- onevrouter
|
70
|
+
- onezone
|
71
71
|
extensions: []
|
72
72
|
extra_rdoc_files: []
|
73
73
|
files:
|
@@ -195,11 +195,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
195
|
version: '0'
|
196
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
197
|
requirements:
|
198
|
-
- - "
|
198
|
+
- - ">"
|
199
199
|
- !ruby/object:Gem::Version
|
200
|
-
version:
|
200
|
+
version: 1.3.1
|
201
201
|
requirements: []
|
202
|
-
rubygems_version: 3.
|
202
|
+
rubygems_version: 3.3.5
|
203
203
|
signing_key:
|
204
204
|
specification_version: 4
|
205
205
|
summary: OpenNebula Command Line Interface
|