rbvmomi 1.8.2 → 2.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/LICENSE +1 -1
- data/README.md +114 -0
- data/{bin → exe}/rbvmomish +5 -5
- data/lib/rbvmomi.rb +11 -7
- data/lib/rbvmomi/basic_types.rb +9 -1
- data/lib/rbvmomi/connection.rb +11 -9
- data/lib/rbvmomi/deserialization.rb +4 -3
- data/lib/rbvmomi/fault.rb +3 -1
- data/lib/rbvmomi/{trollop.rb → optimist.rb} +10 -8
- data/lib/rbvmomi/pbm.rb +3 -1
- data/lib/rbvmomi/sms.rb +3 -1
- data/lib/rbvmomi/sms/SmsStorageManager.rb +3 -0
- data/lib/rbvmomi/sso.rb +313 -0
- data/lib/rbvmomi/trivial_soap.rb +19 -11
- data/lib/rbvmomi/type_loader.rb +4 -2
- data/lib/rbvmomi/utils/admission_control.rb +22 -19
- data/lib/rbvmomi/utils/deploy.rb +18 -14
- data/lib/rbvmomi/utils/leases.rb +4 -1
- data/lib/rbvmomi/utils/perfdump.rb +4 -1
- data/lib/rbvmomi/version.rb +6 -0
- data/lib/rbvmomi/vim.rb +41 -12
- data/lib/rbvmomi/vim/ComputeResource.rb +3 -0
- data/lib/rbvmomi/vim/Datacenter.rb +8 -0
- data/lib/rbvmomi/vim/Datastore.rb +5 -1
- data/lib/rbvmomi/vim/DynamicTypeMgrAllTypeInfo.rb +3 -0
- data/lib/rbvmomi/vim/DynamicTypeMgrDataTypeInfo.rb +4 -1
- data/lib/rbvmomi/vim/DynamicTypeMgrManagedTypeInfo.rb +15 -7
- data/lib/rbvmomi/vim/Folder.rb +19 -12
- data/lib/rbvmomi/vim/HostSystem.rb +5 -2
- data/lib/rbvmomi/vim/ManagedEntity.rb +3 -0
- data/lib/rbvmomi/vim/ManagedObject.rb +4 -1
- data/lib/rbvmomi/vim/ObjectContent.rb +3 -0
- data/lib/rbvmomi/vim/ObjectUpdate.rb +3 -0
- data/lib/rbvmomi/vim/OvfManager.rb +6 -2
- data/lib/rbvmomi/vim/PerfCounterInfo.rb +3 -1
- data/lib/rbvmomi/vim/PerformanceManager.rb +3 -0
- data/lib/rbvmomi/vim/PropertyCollector.rb +3 -0
- data/lib/rbvmomi/vim/ReflectManagedMethodExecuter.rb +5 -2
- data/lib/rbvmomi/vim/ResourcePool.rb +3 -0
- data/lib/rbvmomi/vim/ServiceInstance.rb +3 -0
- data/lib/rbvmomi/vim/Task.rb +3 -0
- data/lib/rbvmomi/vim/VirtualMachine.rb +13 -12
- data/vmodl.db +0 -0
- metadata +100 -63
- data/.yardopts +0 -6
- data/README.rdoc +0 -78
- data/Rakefile +0 -45
- data/VERSION +0 -1
- data/devel/analyze-vim-declarations.rb +0 -213
- data/devel/analyze-xml.rb +0 -46
- data/devel/benchmark.rb +0 -117
- data/devel/collisions.rb +0 -18
- data/devel/merge-internal-vmodl.rb +0 -59
- data/devel/merge-manual-vmodl.rb +0 -32
- data/examples/annotate.rb +0 -54
- data/examples/cached_ovf_deploy.rb +0 -120
- data/examples/clone_vm.rb +0 -84
- data/examples/create_vm-1.9.rb +0 -93
- data/examples/create_vm.rb +0 -93
- data/examples/extraConfig.rb +0 -54
- data/examples/lease_tool.rb +0 -102
- data/examples/logbundle.rb +0 -63
- data/examples/logtail.rb +0 -60
- data/examples/nfs_datastore.rb +0 -95
- data/examples/power.rb +0 -59
- data/examples/readme-1.rb +0 -35
- data/examples/readme-2.rb +0 -51
- data/examples/run.sh +0 -41
- data/examples/screenshot.rb +0 -48
- data/examples/vdf.rb +0 -81
- data/examples/vm_drs_behavior.rb +0 -76
- data/test/test_deserialization.rb +0 -383
- data/test/test_emit_request.rb +0 -128
- data/test/test_exceptions.rb +0 -14
- data/test/test_helper.rb +0 -14
- data/test/test_misc.rb +0 -24
- data/test/test_parse_response.rb +0 -69
- data/test/test_serialization.rb +0 -311
data/examples/power.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'trollop'
|
2
|
-
require 'rbvmomi'
|
3
|
-
require 'rbvmomi/trollop'
|
4
|
-
|
5
|
-
VIM = RbVmomi::VIM
|
6
|
-
CMDS = %w(on off reset suspend destroy)
|
7
|
-
|
8
|
-
opts = Trollop.options do
|
9
|
-
banner <<-EOS
|
10
|
-
Perform VM power operations.
|
11
|
-
|
12
|
-
Usage:
|
13
|
-
power.rb [options] cmd VM
|
14
|
-
|
15
|
-
Commands: #{CMDS * ' '}
|
16
|
-
|
17
|
-
VIM connection options:
|
18
|
-
EOS
|
19
|
-
|
20
|
-
rbvmomi_connection_opts
|
21
|
-
|
22
|
-
text <<-EOS
|
23
|
-
|
24
|
-
VM location options:
|
25
|
-
EOS
|
26
|
-
|
27
|
-
rbvmomi_datacenter_opt
|
28
|
-
|
29
|
-
text <<-EOS
|
30
|
-
|
31
|
-
Other options:
|
32
|
-
EOS
|
33
|
-
|
34
|
-
stop_on CMDS
|
35
|
-
end
|
36
|
-
|
37
|
-
cmd = ARGV[0] or Trollop.die("no command given")
|
38
|
-
vm_name = ARGV[1] or Trollop.die("no VM name given")
|
39
|
-
Trollop.die("must specify host") unless opts[:host]
|
40
|
-
|
41
|
-
vim = VIM.connect opts
|
42
|
-
|
43
|
-
dc = vim.serviceInstance.content.rootFolder.traverse(opts[:datacenter], VIM::Datacenter) or abort "datacenter not found"
|
44
|
-
vm = dc.vmFolder.traverse(vm_name, VIM::VirtualMachine) or abort "VM not found"
|
45
|
-
|
46
|
-
case cmd
|
47
|
-
when 'on'
|
48
|
-
vm.PowerOnVM_Task.wait_for_completion
|
49
|
-
when 'off'
|
50
|
-
vm.PowerOffVM_Task.wait_for_completion
|
51
|
-
when 'reset'
|
52
|
-
vm.ResetVM_Task.wait_for_completion
|
53
|
-
when 'suspend'
|
54
|
-
vm.SuspendVM_Task.wait_for_completion
|
55
|
-
when 'destroy'
|
56
|
-
vm.Destroy_Task.wait_for_completion
|
57
|
-
else
|
58
|
-
abort "invalid command"
|
59
|
-
end
|
data/examples/readme-1.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'rbvmomi'
|
2
|
-
require 'rbvmomi/trollop'
|
3
|
-
|
4
|
-
opts = Trollop.options do
|
5
|
-
banner <<-EOS
|
6
|
-
Example 1 from the README: Power on a VM.
|
7
|
-
|
8
|
-
Usage:
|
9
|
-
readme-1.rb [options] VM name
|
10
|
-
|
11
|
-
VIM connection options:
|
12
|
-
EOS
|
13
|
-
|
14
|
-
rbvmomi_connection_opts
|
15
|
-
|
16
|
-
text <<-EOS
|
17
|
-
|
18
|
-
VM location options:
|
19
|
-
EOS
|
20
|
-
|
21
|
-
rbvmomi_datacenter_opt
|
22
|
-
|
23
|
-
text <<-EOS
|
24
|
-
|
25
|
-
Other options:
|
26
|
-
EOS
|
27
|
-
end
|
28
|
-
|
29
|
-
Trollop.die("must specify host") unless opts[:host]
|
30
|
-
vm_name = ARGV[0] or abort "must specify VM name"
|
31
|
-
|
32
|
-
vim = RbVmomi::VIM.connect opts
|
33
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or fail "datacenter not found"
|
34
|
-
vm = dc.find_vm(vm_name) or fail "VM not found"
|
35
|
-
vm.PowerOnVM_Task.wait_for_completion
|
data/examples/readme-2.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'rbvmomi'
|
2
|
-
require 'rbvmomi/trollop'
|
3
|
-
|
4
|
-
opts = Trollop.options do
|
5
|
-
banner <<-EOS
|
6
|
-
Example 2 from the README: Power on a VM the hard way.
|
7
|
-
|
8
|
-
Usage:
|
9
|
-
readme-2.rb [options] VM name
|
10
|
-
|
11
|
-
VIM connection options:
|
12
|
-
EOS
|
13
|
-
|
14
|
-
rbvmomi_connection_opts
|
15
|
-
|
16
|
-
text <<-EOS
|
17
|
-
|
18
|
-
VM location options:
|
19
|
-
EOS
|
20
|
-
|
21
|
-
rbvmomi_datacenter_opt
|
22
|
-
|
23
|
-
text <<-EOS
|
24
|
-
|
25
|
-
Other options:
|
26
|
-
EOS
|
27
|
-
end
|
28
|
-
|
29
|
-
Trollop.die("must specify host") unless opts[:host]
|
30
|
-
vm_name = ARGV[0] or abort "must specify VM name"
|
31
|
-
|
32
|
-
vim = RbVmomi::VIM.connect opts
|
33
|
-
rootFolder = vim.serviceInstance.content.rootFolder
|
34
|
-
dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).find { |x| x.name == opts[:datacenter] } or fail "datacenter not found"
|
35
|
-
vm = dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).find { |x| x.name == vm_name } or fail "VM not found"
|
36
|
-
task = vm.PowerOnVM_Task
|
37
|
-
filter = vim.propertyCollector.CreateFilter(
|
38
|
-
:spec => {
|
39
|
-
:propSet => [{ :type => 'Task', :all => false, :pathSet => ['info.state']}],
|
40
|
-
:objectSet => [{ :obj => task }]
|
41
|
-
},
|
42
|
-
:partialUpdates => false
|
43
|
-
)
|
44
|
-
ver = ''
|
45
|
-
while true
|
46
|
-
result = vim.propertyCollector.WaitForUpdates(:version => ver)
|
47
|
-
ver = result.version
|
48
|
-
break if ['success', 'error'].member? task.info.state
|
49
|
-
end
|
50
|
-
filter.DestroyPropertyFilter
|
51
|
-
raise task.info.error if task.info.state == 'error'
|
data/examples/run.sh
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
set -e
|
3
|
-
|
4
|
-
if [ -z "$RBVMOMI_HOST" ]
|
5
|
-
then
|
6
|
-
echo "export at least RBVMOMI_HOST"
|
7
|
-
exit 1
|
8
|
-
fi
|
9
|
-
|
10
|
-
EXAMPLES="$(dirname $(which $0))"
|
11
|
-
export RUBYOPT="-I$EXAMPLES/../lib -rubygems"
|
12
|
-
|
13
|
-
source "$HOME/.rvm/scripts/rvm"
|
14
|
-
rvm use 1.8.7
|
15
|
-
ruby -v
|
16
|
-
RUBY=ruby
|
17
|
-
|
18
|
-
echo Creating VM
|
19
|
-
$RUBY $EXAMPLES/create_vm.rb foo
|
20
|
-
echo Powering on VM
|
21
|
-
$RUBY $EXAMPLES/power.rb on foo
|
22
|
-
echo Resetting VM
|
23
|
-
$RUBY $EXAMPLES/power.rb reset foo
|
24
|
-
echo Powering off VM
|
25
|
-
$RUBY $EXAMPLES/power.rb off foo
|
26
|
-
echo "Powering on VM (1)"
|
27
|
-
$RUBY $EXAMPLES/readme-1.rb foo
|
28
|
-
echo Powering off VM
|
29
|
-
$RUBY $EXAMPLES/power.rb off foo
|
30
|
-
echo "Powering on VM (2)"
|
31
|
-
$RUBY $EXAMPLES/readme-2.rb foo
|
32
|
-
echo "Setting extraConfig"
|
33
|
-
$RUBY $EXAMPLES/extraConfig.rb foo set guestinfo.bar=baz
|
34
|
-
echo "Listing extraConfig"
|
35
|
-
$RUBY $EXAMPLES/extraConfig.rb foo list | grep guestinfo.bar
|
36
|
-
echo Powering off VM
|
37
|
-
$RUBY $EXAMPLES/power.rb off foo
|
38
|
-
echo Querying datastore utilization
|
39
|
-
$RUBY $EXAMPLES/vdf.rb
|
40
|
-
echo Destroying VM
|
41
|
-
$RUBY $EXAMPLES/power.rb destroy foo
|
data/examples/screenshot.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# Based on takeVMScreenshot.pl 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
|
-
Take a screenshot.
|
11
|
-
|
12
|
-
Usage:
|
13
|
-
screenshot.rb [options] vm filename
|
14
|
-
|
15
|
-
A PNG image will be saved to the given filename.
|
16
|
-
|
17
|
-
VIM connection options:
|
18
|
-
EOS
|
19
|
-
|
20
|
-
rbvmomi_connection_opts
|
21
|
-
|
22
|
-
text <<-EOS
|
23
|
-
|
24
|
-
VM location options:
|
25
|
-
EOS
|
26
|
-
|
27
|
-
rbvmomi_datacenter_opt
|
28
|
-
|
29
|
-
text <<-EOS
|
30
|
-
|
31
|
-
Other options:
|
32
|
-
EOS
|
33
|
-
end
|
34
|
-
|
35
|
-
Trollop.die("must specify host") unless opts[:host]
|
36
|
-
vm_name = ARGV[0] or abort("must specify VM name")
|
37
|
-
output_path = ARGV[1] or abort("must specify output filename")
|
38
|
-
|
39
|
-
vim = VIM.connect opts
|
40
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter])
|
41
|
-
vm = dc.find_vm vm_name
|
42
|
-
abort "VM must be running" unless vm.runtime.powerState == 'poweredOn'
|
43
|
-
remote_path = vm.CreateScreenshot_Task.wait_for_completion
|
44
|
-
remote_path =~ /^(\/vmfs\/volumes\/[^\/]+)\// or fail
|
45
|
-
datastore_prefix = $1
|
46
|
-
datastore_path = $'
|
47
|
-
datastore = vm.datastore.find { |ds| ds.info.url == datastore_prefix }
|
48
|
-
datastore.download datastore_path, output_path
|
data/examples/vdf.rb
DELETED
@@ -1,81 +0,0 @@
|
|
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#{' '*53}Size Used Avail Use% Mounted on"
|
55
|
-
fmt = "%-62s %-8s %-8s %-8s %-8s %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
|
data/examples/vm_drs_behavior.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'trollop'
|
3
|
-
require 'rbvmomi'
|
4
|
-
require 'rbvmomi/trollop'
|
5
|
-
|
6
|
-
VIM = RbVmomi::VIM
|
7
|
-
CMDS = %w(get set)
|
8
|
-
BEHAVIOR = %w(fullyAutomated manual partiallyAutomated default)
|
9
|
-
|
10
|
-
opts = Trollop.options do
|
11
|
-
banner <<-EOS
|
12
|
-
Configure VM DRS behavior.
|
13
|
-
|
14
|
-
Usage:
|
15
|
-
vm_drs_behavior.rb [options] VM get
|
16
|
-
vm_drs_behavior.rb [options] VM set #{BEHAVIOR.join('|')}
|
17
|
-
|
18
|
-
Commands: #{CMDS * ' '}
|
19
|
-
|
20
|
-
VIM connection options:
|
21
|
-
EOS
|
22
|
-
|
23
|
-
rbvmomi_connection_opts
|
24
|
-
|
25
|
-
text <<-EOS
|
26
|
-
|
27
|
-
VM location options:
|
28
|
-
EOS
|
29
|
-
|
30
|
-
rbvmomi_datacenter_opt
|
31
|
-
|
32
|
-
text <<-EOS
|
33
|
-
|
34
|
-
Other options:
|
35
|
-
EOS
|
36
|
-
|
37
|
-
stop_on CMDS
|
38
|
-
end
|
39
|
-
|
40
|
-
Trollop.die("must specify host") unless opts[:host]
|
41
|
-
|
42
|
-
vm_name = ARGV[0] or Trollop.die("no VM name given")
|
43
|
-
cmd = ARGV[1] or Trollop.die("no command given")
|
44
|
-
abort "invalid command" unless CMDS.member? cmd
|
45
|
-
|
46
|
-
vim = VIM.connect opts
|
47
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
48
|
-
vm = dc.find_vm(vm_name) or abort "VM not found"
|
49
|
-
|
50
|
-
cluster = vm.runtime.host.parent
|
51
|
-
config = cluster.configurationEx.drsVmConfig.select {|c| c.key.name == vm.name }.first
|
52
|
-
default = cluster.configurationEx.drsConfig.defaultVmBehavior
|
53
|
-
|
54
|
-
case cmd
|
55
|
-
when 'get'
|
56
|
-
if config
|
57
|
-
behavior = config.behavior
|
58
|
-
else
|
59
|
-
behavior = "#{default} (default)"
|
60
|
-
end
|
61
|
-
puts "#{vm.name} is #{behavior}"
|
62
|
-
when 'set'
|
63
|
-
behavior = ARGV[2] or Trollop.die("no behavior given")
|
64
|
-
abort "invalid behavior" unless BEHAVIOR.member? behavior
|
65
|
-
|
66
|
-
if behavior == "default"
|
67
|
-
behavior = default
|
68
|
-
end
|
69
|
-
vm_spec =
|
70
|
-
VIM.ClusterDrsVmConfigSpec(:operation => VIM.ArrayUpdateOperation(config ? "edit" : "add"),
|
71
|
-
:info => VIM.ClusterDrsVmConfigInfo(:key => vm,
|
72
|
-
:behavior => VIM.DrsBehavior(behavior)))
|
73
|
-
spec = VIM.ClusterConfigSpecEx(:drsVmConfigSpec => [vm_spec])
|
74
|
-
cluster.ReconfigureComputeResource_Task(:spec => spec, :modify => true).wait_for_completion
|
75
|
-
end
|
76
|
-
|
@@ -1,383 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DeserializationTest < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
conn = VIM.new(:ns => 'urn:vim25', :rev => '4.0')
|
6
|
-
@deserializer = RbVmomi::Deserializer.new conn
|
7
|
-
end
|
8
|
-
|
9
|
-
def check str, expected, type
|
10
|
-
got = @deserializer.deserialize Nokogiri(str).root, type
|
11
|
-
assert_equal expected, got
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_moref
|
15
|
-
check <<-EOS, VIM.Folder(nil, 'ha-folder-root'), 'Folder'
|
16
|
-
<root type="Folder">ha-folder-root</root>
|
17
|
-
EOS
|
18
|
-
|
19
|
-
check <<-EOS, VIM.Datacenter(nil, 'ha-datacenter'), 'ManagedObjectReference'
|
20
|
-
<ManagedObjectReference type="Datacenter" xsi:type="ManagedObjectReference">ha-datacenter</ManagedObjectReference>
|
21
|
-
EOS
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_dataobject
|
25
|
-
obj = VIM.DatastoreSummary(
|
26
|
-
:capacity => 1000,
|
27
|
-
:accessible => true,
|
28
|
-
:datastore => VIM.Datastore(nil, "foo"),
|
29
|
-
:freeSpace => 31,
|
30
|
-
:multipleHostAccess => false,
|
31
|
-
:name => "baz",
|
32
|
-
:type => "VMFS",
|
33
|
-
:url => "http://foo/",
|
34
|
-
:dynamicProperty => []
|
35
|
-
)
|
36
|
-
|
37
|
-
check <<-EOS, obj, 'DatastoreSummary'
|
38
|
-
<root>
|
39
|
-
<datastore type="Datastore">foo</datastore>
|
40
|
-
<name>baz</name>
|
41
|
-
<url>http://foo/</url>
|
42
|
-
<capacity>1000</capacity>
|
43
|
-
<freeSpace>31</freeSpace>
|
44
|
-
<accessible>1</accessible>
|
45
|
-
<multipleHostAccess>false</multipleHostAccess>
|
46
|
-
<type>VMFS</type>
|
47
|
-
</root>
|
48
|
-
EOS
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_enum
|
52
|
-
check <<-EOS, 'add', 'ConfigSpecOperation'
|
53
|
-
<root>add</root>
|
54
|
-
EOS
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_array
|
58
|
-
obj = VIM.ObjectContent(
|
59
|
-
:obj => VIM.Folder(nil, 'ha-folder-root'),
|
60
|
-
:dynamicProperty => [],
|
61
|
-
:missingSet => [],
|
62
|
-
:propSet => [
|
63
|
-
VIM.DynamicProperty(
|
64
|
-
:name => 'childEntity',
|
65
|
-
:val => [
|
66
|
-
VIM.Datacenter(nil, 'ha-datacenter')
|
67
|
-
]
|
68
|
-
)
|
69
|
-
]
|
70
|
-
)
|
71
|
-
|
72
|
-
check <<-EOS, obj, 'ObjectContent'
|
73
|
-
<root xmlns:xsi="#{VIM::NS_XSI}">
|
74
|
-
<obj type="Folder">ha-folder-root</obj>
|
75
|
-
<propSet>
|
76
|
-
<name>childEntity</name>
|
77
|
-
<val xsi:type="ArrayOfManagedObjectReference">
|
78
|
-
<ManagedObjectReference type="Datacenter" xsi:type="ManagedObjectReference">ha-datacenter</ManagedObjectReference>
|
79
|
-
</val>
|
80
|
-
</propSet>
|
81
|
-
</root>
|
82
|
-
EOS
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_array2
|
86
|
-
obj = VIM.DVPortStatus(
|
87
|
-
:dynamicProperty => [],
|
88
|
-
:linkUp => true,
|
89
|
-
:blocked => false,
|
90
|
-
:vlanIds => [
|
91
|
-
VIM::NumericRange(:dynamicProperty => [], :start => 5, :end => 7),
|
92
|
-
VIM::NumericRange(:dynamicProperty => [], :start => 10, :end => 20),
|
93
|
-
],
|
94
|
-
:vmDirectPathGen2InactiveReasonNetwork => [],
|
95
|
-
:vmDirectPathGen2InactiveReasonOther => []
|
96
|
-
)
|
97
|
-
|
98
|
-
check <<-EOS, obj, 'DVPortStatus'
|
99
|
-
<root>
|
100
|
-
<linkUp>1</linkUp>
|
101
|
-
<blocked>false</blocked>
|
102
|
-
<vlanIds>
|
103
|
-
<start>5</start>
|
104
|
-
<end>7</end>
|
105
|
-
</vlanIds>
|
106
|
-
<vlanIds>
|
107
|
-
<start>10</start>
|
108
|
-
<end>20</end>
|
109
|
-
</vlanIds>
|
110
|
-
</root>
|
111
|
-
EOS
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_empty_array
|
115
|
-
obj = VIM.DVPortStatus(
|
116
|
-
:dynamicProperty => [],
|
117
|
-
:linkUp => true,
|
118
|
-
:blocked => false,
|
119
|
-
:vlanIds => [],
|
120
|
-
:vmDirectPathGen2InactiveReasonNetwork => [],
|
121
|
-
:vmDirectPathGen2InactiveReasonOther => []
|
122
|
-
)
|
123
|
-
|
124
|
-
check <<-EOS, obj, 'DVPortStatus'
|
125
|
-
<root>
|
126
|
-
<linkUp>1</linkUp>
|
127
|
-
<blocked>false</blocked>
|
128
|
-
</root>
|
129
|
-
EOS
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_fault
|
133
|
-
obj = VIM.LocalizedMethodFault(
|
134
|
-
:localizedMessage => "The attempted operation cannot be performed in the current state (Powered off).",
|
135
|
-
:fault => VIM.InvalidPowerState(
|
136
|
-
:requestedState => 'poweredOn',
|
137
|
-
:existingState => 'poweredOff',
|
138
|
-
:faultMessage => []
|
139
|
-
)
|
140
|
-
)
|
141
|
-
|
142
|
-
check <<-EOS, obj, "LocalizedMethodFault"
|
143
|
-
<error xmlns:xsi="#{VIM::NS_XSI}">
|
144
|
-
<fault xsi:type="InvalidPowerState">
|
145
|
-
<requestedState>poweredOn</requestedState>
|
146
|
-
<existingState>poweredOff</existingState>
|
147
|
-
</fault>
|
148
|
-
<localizedMessage>The attempted operation cannot be performed in the current state (Powered off).</localizedMessage>
|
149
|
-
</error>
|
150
|
-
EOS
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_wait_for_updates
|
154
|
-
obj = VIM.UpdateSet(
|
155
|
-
:version => '7',
|
156
|
-
:dynamicProperty => [],
|
157
|
-
:filterSet => [
|
158
|
-
VIM.PropertyFilterUpdate(
|
159
|
-
:dynamicProperty => [],
|
160
|
-
:filter => VIM.PropertyFilter(nil, "session[528BA5EB-335B-4AF6-B49C-6160CF5E8D5B]71E3AC7E-7927-4D9E-8BC3-522769F22DAF"),
|
161
|
-
:missingSet => [],
|
162
|
-
:objectSet => [
|
163
|
-
VIM.ObjectUpdate(
|
164
|
-
:dynamicProperty => [],
|
165
|
-
:kind => 'enter',
|
166
|
-
:obj => VIM.VirtualMachine(nil, 'vm-1106'),
|
167
|
-
:missingSet => [],
|
168
|
-
:changeSet => [
|
169
|
-
VIM.PropertyChange(
|
170
|
-
:dynamicProperty => [],
|
171
|
-
:name => 'runtime.powerState',
|
172
|
-
:op => 'assign',
|
173
|
-
:val => 'poweredOn'
|
174
|
-
)
|
175
|
-
]
|
176
|
-
)
|
177
|
-
]
|
178
|
-
)
|
179
|
-
]
|
180
|
-
)
|
181
|
-
|
182
|
-
check <<-EOS, obj, "UpdateSet"
|
183
|
-
<returnval xmlns:xsi="#{VIM::NS_XSI}">
|
184
|
-
<version>7</version>
|
185
|
-
<filterSet>
|
186
|
-
<filter type="PropertyFilter">session[528BA5EB-335B-4AF6-B49C-6160CF5E8D5B]71E3AC7E-7927-4D9E-8BC3-522769F22DAF</filter>
|
187
|
-
<objectSet>
|
188
|
-
<kind>enter</kind>
|
189
|
-
<obj type="VirtualMachine">vm-1106</obj>
|
190
|
-
<changeSet>
|
191
|
-
<name>runtime.powerState</name>
|
192
|
-
<op>assign</op>
|
193
|
-
<val xsi:type="VirtualMachinePowerState">poweredOn</val>
|
194
|
-
</changeSet>
|
195
|
-
</objectSet>
|
196
|
-
</filterSet>
|
197
|
-
</returnval>
|
198
|
-
EOS
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_binary
|
202
|
-
obj = "\x00foo\x01bar\x02baz"
|
203
|
-
check <<-EOS, obj, 'xsd:base64Binary'
|
204
|
-
<root>AGZvbwFiYXICYmF6</root>
|
205
|
-
EOS
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_hba
|
209
|
-
obj = VIM::HostBlockHba(
|
210
|
-
:dynamicProperty => [],
|
211
|
-
:key => 'key-vim.host.BlockHba-vmhba0',
|
212
|
-
:device => 'vmhba0',
|
213
|
-
:bus => 0,
|
214
|
-
:status => 'unknown',
|
215
|
-
:model => 'Virtual Machine Chipset',
|
216
|
-
:driver => 'ata_piix',
|
217
|
-
:pci => '00:07.1')
|
218
|
-
|
219
|
-
check <<-EOS, obj, "HostBlockHba"
|
220
|
-
<hostBusAdapter xsi:type="HostBlockHba">
|
221
|
-
<key>key-vim.host.BlockHba-vmhba0</key>
|
222
|
-
<device>vmhba0</device>
|
223
|
-
<bus>0</bus>
|
224
|
-
<status>unknown</status>
|
225
|
-
<model>Virtual Machine Chipset</model>
|
226
|
-
<driver>ata_piix</driver>
|
227
|
-
<pci>00:07.1</pci>
|
228
|
-
</hostBusAdapter>
|
229
|
-
EOS
|
230
|
-
end
|
231
|
-
|
232
|
-
=begin
|
233
|
-
def test_runtime_state
|
234
|
-
obj = VIM::VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeState(
|
235
|
-
:dynamicProperty => [],
|
236
|
-
vmDirectPathGen2:Active => false,
|
237
|
-
vmDirectPathGen2:InactiveReasonOther => ["vmNptIncompatibleHost"],
|
238
|
-
vmDirectPathGen2:InactiveReasonVm => []
|
239
|
-
)
|
240
|
-
check <<-EOS, obj, 'VirtualMachineDeviceRuntimeInfoDeviceRuntimeState'
|
241
|
-
<runtimeState xsi:type="VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeState" xmlns:xsi="#{VIM::NS_XSI}">
|
242
|
-
<vmDirectPathGen2Active>false</vmDirectPathGen2Active>
|
243
|
-
<vmDirectPathGen2InactiveReasonOther>vmNptIncompatibleHost</vmDirectPathGen2InactiveReasonOther>
|
244
|
-
</runtimeState>
|
245
|
-
EOS
|
246
|
-
end
|
247
|
-
=end
|
248
|
-
|
249
|
-
def test_runtime_info
|
250
|
-
obj = VIM::VirtualMachineRuntimeInfo(
|
251
|
-
:bootTime => Time.parse('2010-08-20 05:44:35 UTC'),
|
252
|
-
:connectionState => "connected",
|
253
|
-
:dynamicProperty => [],
|
254
|
-
:faultToleranceState => "notConfigured",
|
255
|
-
:featureMask => [],
|
256
|
-
:featureRequirement => [],
|
257
|
-
:host => VIM::HostSystem(nil, "host-32"),
|
258
|
-
:maxCpuUsage => 5612,
|
259
|
-
:maxMemoryUsage => 3072,
|
260
|
-
:memoryOverhead => 128671744,
|
261
|
-
:numMksConnections => 1,
|
262
|
-
:offlineFeatureRequirement => [],
|
263
|
-
:powerState => "poweredOn",
|
264
|
-
:recordReplayState => "inactive",
|
265
|
-
:suspendInterval => 0,
|
266
|
-
:toolsInstallerMounted => false,
|
267
|
-
:device => []
|
268
|
-
)
|
269
|
-
|
270
|
-
check <<-EOS, obj, 'VirtualMachineRuntimeInfo'
|
271
|
-
<val xsi:type="VirtualMachineRuntimeInfo" xmlns:xsi="#{VIM::NS_XSI}">
|
272
|
-
<host type="HostSystem">host-32</host>
|
273
|
-
<connectionState>connected</connectionState>
|
274
|
-
<powerState>poweredOn</powerState>
|
275
|
-
<faultToleranceState>notConfigured</faultToleranceState>
|
276
|
-
<toolsInstallerMounted>false</toolsInstallerMounted>
|
277
|
-
<bootTime>2010-08-20T05:44:35.0Z</bootTime>
|
278
|
-
<suspendInterval>0</suspendInterval>
|
279
|
-
<memoryOverhead>128671744</memoryOverhead>
|
280
|
-
<maxCpuUsage>5612</maxCpuUsage>
|
281
|
-
<maxMemoryUsage>3072</maxMemoryUsage>
|
282
|
-
<numMksConnections>1</numMksConnections>
|
283
|
-
<recordReplayState>inactive</recordReplayState>
|
284
|
-
</val>
|
285
|
-
EOS
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_keyvalue
|
289
|
-
obj = ['a', 'b']
|
290
|
-
check <<-EOS, obj, 'KeyValue'
|
291
|
-
<root>
|
292
|
-
<key>a</key>
|
293
|
-
<value>b</value>
|
294
|
-
</root>
|
295
|
-
EOS
|
296
|
-
end
|
297
|
-
|
298
|
-
def test_boolean
|
299
|
-
check "<root>1</root>", true, 'xsd:boolean'
|
300
|
-
check "<root>true</root>", true, 'xsd:boolean'
|
301
|
-
check "<root>0</root>", false, 'xsd:boolean'
|
302
|
-
check "<root>false</root>", false, 'xsd:boolean'
|
303
|
-
end
|
304
|
-
|
305
|
-
def test_int
|
306
|
-
check "<root>5</root>", 5, 'xsd:byte'
|
307
|
-
check "<root>5</root>", 5, 'xsd:short'
|
308
|
-
check "<root>5</root>", 5, 'xsd:int'
|
309
|
-
check "<root>5</root>", 5, 'xsd:long'
|
310
|
-
end
|
311
|
-
|
312
|
-
def test_float
|
313
|
-
obj = 1.2
|
314
|
-
check <<-EOS, obj, 'xsd:float'
|
315
|
-
<root>1.2</root>
|
316
|
-
EOS
|
317
|
-
end
|
318
|
-
|
319
|
-
def test_date
|
320
|
-
time_str = '2010-08-20T05:44:35.0Z'
|
321
|
-
obj = Time.parse(time_str)
|
322
|
-
check <<-EOS, obj, 'xsd:dateTime'
|
323
|
-
<root>#{time_str}</root>
|
324
|
-
EOS
|
325
|
-
end
|
326
|
-
|
327
|
-
def test_array_mangling
|
328
|
-
obj = ["foo"]
|
329
|
-
check <<-EOS, obj, 'ArrayOfString'
|
330
|
-
<root><e>foo</e></root>
|
331
|
-
EOS
|
332
|
-
|
333
|
-
time_str = '2010-08-20T05:44:35.0Z'
|
334
|
-
obj = [Time.parse(time_str)]
|
335
|
-
check <<-EOS, obj, 'ArrayOfDateTime'
|
336
|
-
<root><e>#{time_str}</e></root>
|
337
|
-
EOS
|
338
|
-
|
339
|
-
obj = [1]
|
340
|
-
check <<-EOS, obj, 'ArrayOfAnyType'
|
341
|
-
<root xmlns:xsi="#{VIM::NS_XSI}">
|
342
|
-
<e xsi:type="xsd:int">1</e>
|
343
|
-
</root>
|
344
|
-
EOS
|
345
|
-
end
|
346
|
-
|
347
|
-
def test_propertypath
|
348
|
-
check "<root>foo</root>", "foo", 'PropertyPath'
|
349
|
-
end
|
350
|
-
|
351
|
-
def test_methodname
|
352
|
-
check "<root>foo</root>", "foo", 'MethodName'
|
353
|
-
end
|
354
|
-
|
355
|
-
def test_typename
|
356
|
-
check "<root>foo</root>", "foo", 'TypeName'
|
357
|
-
end
|
358
|
-
|
359
|
-
def test_new_fields
|
360
|
-
obj = VIM::HostBlockHba(
|
361
|
-
:dynamicProperty => [],
|
362
|
-
:key => 'key-vim.host.BlockHba-vmhba0',
|
363
|
-
:device => 'vmhba0',
|
364
|
-
:bus => 0,
|
365
|
-
:status => 'unknown',
|
366
|
-
:model => 'Virtual Machine Chipset',
|
367
|
-
:driver => 'ata_piix',
|
368
|
-
:pci => '00:07.1')
|
369
|
-
|
370
|
-
check <<-EOS, obj, "HostBlockHba"
|
371
|
-
<hostBusAdapter xsi:type="HostBlockHba">
|
372
|
-
<key>key-vim.host.BlockHba-vmhba0</key>
|
373
|
-
<device>vmhba0</device>
|
374
|
-
<bus>0</bus>
|
375
|
-
<status>unknown</status>
|
376
|
-
<foo>bar</foo>
|
377
|
-
<model>Virtual Machine Chipset</model>
|
378
|
-
<driver>ata_piix</driver>
|
379
|
-
<pci>00:07.1</pci>
|
380
|
-
</hostBusAdapter>
|
381
|
-
EOS
|
382
|
-
end
|
383
|
-
end
|