opennebula-cli 5.6.0 → 5.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/onevcenter +28 -2
- data/bin/onezone +14 -2
- data/lib/cli_helper.rb +18 -5
- data/lib/command_parser.rb +5 -2
- data/lib/one_helper.rb +240 -30
- data/lib/one_helper/onegroup_helper.rb +36 -18
- data/lib/one_helper/onehost_helper.rb +3 -0
- data/lib/one_helper/onequota_helper.rb +104 -11
- data/lib/one_helper/oneuser_helper.rb +36 -18
- data/lib/one_helper/onevcenter_helper.rb +2 -0
- data/lib/one_helper/onezone_helper.rb +19 -16
- 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: 7898ac99cecd152ea743a52a93477038ee82ba80
|
4
|
+
data.tar.gz: 51743bf968d7d071faf589feaf5ebab16fef8b39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c7d8725c0fd499f613584bd1b04985049196a6d132bde5257c861f3e3166808849f9be4de8323a5be7f094756373b307691ed1159a787708679070026b442da
|
7
|
+
data.tar.gz: 747442104db1ef7dfbfd0c8adf19f9a9deab687fec3f9fe5c09f16f24dbad18a563c74b3199e5f0c7127dbd0025f72bb82e07b05ada3fb3b90d7754a183662b6
|
data/bin/onevcenter
CHANGED
@@ -51,7 +51,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
51
51
|
:short => "-o object",
|
52
52
|
:large => "--object object ",
|
53
53
|
:format => String,
|
54
|
-
:description => "vCenter object"
|
54
|
+
:description => "vCenter object: [datastores, templates, networks, datastores, images]"
|
55
55
|
}
|
56
56
|
|
57
57
|
HOST = {
|
@@ -128,8 +128,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
128
128
|
############################################################################
|
129
129
|
list_desc = <<-EOT.unindent
|
130
130
|
Show a list with unimported vCenter objects
|
131
|
-
EOT
|
132
131
|
|
132
|
+
Examples:
|
133
|
+
- listing available templates:
|
134
|
+
|
135
|
+
onevcenter list -o templates -h <host_id>
|
136
|
+
|
137
|
+
- listing available images:
|
138
|
+
|
139
|
+
onevcenter list -o datastores -h <host_id> -d <ds-img_id>
|
140
|
+
EOT
|
133
141
|
command :list, list_desc, :options=>[ OBJECT, HOST, DATASTORE, VCENTER, USER, PASS ] do
|
134
142
|
begin
|
135
143
|
args = helper.parse_opts(options)
|
@@ -148,6 +156,19 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
148
156
|
|
149
157
|
import_desc = <<-EOT.unindent
|
150
158
|
Import the the desired vCenter object
|
159
|
+
|
160
|
+
Examples:
|
161
|
+
- importing first datastore
|
162
|
+
|
163
|
+
onevcenter list -o templates -h <host_id>
|
164
|
+
|
165
|
+
- importing 2 concrete templates:
|
166
|
+
|
167
|
+
onevcenter import "vm-1252, vm-553, vm-1248" -o templates -h <host_id>
|
168
|
+
|
169
|
+
- importing a image range:
|
170
|
+
|
171
|
+
onevcenter import 0..10 -o images -h <host_id> -d <ds-img_id>
|
151
172
|
EOT
|
152
173
|
|
153
174
|
command :import, import_desc, [:oid, nil], :options=>[ OBJECT, HOST, DATASTORE ] do
|
@@ -194,6 +215,11 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
194
215
|
############################################################################
|
195
216
|
host_desc = <<-EOT.unindent
|
196
217
|
Import vCenter clusters as OpenNebula hosts
|
218
|
+
|
219
|
+
Example:
|
220
|
+
- Get available clusters:
|
221
|
+
|
222
|
+
onevcenter hosts --vcenter <vcenter> --vuser <vcenter_user> --vpass <password>
|
197
223
|
EOT
|
198
224
|
command :hosts, host_desc, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
199
225
|
con_ops = helper.connection_options("Hosts", options)
|
data/bin/onezone
CHANGED
@@ -36,6 +36,14 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
36
36
|
|
37
37
|
helper = OneZoneHelper.new
|
38
38
|
|
39
|
+
ENDPOINT = {
|
40
|
+
:name => "keep",
|
41
|
+
:short => "-k",
|
42
|
+
:large => "--keep",
|
43
|
+
:description => "Don't overwrite endpoint file located in home folder, use it as a temporary zone.",
|
44
|
+
:format => String
|
45
|
+
}
|
46
|
+
|
39
47
|
before_proc do
|
40
48
|
helper.set_client(options)
|
41
49
|
end
|
@@ -191,7 +199,11 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
191
199
|
Set shell session access point for the CLI to the given Zone
|
192
200
|
EOT
|
193
201
|
|
194
|
-
command :set, set_desc,:zoneid do
|
195
|
-
|
202
|
+
command :set, set_desc,:zoneid, :options=>ENDPOINT do
|
203
|
+
if options.has_key? :keep
|
204
|
+
helper.set_zone(args[0], true)
|
205
|
+
else
|
206
|
+
helper.set_zone(args[0], false)
|
207
|
+
end
|
196
208
|
end
|
197
209
|
end
|
data/lib/cli_helper.rb
CHANGED
@@ -132,16 +132,21 @@ module CLIHelper
|
|
132
132
|
# Print header
|
133
133
|
def CLIHelper.print_header(str, underline=true)
|
134
134
|
if $stdout.tty?
|
135
|
-
|
136
|
-
scr_underline if underline
|
137
|
-
print str
|
138
|
-
scr_restore
|
135
|
+
print_tty_header(str, underline)
|
139
136
|
else
|
140
137
|
print str
|
141
138
|
end
|
142
139
|
puts
|
143
140
|
end
|
144
141
|
|
142
|
+
# Pretty print header
|
143
|
+
def CLIHelper.print_tty_header(str, underline=true)
|
144
|
+
scr_bold
|
145
|
+
scr_underline if underline
|
146
|
+
print str
|
147
|
+
scr_restore
|
148
|
+
end
|
149
|
+
|
145
150
|
module HashWithSearch
|
146
151
|
def dsearch(path)
|
147
152
|
stems=path.split('/')
|
@@ -256,10 +261,18 @@ module CLIHelper
|
|
256
261
|
end
|
257
262
|
end
|
258
263
|
|
264
|
+
def print_tty_header
|
265
|
+
CLIHelper.print_tty_header(header_str)
|
266
|
+
puts
|
267
|
+
end
|
268
|
+
|
259
269
|
private
|
260
270
|
|
261
271
|
def print_table(data, options)
|
262
|
-
|
272
|
+
if !options[:csv] && !options[:noheader]
|
273
|
+
CLIHelper.print_header(header_str)
|
274
|
+
end
|
275
|
+
|
263
276
|
data ? print_data(data, options) : puts
|
264
277
|
end
|
265
278
|
|
data/lib/command_parser.rb
CHANGED
@@ -575,8 +575,11 @@ module CommandParser
|
|
575
575
|
}
|
576
576
|
|
577
577
|
unless argument
|
578
|
-
|
579
|
-
|
578
|
+
if error_msg
|
579
|
+
puts error_msg
|
580
|
+
else
|
581
|
+
puts "command #{name}: argument #{id} must be one of #{format.join(', ')}"
|
582
|
+
end
|
580
583
|
exit -1
|
581
584
|
end
|
582
585
|
|
data/lib/one_helper.rb
CHANGED
@@ -16,6 +16,9 @@
|
|
16
16
|
|
17
17
|
require 'cli_helper'
|
18
18
|
|
19
|
+
require 'open3'
|
20
|
+
require 'io/console'
|
21
|
+
|
19
22
|
begin
|
20
23
|
require 'opennebula'
|
21
24
|
rescue Exception => e
|
@@ -505,51 +508,255 @@ EOT
|
|
505
508
|
end
|
506
509
|
end
|
507
510
|
|
511
|
+
#-----------------------------------------------------------------------
|
512
|
+
# List pool functions
|
513
|
+
#-----------------------------------------------------------------------
|
514
|
+
def start_pager
|
515
|
+
pager = ENV['ONE_PAGER'] || 'less'
|
508
516
|
|
509
|
-
|
510
|
-
|
511
|
-
table = format_pool(options)
|
517
|
+
# Start pager, defaults to less
|
518
|
+
p_r, p_w = IO.pipe
|
512
519
|
|
513
|
-
|
514
|
-
|
520
|
+
lpid = fork do
|
521
|
+
$stdin.reopen(p_r)
|
522
|
+
|
523
|
+
p_r.close
|
524
|
+
p_w.close
|
525
|
+
|
526
|
+
Kernel.select [$stdin]
|
527
|
+
|
528
|
+
exec([pager, pager])
|
515
529
|
end
|
530
|
+
|
531
|
+
# Send listing to pager pipe
|
532
|
+
$stdout.close
|
533
|
+
$stdout = p_w.dup
|
516
534
|
|
517
|
-
|
535
|
+
p_w.close
|
536
|
+
p_r.close
|
537
|
+
|
538
|
+
return lpid
|
539
|
+
end
|
518
540
|
|
519
|
-
|
541
|
+
def stop_pager(lpid)
|
542
|
+
$stdout.close
|
543
|
+
|
544
|
+
begin
|
545
|
+
Process.wait(lpid)
|
546
|
+
rescue Errno::ECHILD
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
def print_page(pool, options)
|
551
|
+
page = nil
|
520
552
|
|
521
553
|
if options[:xml]
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
554
|
+
elements = 0
|
555
|
+
page = ""
|
556
|
+
|
557
|
+
pool.each {|e|
|
558
|
+
elements += 1
|
559
|
+
page << e.to_xml(true) << "\n"
|
560
|
+
}
|
526
561
|
else
|
527
|
-
|
562
|
+
|
563
|
+
pname = pool.pool_name
|
564
|
+
ename = pool.element_name
|
528
565
|
|
529
|
-
|
530
|
-
|
531
|
-
array=pool.get_hash
|
532
|
-
return -1, array.message if OpenNebula.is_error?(array)
|
566
|
+
page = pool.to_hash
|
567
|
+
elems = page["#{pname}"]["#{ename}"]
|
533
568
|
|
534
|
-
|
535
|
-
|
569
|
+
if elems.class == Array
|
570
|
+
elements = elems.length
|
536
571
|
else
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
572
|
+
elements = 1
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
return elements, page
|
577
|
+
end
|
578
|
+
|
579
|
+
#-----------------------------------------------------------------------
|
580
|
+
# List the pool in table form, it uses pagination for interactive
|
581
|
+
# output
|
582
|
+
#-----------------------------------------------------------------------
|
583
|
+
def list_pool_table(table, pool, options, filter_flag)
|
584
|
+
if $stdout.isatty
|
585
|
+
size = $stdout.winsize[0] - 1
|
586
|
+
|
587
|
+
# ----------- First page, check if pager is needed -------------
|
588
|
+
rc = pool.get_page(size, 0)
|
589
|
+
ps = ""
|
590
|
+
|
591
|
+
return -1, rc.message if OpenNebula.is_error?(rc)
|
592
|
+
|
593
|
+
elements, hash = print_page(pool, options)
|
594
|
+
|
595
|
+
ppid = -1
|
596
|
+
|
597
|
+
if elements >= size
|
598
|
+
ppid = start_pager
|
599
|
+
end
|
600
|
+
|
601
|
+
table.show(hash, options)
|
602
|
+
|
603
|
+
if elements < size
|
604
|
+
return 0
|
605
|
+
elsif !pool.is_paginated?
|
606
|
+
stop_pager(ppid)
|
607
|
+
return 0
|
608
|
+
end
|
609
|
+
|
610
|
+
# ------- Rest of the pages in the pool, piped to pager --------
|
611
|
+
current = size
|
612
|
+
|
613
|
+
options[:noheader] = true
|
614
|
+
|
615
|
+
loop do
|
616
|
+
rc = pool.get_page(size, current)
|
617
|
+
|
618
|
+
return -1, rc.message if OpenNebula.is_error?(rc)
|
619
|
+
|
620
|
+
current += size
|
621
|
+
|
622
|
+
begin
|
623
|
+
Process.waitpid(ppid, Process::WNOHANG)
|
624
|
+
rescue Errno::ECHILD
|
625
|
+
break
|
546
626
|
end
|
547
627
|
|
548
|
-
|
628
|
+
elements, hash = print_page(pool, options)
|
629
|
+
|
630
|
+
table.show(hash, options)
|
631
|
+
|
632
|
+
$stdout.flush
|
633
|
+
|
634
|
+
break if elements < size
|
635
|
+
end
|
636
|
+
|
637
|
+
stop_pager(ppid)
|
638
|
+
else
|
639
|
+
array = pool.get_hash
|
640
|
+
return -1, array.message if OpenNebula.is_error?(array)
|
641
|
+
|
642
|
+
rname = self.class.rname
|
643
|
+
elements = array["#{rname}_POOL"][rname]
|
644
|
+
|
645
|
+
if options[:ids] && elements
|
646
|
+
elements.reject! do |element|
|
647
|
+
!options[:ids].include?(element['ID'].to_i)
|
648
|
+
end
|
649
|
+
end
|
650
|
+
|
651
|
+
table.show(array, options)
|
652
|
+
end
|
653
|
+
|
654
|
+
return 0
|
655
|
+
end
|
656
|
+
|
657
|
+
#-----------------------------------------------------------------------
|
658
|
+
# List pool in XML format, pagination is used in interactive output
|
659
|
+
#-----------------------------------------------------------------------
|
660
|
+
def list_pool_xml(pool, options, filter_flag)
|
661
|
+
if $stdout.isatty
|
662
|
+
size = $stdout.winsize[0] - 1
|
663
|
+
|
664
|
+
# ----------- First page, check if pager is needed -------------
|
665
|
+
rc = pool.get_page(size, 0)
|
666
|
+
ps = ""
|
667
|
+
|
668
|
+
return -1, rc.message if OpenNebula.is_error?(rc)
|
669
|
+
|
670
|
+
pname = pool.pool_name
|
671
|
+
|
672
|
+
elements, page = print_page(pool, options)
|
673
|
+
|
674
|
+
ppid = -1
|
675
|
+
|
676
|
+
if elements >= size
|
677
|
+
ppid = start_pager
|
678
|
+
end
|
679
|
+
|
680
|
+
puts "<#{pname}>"
|
681
|
+
|
682
|
+
puts page
|
683
|
+
|
684
|
+
if elements < size
|
685
|
+
puts "</#{pname}>"
|
686
|
+
return 0
|
549
687
|
end
|
550
688
|
|
689
|
+
# ------- Rest of the pages in the pool, piped to pager --------
|
690
|
+
current = size
|
691
|
+
|
692
|
+
loop do
|
693
|
+
rc = pool.get_page(size, current)
|
694
|
+
|
695
|
+
return -1, rc.message if OpenNebula.is_error?(rc)
|
696
|
+
|
697
|
+
current += size
|
698
|
+
|
699
|
+
elements, page = print_page(pool, options)
|
700
|
+
|
701
|
+
puts page
|
702
|
+
|
703
|
+
$stdout.flush
|
704
|
+
|
705
|
+
break if elements < size
|
706
|
+
end
|
707
|
+
|
708
|
+
puts "</#{pname}>"
|
709
|
+
|
710
|
+
stop_pager(ppid)
|
711
|
+
else
|
712
|
+
rc = pool.info
|
713
|
+
|
714
|
+
return -1, rc.message if OpenNebula.is_error?(rc)
|
715
|
+
|
716
|
+
puts pool.to_xml(true)
|
717
|
+
end
|
718
|
+
|
719
|
+
return 0
|
720
|
+
end
|
721
|
+
|
722
|
+
#-----------------------------------------------------------------------
|
723
|
+
# List pool table in top-like form
|
724
|
+
#-----------------------------------------------------------------------
|
725
|
+
def list_pool_top(table, pool, options)
|
726
|
+
table.top(options) {
|
727
|
+
array = pool.get_hash
|
728
|
+
|
729
|
+
return -1, array.message if OpenNebula.is_error?(array)
|
730
|
+
|
731
|
+
array
|
732
|
+
}
|
733
|
+
|
734
|
+
return 0
|
735
|
+
end
|
736
|
+
|
737
|
+
|
738
|
+
def list_pool(options, top=false, filter_flag=nil)
|
739
|
+
table = format_pool(options)
|
740
|
+
|
741
|
+
if options[:describe]
|
742
|
+
table.describe_columns
|
743
|
+
|
551
744
|
return 0
|
552
745
|
end
|
746
|
+
|
747
|
+
filter_flag ||= OpenNebula::Pool::INFO_ALL
|
748
|
+
|
749
|
+
pool = factory_pool(filter_flag)
|
750
|
+
|
751
|
+
if top
|
752
|
+
return list_pool_top(table, pool, options)
|
753
|
+
elsif options[:xml]
|
754
|
+
return list_pool_xml(pool, options, filter_flag)
|
755
|
+
else
|
756
|
+
return list_pool_table(table, pool, options, filter_flag)
|
757
|
+
end
|
758
|
+
|
759
|
+
return 0
|
553
760
|
end
|
554
761
|
|
555
762
|
def show_resource(id, options)
|
@@ -834,8 +1041,11 @@ EOT
|
|
834
1041
|
end
|
835
1042
|
end
|
836
1043
|
|
837
|
-
def OpenNebulaHelper.time_to_str(time, print_seconds=true,
|
838
|
-
|
1044
|
+
def OpenNebulaHelper.time_to_str(time, print_seconds=true,
|
1045
|
+
print_hours=true, print_years=false)
|
1046
|
+
|
1047
|
+
value = time.to_i
|
1048
|
+
|
839
1049
|
if value==0
|
840
1050
|
value='-'
|
841
1051
|
else
|
@@ -111,12 +111,18 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
|
|
111
111
|
|
112
112
|
if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
|
113
113
|
q['VM_QUOTA']['VM'] = {
|
114
|
-
"VMS"
|
115
|
-
"VMS_USED"
|
116
|
-
"CPU"
|
117
|
-
"CPU_USED"
|
118
|
-
"MEMORY"
|
119
|
-
"MEMORY_USED"
|
114
|
+
"VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
115
|
+
"VMS_USED" => "0",
|
116
|
+
"CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
117
|
+
"CPU_USED" => "0",
|
118
|
+
"MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
119
|
+
"MEMORY_USED" => "0",
|
120
|
+
"RUNNING_VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
121
|
+
"RUNNING_VMS_USED" => "0",
|
122
|
+
"RUNNING_CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
123
|
+
"RUNNING_CPU_USED" => "0",
|
124
|
+
"RUNNING_MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
125
|
+
"RUNNING_MEMORY_USED" => "0",
|
120
126
|
"SYSTEM_DISK_SIZE" => OneQuotaHelper::LIMIT_DEFAULT,
|
121
127
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
122
128
|
}
|
@@ -148,12 +154,18 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
|
|
148
154
|
|
149
155
|
if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
|
150
156
|
q['VM_QUOTA']['VM'] = {
|
151
|
-
"VMS"
|
152
|
-
"VMS_USED"
|
153
|
-
"CPU"
|
154
|
-
"CPU_USED"
|
155
|
-
"MEMORY"
|
156
|
-
"MEMORY_USED"
|
157
|
+
"VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
158
|
+
"VMS_USED" => "0",
|
159
|
+
"CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
160
|
+
"CPU_USED" => "0",
|
161
|
+
"MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
162
|
+
"MEMORY_USED" => "0",
|
163
|
+
"RUNNING_VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
164
|
+
"RUNNING_VMS_USED" => "0",
|
165
|
+
"RUNNING_CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
166
|
+
"RUNNING_CPU_USED" => "0",
|
167
|
+
"RUNNING_MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
168
|
+
"RUNNING_MEMORY_USED" => "0",
|
157
169
|
"SYSTEM_DISK_SIZE" => OneQuotaHelper::LIMIT_DEFAULT,
|
158
170
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
159
171
|
}
|
@@ -188,12 +200,18 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
|
|
188
200
|
|
189
201
|
if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
|
190
202
|
q['VM_QUOTA']['VM'] = {
|
191
|
-
"VMS"
|
192
|
-
"VMS_USED"
|
193
|
-
"CPU"
|
194
|
-
"CPU_USED"
|
195
|
-
"MEMORY"
|
196
|
-
"MEMORY_USED"
|
203
|
+
"VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
204
|
+
"VMS_USED" => "0",
|
205
|
+
"CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
206
|
+
"CPU_USED" => "0",
|
207
|
+
"MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
208
|
+
"MEMORY_USED" => "0",
|
209
|
+
"RUNNING_VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
210
|
+
"RUNNING_VMS_USED" => "0",
|
211
|
+
"RUNNING_CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
212
|
+
"RUNNING_CPU_USED" => "0",
|
213
|
+
"RUNNING_MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
214
|
+
"RUNNING_MEMORY_USED" => "0",
|
197
215
|
"SYSTEM_DISK_SIZE" => OneQuotaHelper::LIMIT_DEFAULT,
|
198
216
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
199
217
|
}
|
@@ -296,6 +296,9 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
296
296
|
# Skip this host from remote syncing if it's OFFLINE
|
297
297
|
next if Host::HOST_STATES[state.to_i] == 'OFFLINE'
|
298
298
|
|
299
|
+
# Skip this host if it is a vCenter cluster
|
300
|
+
next if vm_mad == "vcenter"
|
301
|
+
|
299
302
|
host_version=host['TEMPLATE/VERSION']
|
300
303
|
|
301
304
|
begin
|
@@ -35,8 +35,11 @@ class OneQuotaHelper
|
|
35
35
|
#
|
36
36
|
# VM = [
|
37
37
|
# VMS = <Max. number of VMs>
|
38
|
+
# RUNNING_VMS = <Max. number of running VMs>
|
38
39
|
# MEMORY = <Max. allocated memory (MB)>
|
40
|
+
# RUNNING_MEMORY = <Max. running memory (MB)>
|
39
41
|
# CPU = <Max. allocated CPU>
|
42
|
+
# RUNNING_CPU = <Max. running CPU>
|
40
43
|
# SYSTEM_DISK_SIZE = <Max. allocated system disk (MB)>
|
41
44
|
# ]
|
42
45
|
#
|
@@ -196,7 +199,7 @@ class OneQuotaHelper
|
|
196
199
|
|
197
200
|
puts
|
198
201
|
|
199
|
-
CLIHelper.print_header(str_h1 % "
|
202
|
+
CLIHelper.print_header(str_h1 % "VMS USAGE & QUOTAS",false)
|
200
203
|
|
201
204
|
puts
|
202
205
|
|
@@ -210,12 +213,18 @@ class OneQuotaHelper
|
|
210
213
|
limit = LIMIT_DEFAULT
|
211
214
|
|
212
215
|
vm_quotas = [{
|
213
|
-
"VMS"
|
214
|
-
"VMS_USED"
|
215
|
-
"CPU"
|
216
|
-
"CPU_USED"
|
217
|
-
"MEMORY"
|
218
|
-
"MEMORY_USED"
|
216
|
+
"VMS" => limit,
|
217
|
+
"VMS_USED" => "0",
|
218
|
+
"CPU" => limit,
|
219
|
+
"CPU_USED" => "0",
|
220
|
+
"MEMORY" => limit,
|
221
|
+
"MEMORY_USED" => "0",
|
222
|
+
"RUNNING_VMS" => limit,
|
223
|
+
"RUNNING_VMS_USED" => "0",
|
224
|
+
"RUNNING_CPU" => limit,
|
225
|
+
"RUNNING_CPU_USED" => "0",
|
226
|
+
"RUNNING_MEMORY" => limit,
|
227
|
+
"RUNNING_MEMORY_USED" => "0",
|
219
228
|
"SYSTEM_DISK_SIZE" => limit,
|
220
229
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
221
230
|
}]
|
@@ -223,7 +232,7 @@ class OneQuotaHelper
|
|
223
232
|
|
224
233
|
if !vm_quotas[0].nil?
|
225
234
|
CLIHelper::ShowTable.new(nil, self) do
|
226
|
-
column :"
|
235
|
+
column :"VMS", "", :right, :size=>17 do |d|
|
227
236
|
if !d.nil?
|
228
237
|
elem = 'VMS'
|
229
238
|
limit = d[elem]
|
@@ -297,11 +306,87 @@ class OneQuotaHelper
|
|
297
306
|
puts
|
298
307
|
end
|
299
308
|
|
309
|
+
CLIHelper.print_header(str_h1 % "VMS USAGE & QUOTAS - RUNNING",false)
|
310
|
+
|
311
|
+
puts
|
312
|
+
|
313
|
+
if !vm_quotas[0].nil?
|
314
|
+
CLIHelper::ShowTable.new(nil, self) do
|
315
|
+
column :"RUNNING VMS", "", :right, :size=>17 do |d|
|
316
|
+
if !d.nil?
|
317
|
+
elem = 'RUNNING_VMS'
|
318
|
+
limit = d[elem] || LIMIT_UNLIMITED
|
319
|
+
limit = helper.get_default_limit(
|
320
|
+
limit, "VM_QUOTA/VM/#{elem}")
|
321
|
+
|
322
|
+
if d["RUNNING_VMS_USED"].nil?
|
323
|
+
d["RUNNING_VMS_USED"] = 0
|
324
|
+
end
|
325
|
+
|
326
|
+
if limit == LIMIT_UNLIMITED
|
327
|
+
"%7d / -" % [d["RUNNING_VMS_USED"]]
|
328
|
+
else
|
329
|
+
"%7d / %7d" % [d["RUNNING_VMS_USED"], limit]
|
330
|
+
end
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
column :"RUNNING MEMORY", "", :right, :size=>20 do |d|
|
335
|
+
if !d.nil?
|
336
|
+
elem = 'RUNNING_MEMORY'
|
337
|
+
limit = d[elem] || LIMIT_UNLIMITED
|
338
|
+
limit = helper.get_default_limit(
|
339
|
+
limit, "VM_QUOTA/VM/#{elem}")
|
340
|
+
|
341
|
+
if d["RUNNING_MEMORY_USED"].nil?
|
342
|
+
d["RUNNING_MEMORY_USED"] = 0
|
343
|
+
end
|
344
|
+
|
345
|
+
if limit == LIMIT_UNLIMITED
|
346
|
+
"%8s / -" % [
|
347
|
+
OpenNebulaHelper.unit_to_str(d["RUNNING_MEMORY_USED"].to_i,{},"M")
|
348
|
+
]
|
349
|
+
else
|
350
|
+
"%8s / %8s" % [
|
351
|
+
OpenNebulaHelper.unit_to_str(d["RUNNING_MEMORY_USED"].to_i,{},"M"),
|
352
|
+
OpenNebulaHelper.unit_to_str(limit.to_i,{},"M")
|
353
|
+
]
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
column :"RUNNING CPU", "", :right, :size=>20 do |d|
|
359
|
+
if !d.nil?
|
360
|
+
elem = 'RUNNING_CPU'
|
361
|
+
limit = d[elem] || LIMIT_UNLIMITED
|
362
|
+
limit = helper.get_default_limit(
|
363
|
+
limit, "VM_QUOTA/VM/#{elem}")
|
364
|
+
|
365
|
+
if d["RUNNING_CPU_USED"].nil?
|
366
|
+
d["RUNNING_CPU_USED"] = 0
|
367
|
+
end
|
368
|
+
|
369
|
+
if limit == LIMIT_UNLIMITED
|
370
|
+
"%8.2f / -" % [d["RUNNING_CPU_USED"]]
|
371
|
+
else
|
372
|
+
"%8.2f / %8.2f" % [d["RUNNING_CPU_USED"], limit]
|
373
|
+
end
|
374
|
+
end
|
375
|
+
end
|
376
|
+
end.show(vm_quotas, {})
|
377
|
+
|
378
|
+
puts
|
379
|
+
end
|
380
|
+
|
381
|
+
CLIHelper.print_header(str_h1 % "DATASTORE USAGE & QUOTAS",false)
|
382
|
+
|
383
|
+
puts
|
384
|
+
|
300
385
|
ds_quotas = [qh['DATASTORE_QUOTA']['DATASTORE']].flatten
|
301
386
|
|
302
387
|
if !ds_quotas[0].nil?
|
303
388
|
CLIHelper::ShowTable.new(nil, self) do
|
304
|
-
column :"
|
389
|
+
column :"ID", "", :size=>12 do |d|
|
305
390
|
d["ID"] if !d.nil?
|
306
391
|
end
|
307
392
|
|
@@ -344,11 +429,15 @@ class OneQuotaHelper
|
|
344
429
|
puts
|
345
430
|
end
|
346
431
|
|
432
|
+
CLIHelper.print_header(str_h1 % "NETWORK USAGE & QUOTAS",false)
|
433
|
+
|
434
|
+
puts
|
435
|
+
|
347
436
|
net_quotas = [qh['NETWORK_QUOTA']['NETWORK']].flatten
|
348
437
|
|
349
438
|
if !net_quotas[0].nil?
|
350
439
|
CLIHelper::ShowTable.new(nil, self) do
|
351
|
-
column :"
|
440
|
+
column :"ID", "", :size=>12 do |d|
|
352
441
|
d["ID"] if !d.nil?
|
353
442
|
end
|
354
443
|
|
@@ -371,11 +460,15 @@ class OneQuotaHelper
|
|
371
460
|
puts
|
372
461
|
end
|
373
462
|
|
463
|
+
CLIHelper.print_header(str_h1 % "IMAGE USAGE & QUOTAS",false)
|
464
|
+
|
465
|
+
puts
|
466
|
+
|
374
467
|
image_quotas = [qh['IMAGE_QUOTA']['IMAGE']].flatten
|
375
468
|
|
376
469
|
if !image_quotas[0].nil?
|
377
470
|
CLIHelper::ShowTable.new(nil, self) do
|
378
|
-
column :"
|
471
|
+
column :"ID", "", :size=>12 do |d|
|
379
472
|
d["ID"] if !d.nil?
|
380
473
|
end
|
381
474
|
|
@@ -294,12 +294,18 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
294
294
|
|
295
295
|
if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
|
296
296
|
q['VM_QUOTA']['VM'] = {
|
297
|
-
"VMS"
|
298
|
-
"VMS_USED"
|
299
|
-
"CPU"
|
300
|
-
"CPU_USED"
|
301
|
-
"MEMORY"
|
302
|
-
"MEMORY_USED"
|
297
|
+
"VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
298
|
+
"VMS_USED" => "0",
|
299
|
+
"CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
300
|
+
"CPU_USED" => "0",
|
301
|
+
"MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
302
|
+
"MEMORY_USED" => "0",
|
303
|
+
"RUNNING_VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
304
|
+
"RUNNING_VMS_USED" => "0",
|
305
|
+
"RUNNING_CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
306
|
+
"RUNNING_CPU_USED" => "0",
|
307
|
+
"RUNNING_MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
308
|
+
"RUNNING_MEMORY_USED" => "0",
|
303
309
|
"SYSTEM_DISK_SIZE" => OneQuotaHelper::LIMIT_DEFAULT,
|
304
310
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
305
311
|
}
|
@@ -333,12 +339,18 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
333
339
|
|
334
340
|
if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
|
335
341
|
q['VM_QUOTA']['VM'] = {
|
336
|
-
"VMS"
|
337
|
-
"VMS_USED"
|
338
|
-
"CPU"
|
339
|
-
"CPU_USED"
|
340
|
-
"MEMORY"
|
341
|
-
"MEMORY_USED"
|
342
|
+
"VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
343
|
+
"VMS_USED" => "0",
|
344
|
+
"CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
345
|
+
"CPU_USED" => "0",
|
346
|
+
"MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
347
|
+
"MEMORY_USED" => "0",
|
348
|
+
"RUNNING_VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
349
|
+
"RUNNING_VMS_USED" => "0",
|
350
|
+
"RUNNING_CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
351
|
+
"RUNNING_CPU_USED" => "0",
|
352
|
+
"RUNNING_MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
353
|
+
"RUNNING_MEMORY_USED" => "0",
|
342
354
|
"SYSTEM_DISK_SIZE" => OneQuotaHelper::LIMIT_DEFAULT,
|
343
355
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
344
356
|
}
|
@@ -375,12 +387,18 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
|
|
375
387
|
|
376
388
|
if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
|
377
389
|
q['VM_QUOTA']['VM'] = {
|
378
|
-
"VMS"
|
379
|
-
"VMS_USED"
|
380
|
-
"CPU"
|
381
|
-
"CPU_USED"
|
382
|
-
"MEMORY"
|
383
|
-
"MEMORY_USED"
|
390
|
+
"VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
391
|
+
"VMS_USED" => "0",
|
392
|
+
"CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
393
|
+
"CPU_USED" => "0",
|
394
|
+
"MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
395
|
+
"MEMORY_USED" => "0",
|
396
|
+
"RUNNING_VMS" => OneQuotaHelper::LIMIT_DEFAULT,
|
397
|
+
"RUNNING_VMS_USED" => "0",
|
398
|
+
"RUNNING_CPU" => OneQuotaHelper::LIMIT_DEFAULT,
|
399
|
+
"RUNNING_CPU_USED" => "0",
|
400
|
+
"RUNNING_MEMORY" => OneQuotaHelper::LIMIT_DEFAULT,
|
401
|
+
"RUNNING_MEMORY_USED" => "0",
|
384
402
|
"SYSTEM_DISK_SIZE" => OneQuotaHelper::LIMIT_DEFAULT,
|
385
403
|
"SYSTEM_DISK_SIZE_USED" => "0"
|
386
404
|
}
|
@@ -120,6 +120,8 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
|
|
120
120
|
# @param type [String] String representing the vCenter resource
|
121
121
|
#
|
122
122
|
def set_object(type)
|
123
|
+
raise "you need to use -o option!" unless type
|
124
|
+
|
123
125
|
type = type.downcase
|
124
126
|
if (type == "datastores")
|
125
127
|
@vobject = VOBJECT::DATASTORE
|
@@ -83,25 +83,28 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
|
|
83
83
|
table
|
84
84
|
end
|
85
85
|
|
86
|
-
def set_zone(zone_id)
|
87
|
-
|
88
|
-
|
86
|
+
def set_zone(zone_id, temporary_zone)
|
87
|
+
zone = factory(zone_id)
|
88
|
+
rc = zone.info
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
if !zone['TEMPLATE/ENDPOINT']
|
95
|
-
return -1, "No Endpoint defined for Zone #{zone_id}"
|
96
|
-
end
|
90
|
+
if OpenNebula.is_error?(rc)
|
91
|
+
return -1, rc.message
|
92
|
+
end
|
97
93
|
|
98
|
-
|
99
|
-
|
100
|
-
|
94
|
+
if !zone['TEMPLATE/ENDPOINT']
|
95
|
+
return -1, "No Endpoint defined for Zone #{zone_id}"
|
96
|
+
end
|
101
97
|
|
102
|
-
|
103
|
-
|
104
|
-
|
98
|
+
if temporary_zone
|
99
|
+
puts "Type: export ONE_XMLRPC=#{zone['TEMPLATE/ENDPOINT']}"
|
100
|
+
else
|
101
|
+
File.open(ENV['HOME']+"/.one/one_endpoint", 'w'){|f|
|
102
|
+
f.puts zone['TEMPLATE/ENDPOINT']
|
103
|
+
}
|
104
|
+
puts "Endpoint changed to \"#{zone['TEMPLATE/ENDPOINT']}\" in " <<
|
105
|
+
"#{ENV['HOME']}/.one/one_endpoint"
|
106
|
+
end
|
107
|
+
return 0
|
105
108
|
end
|
106
109
|
|
107
110
|
private
|
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.6.
|
4
|
+
version: 5.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenNebula
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-20 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.6.
|
19
|
+
version: 5.6.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: 5.6.
|
26
|
+
version: 5.6.1
|
27
27
|
description: Commands used to talk to OpenNebula
|
28
28
|
email: contact@opennebula.org
|
29
29
|
executables:
|