rbvmomi 1.1.2 → 1.1.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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.2
1
+ 1.1.3
@@ -0,0 +1,63 @@
1
+ # @todo Retrieve ESX log bundles when run against VC.
2
+ require 'trollop'
3
+ require 'rbvmomi'
4
+ require 'rbvmomi/trollop'
5
+
6
+ VIM = RbVmomi::VIM
7
+ DEFAULT_SERVER_PLACEHOLDER = '0.0.0.0'
8
+
9
+ opts = Trollop.options do
10
+ banner <<-EOS
11
+ Generate and retrieve a log bundle.
12
+
13
+ Usage:
14
+ logbundle.rb [options] dest
15
+
16
+ dest must be a directory.
17
+
18
+ VIM connection options:
19
+ EOS
20
+
21
+ rbvmomi_connection_opts
22
+
23
+ text <<-EOS
24
+
25
+ Other options:
26
+ EOS
27
+ end
28
+
29
+ Trollop.die("must specify host") unless opts[:host]
30
+ dest = ARGV[0] or abort("must specify destination directory")
31
+
32
+ abort "destination is not a directory" unless File.directory? dest
33
+
34
+ vim = VIM.connect opts
35
+ is_vc = vim.serviceContent.about.apiType == 'VirtualCenter'
36
+ diagMgr = vim.serviceContent.diagnosticManager
37
+
38
+ bundles =
39
+ begin
40
+ diagMgr.GenerateLogBundles_Task(includeDefault: true).wait_for_completion
41
+ rescue VIM::TaskInProgress
42
+ $!.task.wait_for_completion
43
+ end
44
+
45
+ bundles.each do |b|
46
+ uri = URI.parse(b.url.sub('*', DEFAULT_SERVER_PLACEHOLDER))
47
+ dest_path = File.join(dest, File.basename(uri.path))
48
+ puts "downloading bundle #{b.url} to #{dest_path}"
49
+ if uri.host == DEFAULT_SERVER_PLACEHOLDER
50
+ vim.http.request_get(uri.path) do |res|
51
+ File.open dest_path, 'w' do |io|
52
+ res.read_body do |data|
53
+ io.write data
54
+ $stdout.write '.'
55
+ $stdout.flush
56
+ end
57
+ end
58
+ puts
59
+ end
60
+ else
61
+ puts 'not supported yet'
62
+ end
63
+ end
@@ -0,0 +1,60 @@
1
+ # Translation of example 2-2 from the vSphere SDK for Perl Programming Guide
2
+ require 'trollop'
3
+ require 'rbvmomi'
4
+ require 'rbvmomi/trollop'
5
+
6
+ VIM = RbVmomi::VIM
7
+
8
+ opts = Trollop.options do
9
+ banner <<-EOS
10
+ Follow a log file.
11
+
12
+ Usage:
13
+ logtail.rb [options] [logKey]
14
+
15
+ If logKey is not provided the list of available log keys will be printed and
16
+ the program will exit.
17
+
18
+ VIM connection options:
19
+ EOS
20
+
21
+ rbvmomi_connection_opts
22
+
23
+ text <<-EOS
24
+
25
+ Other options:
26
+ EOS
27
+ end
28
+
29
+ Trollop.die("must specify host") unless opts[:host]
30
+ logKey = ARGV[0]
31
+
32
+ vim = VIM.connect opts
33
+ diagMgr = vim.serviceContent.diagnosticManager
34
+
35
+ if not logKey
36
+ puts "Available logs:"
37
+ diagMgr.QueryDescriptions.each do |desc|
38
+ puts "#{desc.key}: #{desc.info.label}"
39
+ end
40
+ exit 0
41
+ end
42
+
43
+ # Obtain the last line of the logfile by setting an arbitrarily large
44
+ # line number as the starting point
45
+ log = diagMgr.BrowseDiagnosticLog(key: logKey, start: 999999999)
46
+ lineEnd = log.lineEnd
47
+
48
+ # Get the last 5 lines of the log first, and then check every 2 seconds
49
+ # to see if the log size has increased.
50
+ start = lineEnd - 5
51
+ while true
52
+ log = diagMgr.BrowseDiagnosticLog(key: logKey, start: start)
53
+ if log.lineStart != 0
54
+ log.lineText.each do |l|
55
+ puts l
56
+ end
57
+ end
58
+ start = log.lineEnd + 1
59
+ sleep 2
60
+ end
data/examples/run.sh CHANGED
@@ -35,5 +35,7 @@ echo "Listing extraConfig"
35
35
  $RUBY $EXAMPLES/extraConfig.rb foo list | grep guestinfo.bar
36
36
  echo Powering off VM
37
37
  $RUBY $EXAMPLES/power.rb off foo
38
+ echo Querying datastore utilization
39
+ $RUBY $EXAMPLES/vdf.rb
38
40
  echo Destroying VM
39
41
  $RUBY $EXAMPLES/power.rb destroy foo
data/examples/vdf.rb ADDED
@@ -0,0 +1,81 @@
1
+ # Translation of vGhetto vdf, originally by William Lam
2
+ require 'trollop'
3
+ require 'rbvmomi'
4
+ require 'rbvmomi/trollop'
5
+
6
+ VIM = RbVmomi::VIM
7
+
8
+ opts = Trollop.options do
9
+ banner <<-EOS
10
+ Display utilization of each datastore in the datacenter.
11
+
12
+ Usage:
13
+ vdf.rb [options]
14
+
15
+ VIM connection options:
16
+ EOS
17
+
18
+ rbvmomi_connection_opts
19
+
20
+ text <<-EOS
21
+
22
+ Datacenter selection:
23
+ EOS
24
+
25
+ rbvmomi_datacenter_opt
26
+
27
+ text <<-EOS
28
+
29
+ Other options:
30
+ EOS
31
+ end
32
+
33
+ Trollop.die("must specify host") unless opts[:host]
34
+
35
+ vim = VIM.connect opts
36
+
37
+ dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
38
+
39
+ def si n
40
+ ['', 'K', 'M', 'G', 'T', 'P'].each_with_index do |x,i|
41
+ v = n.to_f/(1000**i)
42
+ return v,x if v < 1000 or x == 'P'
43
+ end
44
+ end
45
+
46
+ def unit n, u, p
47
+ "%.*g%s%s" % [p, si(n), u].flatten
48
+ end
49
+
50
+ def b n
51
+ unit(n,'B',3)
52
+ end
53
+
54
+ puts "Filesystem#{' '*43}Size Used Avail Use% Mounted on"
55
+ fmt = "%-52s %-7s %-7s %-7s %-7s %s"
56
+
57
+ if false
58
+ # simple version
59
+ dc.datastore.sort_by { |ds| ds.info.url }.each do |ds|
60
+ s = ds.summary
61
+ next unless s.accessible
62
+ size = s.capacity
63
+ free = s.freeSpace
64
+ used = size - free
65
+ pct_used = used*100.0/size
66
+ puts(fmt % [ds.info.url, b(size), b(used), b(free), unit(pct_used,'%',3), ds.name])
67
+ end
68
+ else
69
+ # fast version
70
+ paths = %w(name info.url summary.accessible summary.capacity summary.freeSpace)
71
+ propSet = [{ :type => 'Datastore', :pathSet => paths }]
72
+ filterSpec = { :objectSet => dc.datastore.map { |ds| { :obj => ds } }, :propSet => propSet }
73
+ data = vim.propertyCollector.RetrieveProperties(:specSet => [filterSpec])
74
+ data.select { |d| d['summary.accessible'] }.sort_by { |d| d['info.url'] }.each do |d|
75
+ size = d['summary.capacity']
76
+ free = d['summary.freeSpace']
77
+ used = size - free
78
+ pct_used = used*100.0/size
79
+ puts(fmt % [d['info.url'], b(size), b(used), b(free), unit(pct_used,'%',3), d['name']])
80
+ end
81
+ end
@@ -49,7 +49,7 @@ class Connection < TrivialSoap
49
49
  if desc
50
50
  type = desc['is-task'] ? 'Task' : desc['wsdl_type']
51
51
  returnvals = resp.children.select(&:element?).map { |c| xml2obj c, type }
52
- desc['is-array'] ? returnvals : returnvals.first
52
+ (desc['is-array'] && !desc['is-task']) ? returnvals : returnvals.first
53
53
  else
54
54
  nil
55
55
  end
@@ -50,10 +50,22 @@ class ParseResponseTest < Test::Unit::TestCase
50
50
  </detail>
51
51
  </soapenv:Fault>
52
52
  EOS
53
- rescue RbVmomi::Fault
53
+ rescue VIM::InvalidArgument
54
54
  raise
55
+ rescue
56
+ raise "wrong fault"
55
57
  end
56
58
  end
57
59
  end
60
+
61
+ def test_task_array_result
62
+ desc = { 'wsdl_type' => 'xsd:string', 'is-array' => true, 'is-task' => true }
63
+
64
+ check desc, <<-EOS, VIM.Task(nil, 'haTask-ha-host-vim.DiagnosticManager.generateLogBundles-865')
65
+ <root xmlns="urn:vim25">
66
+ <returnval type="Task">haTask-ha-host-vim.DiagnosticManager.generateLogBundles-865</returnval>
67
+ </root>
68
+ EOS
69
+ end
58
70
  end
59
71
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 2
9
- version: 1.1.2
8
+ - 3
9
+ version: 1.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Rich Lane
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-21 00:00:00 -08:00
17
+ date: 2011-02-22 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -91,10 +91,13 @@ files:
91
91
  - examples/create_vm-1.9.rb
92
92
  - examples/create_vm.rb
93
93
  - examples/extraConfig.rb
94
+ - examples/logbundle.rb
95
+ - examples/logtail.rb
94
96
  - examples/power.rb
95
97
  - examples/readme-1.rb
96
98
  - examples/readme-2.rb
97
99
  - examples/run.sh
100
+ - examples/vdf.rb
98
101
  - lib/rbvmomi.rb
99
102
  - lib/rbvmomi/basic_types.rb
100
103
  - lib/rbvmomi/connection.rb
@@ -160,9 +163,12 @@ test_files:
160
163
  - examples/create_vm-1.9.rb
161
164
  - examples/create_vm.rb
162
165
  - examples/extraConfig.rb
166
+ - examples/logbundle.rb
167
+ - examples/logtail.rb
163
168
  - examples/power.rb
164
169
  - examples/readme-1.rb
165
170
  - examples/readme-2.rb
171
+ - examples/vdf.rb
166
172
  - test/test_deserialization.rb
167
173
  - test/test_emit_request.rb
168
174
  - test/test_exceptions.rb