rbvmomi 1.8.2 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +5 -13
  2. data/LICENSE +1 -1
  3. data/README.md +114 -0
  4. data/{bin → exe}/rbvmomish +5 -5
  5. data/lib/rbvmomi.rb +11 -7
  6. data/lib/rbvmomi/basic_types.rb +9 -1
  7. data/lib/rbvmomi/connection.rb +11 -9
  8. data/lib/rbvmomi/deserialization.rb +4 -3
  9. data/lib/rbvmomi/fault.rb +3 -1
  10. data/lib/rbvmomi/{trollop.rb → optimist.rb} +10 -8
  11. data/lib/rbvmomi/pbm.rb +3 -1
  12. data/lib/rbvmomi/sms.rb +3 -1
  13. data/lib/rbvmomi/sms/SmsStorageManager.rb +3 -0
  14. data/lib/rbvmomi/sso.rb +313 -0
  15. data/lib/rbvmomi/trivial_soap.rb +19 -11
  16. data/lib/rbvmomi/type_loader.rb +4 -2
  17. data/lib/rbvmomi/utils/admission_control.rb +22 -19
  18. data/lib/rbvmomi/utils/deploy.rb +18 -14
  19. data/lib/rbvmomi/utils/leases.rb +4 -1
  20. data/lib/rbvmomi/utils/perfdump.rb +4 -1
  21. data/lib/rbvmomi/version.rb +6 -0
  22. data/lib/rbvmomi/vim.rb +41 -12
  23. data/lib/rbvmomi/vim/ComputeResource.rb +3 -0
  24. data/lib/rbvmomi/vim/Datacenter.rb +8 -0
  25. data/lib/rbvmomi/vim/Datastore.rb +5 -1
  26. data/lib/rbvmomi/vim/DynamicTypeMgrAllTypeInfo.rb +3 -0
  27. data/lib/rbvmomi/vim/DynamicTypeMgrDataTypeInfo.rb +4 -1
  28. data/lib/rbvmomi/vim/DynamicTypeMgrManagedTypeInfo.rb +15 -7
  29. data/lib/rbvmomi/vim/Folder.rb +19 -12
  30. data/lib/rbvmomi/vim/HostSystem.rb +5 -2
  31. data/lib/rbvmomi/vim/ManagedEntity.rb +3 -0
  32. data/lib/rbvmomi/vim/ManagedObject.rb +4 -1
  33. data/lib/rbvmomi/vim/ObjectContent.rb +3 -0
  34. data/lib/rbvmomi/vim/ObjectUpdate.rb +3 -0
  35. data/lib/rbvmomi/vim/OvfManager.rb +6 -2
  36. data/lib/rbvmomi/vim/PerfCounterInfo.rb +3 -1
  37. data/lib/rbvmomi/vim/PerformanceManager.rb +3 -0
  38. data/lib/rbvmomi/vim/PropertyCollector.rb +3 -0
  39. data/lib/rbvmomi/vim/ReflectManagedMethodExecuter.rb +5 -2
  40. data/lib/rbvmomi/vim/ResourcePool.rb +3 -0
  41. data/lib/rbvmomi/vim/ServiceInstance.rb +3 -0
  42. data/lib/rbvmomi/vim/Task.rb +3 -0
  43. data/lib/rbvmomi/vim/VirtualMachine.rb +13 -12
  44. data/vmodl.db +0 -0
  45. metadata +100 -63
  46. data/.yardopts +0 -6
  47. data/README.rdoc +0 -78
  48. data/Rakefile +0 -45
  49. data/VERSION +0 -1
  50. data/devel/analyze-vim-declarations.rb +0 -213
  51. data/devel/analyze-xml.rb +0 -46
  52. data/devel/benchmark.rb +0 -117
  53. data/devel/collisions.rb +0 -18
  54. data/devel/merge-internal-vmodl.rb +0 -59
  55. data/devel/merge-manual-vmodl.rb +0 -32
  56. data/examples/annotate.rb +0 -54
  57. data/examples/cached_ovf_deploy.rb +0 -120
  58. data/examples/clone_vm.rb +0 -84
  59. data/examples/create_vm-1.9.rb +0 -93
  60. data/examples/create_vm.rb +0 -93
  61. data/examples/extraConfig.rb +0 -54
  62. data/examples/lease_tool.rb +0 -102
  63. data/examples/logbundle.rb +0 -63
  64. data/examples/logtail.rb +0 -60
  65. data/examples/nfs_datastore.rb +0 -95
  66. data/examples/power.rb +0 -59
  67. data/examples/readme-1.rb +0 -35
  68. data/examples/readme-2.rb +0 -51
  69. data/examples/run.sh +0 -41
  70. data/examples/screenshot.rb +0 -48
  71. data/examples/vdf.rb +0 -81
  72. data/examples/vm_drs_behavior.rb +0 -76
  73. data/test/test_deserialization.rb +0 -383
  74. data/test/test_emit_request.rb +0 -128
  75. data/test/test_exceptions.rb +0 -14
  76. data/test/test_helper.rb +0 -14
  77. data/test/test_misc.rb +0 -24
  78. data/test/test_parse_response.rb +0 -69
  79. data/test/test_serialization.rb +0 -311
data/.yardopts DELETED
@@ -1,6 +0,0 @@
1
- --title "RbVmomi - a Ruby interface to the vSphere API"
2
- --no-private
3
- --readme README.rdoc
4
- lib/rbvmomi/vim.rb
5
- lib/rbvmomi/vim/*.rb
6
- lib/rbvmomi/trollop.rb
data/README.rdoc DELETED
@@ -1,78 +0,0 @@
1
- = RbVmomi
2
-
3
- == Introduction
4
-
5
- RbVmomi is a Ruby interface to the vSphere API. Like the Perl and Java SDKs,
6
- you can use it to manage ESX and VirtualCenter servers. The current release
7
- supports the vSphere 5.0 API. RbVmomi specific documentation is
8
- online[http://rdoc.info/github/rlane/rbvmomi/master/frames] and is meant to
9
- be used alongside the official documentation[http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/index.html].
10
-
11
- == Installation
12
-
13
- gem install rbvmomi
14
-
15
- == Usage
16
-
17
- A simple example of turning on a VM:
18
-
19
- require 'rbvmomi'
20
- vim = RbVmomi::VIM.connect host: 'foo', user: 'bar', password: 'baz'
21
- dc = vim.serviceInstance.find_datacenter("mydatacenter") or fail "datacenter not found"
22
- vm = dc.find_vm("myvm") or fail "VM not found"
23
- vm.PowerOnVM_Task.wait_for_completion
24
-
25
- This code uses several RbVmomi extensions to the vSphere API for concision. The
26
- expanded snippet below uses only standard API calls and should be familiar to
27
- users of the Java SDK:
28
-
29
- require 'rbvmomi'
30
- vim = RbVmomi::VIM.connect host: 'foo', user: 'bar', password: 'baz'
31
- rootFolder = vim.serviceInstance.content.rootFolder
32
- dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).find { |x| x.name == "mydatacenter" } or fail "datacenter not found"
33
- vm = dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).find { |x| x.name == "myvm" } or fail "VM not found"
34
- task = vm.PowerOnVM_Task
35
- filter = vim.propertyCollector.CreateFilter(
36
- spec: {
37
- propSet: [{ type: 'Task', all: false, pathSet: ['info.state']}],
38
- objectSet: [{ obj: task }]
39
- },
40
- partialUpdates: false
41
- )
42
- ver = ''
43
- while true
44
- result = vim.propertyCollector.WaitForUpdates(version: ver)
45
- ver = result.version
46
- break if ['success', 'error'].member? task.info.state
47
- end
48
- filter.DestroyPropertyFilter
49
- raise task.info.error if task.info.state == 'error'
50
-
51
- As you can see, the extensions RbVmomi adds can dramatically decrease the code
52
- needed to perform simple tasks while still letting you use the full power of
53
- the API when necessary. RbVmomi extensions are often more efficient than a
54
- naive implementation; for example, the find_vm method on VIM::Datacenter used
55
- in the first example uses the SearchIndex for fast lookups.
56
-
57
- A few important points:
58
-
59
- * All class, method, parameter, and property names match the official documentation[http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/index.html].
60
- * Properties are exposed as accessor methods.
61
- * Data object types can usually be inferred from context, so you may use a hash instead.
62
- * Enumeration values are simply strings.
63
- * Example code is included in the examples/ directory.
64
- * A set of helper methods for Trollop is included to speed up development of
65
- command line apps. See the included examples for usage.
66
- * If you don't have trusted SSL certificates installed on the host you're
67
- connecting to, you'll get an +OpenSSL::SSL::SSLError+ "certificate verify failed".
68
- You can work around this by using the +:insecure+ option to +RbVmomi::VIM.connect+.
69
- * This is a side project of a VMware employee and is entirely unsupported by VMware.
70
-
71
- Built-in extensions are under +lib/rbvmomi/vim/+. You are encouraged to
72
- reopen VIM classes in your applications and add extensions of your own. If you
73
- write something generally useful please send it to me and I'll add it in.
74
-
75
- == Development
76
-
77
- Fork the project on Github and send me a merge request, or send a patch to
78
- rlane@vmware.com. RbVmomi developers hang out in #rbvmomi on Freenode.
data/Rakefile DELETED
@@ -1,45 +0,0 @@
1
- require 'rake/testtask'
2
- require 'rdoc/task'
3
- require 'yard'
4
-
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |gem|
8
- gem.name = "rbvmomi"
9
- gem.summary = "Ruby interface to the VMware vSphere API"
10
- #gem.description = ""
11
- gem.email = "rlane@vmware.com"
12
- gem.homepage = "https://github.com/vmware/rbvmomi"
13
- gem.authors = ["Rich Lane", "Christian Dickmann"]
14
- gem.add_dependency 'nokogiri', '>= 1.4.1'
15
- gem.add_dependency 'builder'
16
- gem.add_dependency 'trollop'
17
- gem.required_ruby_version = '>= 1.8.7'
18
- gem.files.include 'vmodl.db'
19
- gem.files.include '.yardopts'
20
- end
21
- rescue LoadError
22
- puts "Jeweler not available. Install it with: gem install jeweler"
23
- end
24
-
25
- Rake::TestTask.new do |t|
26
- t.libs << "test"
27
- t.test_files = FileList['test/test_*.rb']
28
- t.verbose = true
29
- end
30
-
31
- YARD::Rake::YardocTask.new
32
-
33
- begin
34
- require 'rcov/rcovtask'
35
- desc 'Measures test coverage using rcov'
36
- Rcov::RcovTask.new do |rcov|
37
- rcov.pattern = 'test/test_*.rb'
38
- rcov.output_dir = 'coverage'
39
- rcov.verbose = true
40
- rcov.libs << "test"
41
- rcov.rcov_opts << '--exclude "gems/*"'
42
- end
43
- rescue LoadError
44
- puts "Rcov not available. Install it with: gem install rcov"
45
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.8.2
@@ -1,213 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'nokogiri'
3
- require 'pp'
4
- # :usage => analyze-vim-declarations.rb vim-declarations.xml foo-declarations.xml vmodl.db
5
-
6
- XML_FNS = ARGV[0...-1]
7
- abort "must specify path to vim-declarations.xml" if XML_FNS.empty?
8
- OUT_FN = ARGV[-1] or abort "must specify path to output database"
9
-
10
- XML_FNS.each do |x|
11
- abort "XML file #{x} does not exist" unless File.exists? x
12
- end
13
-
14
- TYPES = {}
15
- VERSIONS = []
16
-
17
- ID2NAME = Hash.new { |h,k| fail "unknown type-id #{k.inspect}" }
18
-
19
- ID2NAME.merge!({
20
- 'java.lang.String' => 'xsd:string',
21
- 'BOOLEAN' => 'xsd:boolean',
22
- 'BYTE' => 'xsd:byte',
23
- 'SHORT' => 'xsd:short',
24
- 'INT' => 'xsd:int',
25
- 'LONG' => 'xsd:long',
26
- 'FLOAT' => 'xsd:float',
27
- 'DOUBLE' => 'xsd:double',
28
- 'vmodl.DateTime' => 'xsd:dateTime',
29
- 'vmodl.Binary' => 'xsd:base64Binary',
30
- 'vmodl.Any' => 'xsd:anyType',
31
- 'vmodl.URI' => 'xsd:anyURI',
32
- 'void' => nil,
33
- })
34
-
35
- %w(DataObject ManagedObject MethodFault MethodName
36
- PropertyPath RuntimeFault TypeName).each do |x|
37
- ID2NAME['vmodl.' + x] = x
38
- end
39
-
40
- def handle_data_object node
41
- if TYPES[node['name']]
42
- puts "Type #{node['name']} already exists"
43
- return
44
- end
45
-
46
- ID2NAME[node['type-id']] = node['name']
47
- TYPES[node['name']] = {
48
- 'kind' => 'data',
49
- 'base-type-id' => node['base-type-id'],
50
- 'props' => node.children.select { |x| x.name == 'property' }.map do |property|
51
- {
52
- 'name' => property['name'],
53
- 'type-id-ref' => property['type-id-ref'],
54
- 'is-optional' => property['is-optional'] ? true : false,
55
- 'is-array' => property['is-array'] ? true : false,
56
- 'version-id-ref' => property['version-id-ref'],
57
- }
58
- end
59
- }
60
- end
61
-
62
- def handle_managed_object node
63
- if TYPES[node['name']]
64
- puts "Type #{node['name']} already exists"
65
- return
66
- end
67
- ID2NAME[node['type-id']] = node['name']
68
- TYPES[node['name']] = {
69
- 'kind' => 'managed',
70
- 'base-type-id' => node['base-type-id'],
71
- 'props' => node.children.select { |x| x.name == 'property' }.map do |property|
72
- {
73
- 'name' => property['name'],
74
- 'type-id-ref' => property['type-id-ref'],
75
- 'is-optional' => property['is-optional'] ? true : false,
76
- 'is-array' => property['is-array'] ? true : false,
77
- 'version-id-ref' => property['version-id-ref'],
78
- }
79
- end,
80
- 'methods' => Hash[
81
- node.children.select { |x| x.name == 'method' }.map do |method|
82
- [method['is-task'] ? "#{method['name']}_Task" : method['name'],
83
- {
84
- 'params' => method.children.select { |x| x.name == 'parameter' }.map do |param|
85
- {
86
- 'name' => param['name'],
87
- 'type-id-ref' => param['type-id-ref'],
88
- 'is-array' => param['is-array'] ? true : false,
89
- 'is-optional' => param['is-optional'] ? true : false,
90
- 'version-id-ref' => param['version-id-ref'],
91
- }
92
- end,
93
- 'result' => {
94
- 'type-id-ref' => method['type-id-ref'],
95
- 'is-array' => method['is-array'] ? true : false,
96
- 'is-optional' => method['is-optional'] ? true : false,
97
- 'is-task' => method['is-task'] ? true : false,
98
- 'version-id-ref' => method['version-id-ref'],
99
- }
100
- }
101
- ]
102
- end
103
- ]
104
- }
105
- end
106
-
107
- def handle_enum node
108
- if TYPES[node['name']]
109
- puts "Type #{node['name']} already exists"
110
- return
111
- end
112
-
113
- ID2NAME[node['type-id']] = node['name']
114
- TYPES[node['name']] = {
115
- 'kind' => 'enum',
116
- 'values' => node.children.map { |child| child['name'] },
117
- }
118
- end
119
-
120
- def handle_fault node
121
- handle_data_object node
122
- end
123
-
124
- def handle_version x
125
- attrs = %w(display-name name service-namespace type-id version-id vmodl-name)
126
- h = Hash[attrs.map { |k| [k, x[k]] }]
127
- h['compatible'] = x.children.select(&:element?).map { |y| y.text }
128
- VERSIONS << h
129
- end
130
-
131
- XML_FNS.each do |fn|
132
- puts "parsing #{fn} ..."
133
- xml_str = File.read(fn)
134
- xml_str = xml_str.gsub(/\<description-html\>(.*?)\<\/description-html\>/m, "")
135
- xml = Nokogiri.parse(xml_str, nil, nil, Nokogiri::XML::ParseOptions::NOBLANKS)
136
- xml.root.at('enums').children.each { |x| handle_enum x }
137
- xml.root.at('managed-objects').children.each { |x| handle_managed_object x }
138
- xml.root.at('data-objects').children.each { |x| handle_data_object x }
139
- xml.root.at('faults').children.each { |x| handle_fault x }
140
- #xml.root.at('definitions').at('version-types').children.each { |x| handle_version x }
141
- end
142
-
143
- #pp ID2NAME
144
-
145
- munge_fault = lambda { |x| true }
146
-
147
- TYPES.each do |k,t|
148
- case t['kind']
149
- when 'data'
150
- t['wsdl_base'] = t['base-type-id'] ? ID2NAME[t['base-type-id']] : 'DataObject'
151
- t.delete 'base-type-id'
152
- t['props'].each do |x|
153
- x['wsdl_type'] = ID2NAME[x['type-id-ref']]
154
- x.delete 'type-id-ref'
155
- munge_fault[x]
156
- end
157
- when 'managed'
158
- t['wsdl_base'] = t['base-type-id'] ? ID2NAME[t['base-type-id']] : 'ManagedObject'
159
- t.delete 'base-type-id'
160
- t['props'].each do |x|
161
- x['wsdl_type'] = ID2NAME[x['type-id-ref']]
162
- x.delete 'type-id-ref'
163
- munge_fault[x]
164
- end
165
- t['methods'].each do |mName,x|
166
- if y = x['result']
167
- begin
168
- y['wsdl_type'] = ID2NAME[y['type-id-ref']]
169
- rescue Exception => ex
170
- pp ex
171
- end
172
- y.delete 'type-id-ref'
173
- munge_fault[y]
174
- end
175
- x['params'].each do |r|
176
- begin
177
- r['wsdl_type'] = ID2NAME[r['type-id-ref']]
178
- rescue Exception => ex
179
- pp ex
180
- end
181
- r.delete 'type-id-ref'
182
- munge_fault[r]
183
- end
184
- end
185
- when 'enum'
186
- else fail
187
- end
188
- end
189
-
190
- db = {}
191
-
192
- TYPES.each do |k,t|
193
- db[k] = t
194
- end
195
-
196
- db['_typenames'] = TYPES.keys
197
- db['_versions'] = VERSIONS
198
-
199
- File.open(OUT_FN, 'w') { |io| Marshal.dump db, io }
200
-
201
- if filename = ENV['VERSION_GRAPH']
202
- File.open(filename, 'w') do |io|
203
- io.puts "digraph versions\n{"
204
- VERSIONS.each do |h|
205
- io.puts "\"#{h['vmodl-name']}\" [label=\"#{h['vmodl-name']} (#{h['version-id']})\"]"
206
- h['compatible'].each do |x|
207
- x =~ /^interface / or fail x
208
- io.puts "\"#{h['vmodl-name']}\" -> \"#{$'}\""
209
- end
210
- end
211
- io.puts "}\n"
212
- end
213
- end
data/devel/analyze-xml.rb DELETED
@@ -1,46 +0,0 @@
1
- require 'nokogiri'
2
-
3
- # removes line breaks and whitespace between xml nodes.
4
- def prepare_xml(xml)
5
- xml = xml.gsub(/\n+/, "")
6
- xml = xml.gsub(/(>)\s*(<)/, '\1\2')
7
- end
8
-
9
- def analyze_xml x, tree
10
- subtree = (tree[x.name] ||= { :attributes => [], :min_occur => nil, :max_occur => nil })
11
- attrs = x.attributes.keys.sort
12
- subtree[:attributes] << attrs unless subtree[:attributes].member? attrs
13
-
14
- child_occurs = Hash.new 0
15
- x.children.select(&:element?).each do |c|
16
- child_occurs[c.name] += 1
17
- analyze_xml c, subtree
18
- end
19
-
20
- subtree.select { |k,v| k.is_a? String }.each do |k,v|
21
- v[:min_occur] = [v[:min_occur], child_occurs[k]].compact.min
22
- v[:max_occur] = [v[:max_occur], child_occurs[k]].compact.max
23
- end
24
- end
25
-
26
- def print_tree tree, indent=0
27
- tree.select { |k,v| k.is_a? String }.sort.each do |k,v|
28
- attrs = v[:attributes] || []
29
- min, max = v[:min_occur], v[:max_occur]
30
- numsym = if min == 0 and max == 0 then fail
31
- elsif min == 0 and max == 1 then '?'
32
- elsif min == 0 then '*'
33
- elsif min == 1 and max == 1 then ''
34
- else '+'
35
- end
36
- puts "#{' '*indent}#{k}#{numsym}: #{attrs.sort.map { |a| "[#{a * ' '}]"} * ', '} {#{min},#{max}}"
37
- print_tree v, (indent+1)
38
- end
39
- end
40
-
41
- tree = {}
42
- ARGV.each do |fn|
43
- nk = Nokogiri(prepare_xml(File.read fn))
44
- analyze_xml nk.root, tree
45
- end
46
- print_tree tree
data/devel/benchmark.rb DELETED
@@ -1,117 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'tempfile'
3
-
4
- if ENV['RBVMOMI_COVERAGE'] == '1'
5
- require 'simplecov'
6
- SimpleCov.start
7
- end
8
-
9
- require 'rbvmomi'
10
- require 'rbvmomi/deserialization'
11
- require 'benchmark'
12
- require 'libxml'
13
-
14
- NS_XSI = 'http://www.w3.org/2001/XMLSchema-instance'
15
-
16
- VIM = RbVmomi::VIM
17
- $conn = VIM.new(:ns => 'urn:vim25', :rev => '4.0')
18
- raw = File.read(ARGV[0])
19
-
20
- def diff a, b
21
- a_io = Tempfile.new 'rbvmomi-diff-a'
22
- b_io = Tempfile.new 'rbvmomi-diff-b'
23
- PP.pp a, a_io
24
- PP.pp b, b_io
25
- a_io.close
26
- b_io.close
27
- system("diff -u #{a_io.path} #{b_io.path}")
28
- a_io.unlink
29
- b_io.unlink
30
- end
31
-
32
- begin
33
- deserializer = RbVmomi::OldDeserializer.new($conn)
34
- end_time = Time.now + 1
35
- n = 0
36
- while n == 0 or end_time > Time.now
37
- deserializer.deserialize Nokogiri::XML(raw).root
38
- n += 1
39
- end
40
- N = n*10
41
- end
42
-
43
- puts "iterations: #{N}"
44
-
45
- parsed_nokogiri = Nokogiri::XML(raw)
46
- parsed_libxml = LibXML::XML::Parser.string(raw).parse
47
-
48
- if true
49
- nokogiri_xml = parsed_nokogiri.root
50
- libxml_xml = parsed_libxml.root
51
-
52
- old_nokogiri_result = RbVmomi::OldDeserializer.new($conn).deserialize nokogiri_xml
53
- new_nokogiri_result = RbVmomi::NewDeserializer.new($conn).deserialize nokogiri_xml
54
- new_libxml_result = RbVmomi::NewDeserializer.new($conn).deserialize libxml_xml
55
-
56
- if new_nokogiri_result != old_nokogiri_result
57
- puts "new_nokogiri_result doesnt match old_nokogiri_result"
58
- puts "old_nokogiri_result:"
59
- pp old_nokogiri_result
60
- puts "new_nokogiri_result:"
61
- pp new_nokogiri_result
62
- puts "diff:"
63
- diff old_nokogiri_result, new_nokogiri_result
64
- exit 1
65
- end
66
-
67
- if new_libxml_result != old_nokogiri_result
68
- puts "new_libxml_result doesnt match old_nokogiri_result"
69
- puts "old_nokogiri_result:"
70
- pp old_nokogiri_result
71
- puts "new_libxml_result:"
72
- pp new_libxml_result
73
- puts "diff:"
74
- diff old_nokogiri_result, new_libxml_result
75
- exit 1
76
- end
77
-
78
- puts "all results match"
79
- end
80
-
81
- Benchmark.bmbm do|b|
82
- GC.start
83
- b.report("nokogiri parsing") do
84
- N.times { Nokogiri::XML(raw) }
85
- end
86
-
87
- GC.start
88
- b.report("libxml parsing") do
89
- N.times do
90
- LibXML::XML::Parser.string(raw).parse
91
- end
92
- end
93
-
94
- GC.start
95
- b.report("old deserialization (nokogiri)") do
96
- deserializer = RbVmomi::OldDeserializer.new($conn)
97
- N.times do
98
- deserializer.deserialize Nokogiri::XML(raw).root
99
- end
100
- end
101
-
102
- GC.start
103
- b.report("new deserialization (nokogiri)") do
104
- deserializer = RbVmomi::NewDeserializer.new($conn)
105
- N.times do
106
- deserializer.deserialize Nokogiri::XML(raw).root
107
- end
108
- end
109
-
110
- GC.start
111
- b.report("new deserialization (libxml)") do
112
- deserializer = RbVmomi::NewDeserializer.new($conn)
113
- N.times do
114
- deserializer.deserialize LibXML::XML::Parser.string(raw).parse.root
115
- end
116
- end
117
- end