rbvmomi 1.8.2 → 2.4.1
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.
- 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/devel/collisions.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Find collisions between VMODL property names and Ruby methods
|
3
|
-
require 'rbvmomi'
|
4
|
-
VIM = RbVmomi::VIM
|
5
|
-
|
6
|
-
conn = VIM.new(:ns => 'urn:vim25', :rev => '4.0')
|
7
|
-
|
8
|
-
VIM.loader.typenames.each do |name|
|
9
|
-
klass = VIM.loader.get name
|
10
|
-
next unless klass.respond_to? :kind and [:managed, :data].member? klass.kind
|
11
|
-
methods = klass.kind == :managed ?
|
12
|
-
RbVmomi::BasicTypes::ObjectWithMethods.instance_methods :
|
13
|
-
RbVmomi::BasicTypes::ObjectWithProperties.instance_methods
|
14
|
-
klass.props_desc.each do |x|
|
15
|
-
name = x['name']
|
16
|
-
puts "collision: #{klass}##{name}" if methods.member? name.to_sym
|
17
|
-
end
|
18
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# These types are not public and so may change between releases. Do not
|
3
|
-
# use them directly.
|
4
|
-
|
5
|
-
public_vmodl_filename = ARGV[0] or abort "public vmodl filename required"
|
6
|
-
internal_vmodl_filename = ARGV[1] or abort "internal vmodl filename required"
|
7
|
-
output_vmodl_filename = ARGV[2] or abort "output vmodl filename required"
|
8
|
-
|
9
|
-
TYPES = %w(
|
10
|
-
DVSKeyedOpaqueData
|
11
|
-
DVSOpaqueDataConfigSpec
|
12
|
-
DVPortgroupSelection
|
13
|
-
DVPortSelection
|
14
|
-
DVSSelection
|
15
|
-
DynamicTypeEnumTypeInfo
|
16
|
-
DynamicTypeMgrAllTypeInfo
|
17
|
-
DynamicTypeMgrAnnotation
|
18
|
-
DynamicTypeMgrDataTypeInfo
|
19
|
-
DynamicTypeMgrFilterSpec
|
20
|
-
DynamicTypeMgrManagedTypeInfo
|
21
|
-
DynamicTypeMgrMethodTypeInfo
|
22
|
-
DynamicTypeMgrMethodTypeInfoAnnotationType
|
23
|
-
DynamicTypeMgrMoFilterSpec
|
24
|
-
DynamicTypeMgrMoInstance
|
25
|
-
DynamicTypeMgrParamTypeInfo
|
26
|
-
DynamicTypeMgrParamTypeInfoAnnotationType
|
27
|
-
DynamicTypeMgrPropertyTypeInfo
|
28
|
-
DynamicTypeMgrPropertyTypeInfoAnnotationType
|
29
|
-
DynamicTypeMgrTypeFilterSpec
|
30
|
-
InternalDynamicTypeManager
|
31
|
-
ReflectManagedMethodExecuter
|
32
|
-
ReflectManagedMethodExecuterSoapArgument
|
33
|
-
ReflectManagedMethodExecuterSoapFault
|
34
|
-
ReflectManagedMethodExecuterSoapResult
|
35
|
-
SelectionSet
|
36
|
-
)
|
37
|
-
|
38
|
-
METHODS = %w(
|
39
|
-
DistributedVirtualSwitchManager.UpdateDvsOpaqueData_Task
|
40
|
-
HostSystem.RetrieveDynamicTypeManager
|
41
|
-
HostSystem.RetrieveManagedMethodExecuter
|
42
|
-
)
|
43
|
-
|
44
|
-
public_vmodl = File.open(public_vmodl_filename, 'r') { |io| Marshal.load io }
|
45
|
-
internal_vmodl = File.open(internal_vmodl_filename, 'r') { |io| Marshal.load io }
|
46
|
-
|
47
|
-
TYPES.each do |k|
|
48
|
-
puts "Merging in #{k}"
|
49
|
-
fail "Couldn't find type #{k} in internal VMODL" unless internal_vmodl.member? k
|
50
|
-
public_vmodl[k] = internal_vmodl[k]
|
51
|
-
end
|
52
|
-
|
53
|
-
METHODS.each do |x|
|
54
|
-
puts "Merging in #{x}"
|
55
|
-
type, method = x.split '.'
|
56
|
-
public_vmodl[type]['methods'][method] = internal_vmodl[type]['methods'][method] or fail
|
57
|
-
end
|
58
|
-
|
59
|
-
File.open(output_vmodl_filename, 'w') { |io| Marshal.dump public_vmodl, io }
|
data/devel/merge-manual-vmodl.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Manually merge two versions of vmodl.db
|
3
|
-
|
4
|
-
public_vmodl_filename = ARGV[0] or abort "public vmodl filename required"
|
5
|
-
internal_vmodl_filename = ARGV[1] or abort "internal vmodl filename required"
|
6
|
-
output_vmodl_filename = ARGV[2] or abort "output vmodl filename required"
|
7
|
-
|
8
|
-
public_vmodl = File.open(public_vmodl_filename, 'r') { |io| Marshal.load io }
|
9
|
-
internal_vmodl = File.open(internal_vmodl_filename, 'r') { |io| Marshal.load io }
|
10
|
-
|
11
|
-
db = {}
|
12
|
-
tn = {}
|
13
|
-
public_vmodl.each do |k,v|
|
14
|
-
unless k == '_typenames'
|
15
|
-
db[k] = v
|
16
|
-
else
|
17
|
-
tn['_typenames'] = v
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
internal_vmodl.each do |k, v|
|
22
|
-
unless k == '_typenames'
|
23
|
-
db[k] = v unless db[k]
|
24
|
-
else
|
25
|
-
tn['_typenames'] = tn['_typenames'] + v
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
db['_typenames'] = tn
|
30
|
-
|
31
|
-
|
32
|
-
File.open(output_vmodl_filename, 'w') { |io| Marshal.dump db, io }
|
data/examples/annotate.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'trollop'
|
2
|
-
require 'rbvmomi'
|
3
|
-
require 'rbvmomi/trollop'
|
4
|
-
|
5
|
-
VIM = RbVmomi::VIM
|
6
|
-
CMDS = %w(get set)
|
7
|
-
|
8
|
-
opts = Trollop.options do
|
9
|
-
banner <<-EOS
|
10
|
-
Annotate a VM.
|
11
|
-
|
12
|
-
Usage:
|
13
|
-
annotate.rb [options] VM get
|
14
|
-
annotate.rb [options] VM set annotation
|
15
|
-
|
16
|
-
Commands: #{CMDS * ' '}
|
17
|
-
|
18
|
-
VIM connection options:
|
19
|
-
EOS
|
20
|
-
|
21
|
-
rbvmomi_connection_opts
|
22
|
-
|
23
|
-
text <<-EOS
|
24
|
-
|
25
|
-
VM location options:
|
26
|
-
EOS
|
27
|
-
|
28
|
-
rbvmomi_datacenter_opt
|
29
|
-
|
30
|
-
text <<-EOS
|
31
|
-
|
32
|
-
Other options:
|
33
|
-
EOS
|
34
|
-
|
35
|
-
stop_on CMDS
|
36
|
-
end
|
37
|
-
|
38
|
-
vm_name = ARGV[0] or Trollop.die("no VM name given")
|
39
|
-
cmd = ARGV[1] or Trollop.die("no command given")
|
40
|
-
abort "invalid command" unless CMDS.member? cmd
|
41
|
-
Trollop.die("must specify host") unless opts[:host]
|
42
|
-
|
43
|
-
vim = VIM.connect opts
|
44
|
-
|
45
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
46
|
-
vm = dc.find_vm(vm_name) or abort "VM not found"
|
47
|
-
|
48
|
-
case cmd
|
49
|
-
when 'get'
|
50
|
-
puts vm.config.annotation
|
51
|
-
when 'set'
|
52
|
-
value = ARGV[2] or Trollop.die("no annotation given")
|
53
|
-
vm.ReconfigVM_Task(:spec => VIM.VirtualMachineConfigSpec(:annotation => value)).wait_for_completion
|
54
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'trollop'
|
3
|
-
require 'rbvmomi'
|
4
|
-
require 'rbvmomi/trollop'
|
5
|
-
require 'rbvmomi/utils/deploy'
|
6
|
-
require 'rbvmomi/utils/admission_control'
|
7
|
-
require 'yaml'
|
8
|
-
|
9
|
-
VIM = RbVmomi::VIM
|
10
|
-
|
11
|
-
opts = Trollop.options do
|
12
|
-
banner <<-EOS
|
13
|
-
Deploy an OVF to a cluster, using a cached template if available.
|
14
|
-
|
15
|
-
Usage:
|
16
|
-
cached_ovf_deploy.rb [options] <vmname> <ovfurl>
|
17
|
-
|
18
|
-
VIM connection options:
|
19
|
-
EOS
|
20
|
-
|
21
|
-
rbvmomi_connection_opts
|
22
|
-
|
23
|
-
text <<-EOS
|
24
|
-
|
25
|
-
VM location options:
|
26
|
-
EOS
|
27
|
-
|
28
|
-
rbvmomi_datacenter_opt
|
29
|
-
rbvmomi_datastore_opt
|
30
|
-
|
31
|
-
text <<-EOS
|
32
|
-
|
33
|
-
Other options:
|
34
|
-
EOS
|
35
|
-
|
36
|
-
opt :template_name, "Name to give to the (cached) template", :type => :string
|
37
|
-
opt :template_path, "Path where templates are stored", :default => 'templates', :type => :string
|
38
|
-
opt :computer_path, "Path to the cluster to deploy into", :type => :string
|
39
|
-
opt :network, "Name of the network to attach template to", :type => :string
|
40
|
-
opt :vm_folder_path, "Path to VM folder to deploy VM into", :type => :string
|
41
|
-
opt :lease, "Lease in days", :type => :int, :default => 3
|
42
|
-
end
|
43
|
-
|
44
|
-
Trollop.die("must specify host") unless opts[:host]
|
45
|
-
Trollop.die("no cluster path given") unless opts[:computer_path]
|
46
|
-
template_folder_path = opts[:template_path]
|
47
|
-
template_name = opts[:template_name] or Trollop.die("no template name given")
|
48
|
-
vm_name = ARGV[0] or Trollop.die("no VM name given")
|
49
|
-
ovf_url = ARGV[1] or Trollop.die("No OVF URL given")
|
50
|
-
|
51
|
-
vim = VIM.connect opts
|
52
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
53
|
-
|
54
|
-
root_vm_folder = dc.vmFolder
|
55
|
-
vm_folder = root_vm_folder
|
56
|
-
if opts[:vm_folder_path]
|
57
|
-
vm_folder = root_vm_folder.traverse(opts[:vm_folder_path], VIM::Folder)
|
58
|
-
end
|
59
|
-
template_folder = root_vm_folder.traverse!(template_folder_path, VIM::Folder)
|
60
|
-
|
61
|
-
scheduler = AdmissionControlledResourceScheduler.new(
|
62
|
-
vim,
|
63
|
-
:datacenter => dc,
|
64
|
-
:computer_names => [opts[:computer_path]],
|
65
|
-
:vm_folder => vm_folder,
|
66
|
-
:rp_path => '/',
|
67
|
-
:datastore_paths => [opts[:datastore]],
|
68
|
-
:max_vms_per_pod => nil, # No limits
|
69
|
-
:min_ds_free => nil, # No limits
|
70
|
-
)
|
71
|
-
scheduler.make_placement_decision
|
72
|
-
|
73
|
-
datastore = scheduler.datastore
|
74
|
-
computer = scheduler.pick_computer
|
75
|
-
# XXX: Do this properly
|
76
|
-
if opts[:network]
|
77
|
-
network = computer.network.find{|x| x.name == opts[:network]}
|
78
|
-
else
|
79
|
-
network = computer.network[0]
|
80
|
-
end
|
81
|
-
|
82
|
-
lease_tool = LeaseTool.new
|
83
|
-
lease = opts[:lease] * 24 * 60 * 60
|
84
|
-
deployer = CachedOvfDeployer.new(
|
85
|
-
vim, network, computer, template_folder, vm_folder, datastore
|
86
|
-
)
|
87
|
-
template = deployer.lookup_template template_name
|
88
|
-
|
89
|
-
if !template
|
90
|
-
puts "#{Time.now}: Uploading/Preparing OVF template ..."
|
91
|
-
|
92
|
-
template = deployer.upload_ovf_as_template(
|
93
|
-
ovf_url, template_name,
|
94
|
-
:run_without_interruptions => true,
|
95
|
-
:config => lease_tool.set_lease_in_vm_config({}, lease)
|
96
|
-
)
|
97
|
-
end
|
98
|
-
|
99
|
-
puts "#{Time.now}: Cloning template ..."
|
100
|
-
config = {
|
101
|
-
:numCPUs => opts[:cpus],
|
102
|
-
:memoryMB => opts[:memory],
|
103
|
-
}
|
104
|
-
config = lease_tool.set_lease_in_vm_config(config, lease)
|
105
|
-
vm = deployer.linked_clone template, vm_name, config
|
106
|
-
|
107
|
-
puts "#{Time.now}: Powering On VM ..."
|
108
|
-
# XXX: Add a retrying version?
|
109
|
-
vm.PowerOnVM_Task.wait_for_completion
|
110
|
-
|
111
|
-
puts "#{Time.now}: Waiting for VM to be up ..."
|
112
|
-
ip = nil
|
113
|
-
while !(ip = vm.guest_ip)
|
114
|
-
sleep 5
|
115
|
-
end
|
116
|
-
|
117
|
-
puts "#{Time.now}: VM got IP: #{ip}"
|
118
|
-
|
119
|
-
puts "#{Time.now}: Done"
|
120
|
-
|
data/examples/clone_vm.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
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
|
-
Clone a VM.
|
11
|
-
|
12
|
-
Usage:
|
13
|
-
clone_vm.rb [options] source_vm dest_vm
|
14
|
-
|
15
|
-
VIM connection options:
|
16
|
-
EOS
|
17
|
-
|
18
|
-
rbvmomi_connection_opts
|
19
|
-
|
20
|
-
text <<-EOS
|
21
|
-
|
22
|
-
VM location options:
|
23
|
-
EOS
|
24
|
-
|
25
|
-
rbvmomi_datacenter_opt
|
26
|
-
|
27
|
-
text <<-EOS
|
28
|
-
|
29
|
-
Other options:
|
30
|
-
EOS
|
31
|
-
|
32
|
-
opt :linked_clone, "Use a linked clone instead of a full clone"
|
33
|
-
end
|
34
|
-
|
35
|
-
Trollop.die("must specify host") unless opts[:host]
|
36
|
-
ARGV.size == 2 or abort "must specify VM source name and VM target name"
|
37
|
-
vm_source = ARGV[0]
|
38
|
-
vm_target = ARGV[1]
|
39
|
-
|
40
|
-
vim = VIM.connect opts
|
41
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
42
|
-
vm = dc.find_vm(vm_source) or abort "VM not found"
|
43
|
-
|
44
|
-
if opts[:linked_clone]
|
45
|
-
# The API for linked clones is quite strange. We can't create a linked
|
46
|
-
# straight from any VM. The disks of the VM for which we can create a
|
47
|
-
# linked clone need to be read-only and thus VC demands that the VM we
|
48
|
-
# are cloning from uses delta-disks. Only then it will allow us to
|
49
|
-
# share the base disk.
|
50
|
-
#
|
51
|
-
# Thus, this code first create a delta disk on top of the base disk for
|
52
|
-
# the to-be-cloned VM, if delta disks aren't used already.
|
53
|
-
disks = vm.config.hardware.device.grep(VIM::VirtualDisk)
|
54
|
-
disks.select { |x| x.backing.parent == nil }.each do |disk|
|
55
|
-
spec = {
|
56
|
-
:deviceChange => [
|
57
|
-
{
|
58
|
-
:operation => :remove,
|
59
|
-
:device => disk
|
60
|
-
},
|
61
|
-
{
|
62
|
-
:operation => :add,
|
63
|
-
:fileOperation => :create,
|
64
|
-
:device => disk.dup.tap { |x|
|
65
|
-
x.backing = x.backing.dup
|
66
|
-
x.backing.fileName = "[#{disk.backing.datastore.name}]"
|
67
|
-
x.backing.parent = disk.backing
|
68
|
-
},
|
69
|
-
}
|
70
|
-
]
|
71
|
-
}
|
72
|
-
vm.ReconfigVM_Task(:spec => spec).wait_for_completion
|
73
|
-
end
|
74
|
-
|
75
|
-
relocateSpec = VIM.VirtualMachineRelocateSpec(:diskMoveType => :moveChildMostDiskBacking)
|
76
|
-
else
|
77
|
-
relocateSpec = VIM.VirtualMachineRelocateSpec
|
78
|
-
end
|
79
|
-
|
80
|
-
spec = VIM.VirtualMachineCloneSpec(:location => relocateSpec,
|
81
|
-
:powerOn => false,
|
82
|
-
:template => false)
|
83
|
-
|
84
|
-
vm.CloneVM_Task(:folder => vm.parent, :name => vm_target, :spec => spec).wait_for_completion
|
data/examples/create_vm-1.9.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
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
|
-
Create a VM.
|
11
|
-
|
12
|
-
Usage:
|
13
|
-
create_vm-1.9.rb [options]
|
14
|
-
|
15
|
-
VIM connection options:
|
16
|
-
EOS
|
17
|
-
|
18
|
-
rbvmomi_connection_opts
|
19
|
-
|
20
|
-
text <<-EOS
|
21
|
-
|
22
|
-
VM location options:
|
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
|
-
vm_name = ARGV[0] or abort "must specify VM name"
|
35
|
-
|
36
|
-
vim = VIM.connect opts
|
37
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
38
|
-
vmFolder = dc.vmFolder
|
39
|
-
hosts = dc.hostFolder.children
|
40
|
-
rp = hosts.first.resourcePool
|
41
|
-
|
42
|
-
vm_cfg = {
|
43
|
-
name: vm_name,
|
44
|
-
guestId: 'otherGuest',
|
45
|
-
files: { vmPathName: '[datastore1]' },
|
46
|
-
numCPUs: 1,
|
47
|
-
memoryMB: 128,
|
48
|
-
deviceChange: [
|
49
|
-
{
|
50
|
-
operation: :add,
|
51
|
-
device: VIM.VirtualLsiLogicController(
|
52
|
-
key: 1000,
|
53
|
-
busNumber: 0,
|
54
|
-
sharedBus: :noSharing,
|
55
|
-
)
|
56
|
-
}, {
|
57
|
-
operation: :add,
|
58
|
-
fileOperation: :create,
|
59
|
-
device: VIM.VirtualDisk(
|
60
|
-
key: 0,
|
61
|
-
backing: VIM.VirtualDiskFlatVer2BackingInfo(
|
62
|
-
fileName: '[datastore1]',
|
63
|
-
diskMode: :persistent,
|
64
|
-
thinProvisioned: true,
|
65
|
-
),
|
66
|
-
controllerKey: 1000,
|
67
|
-
unitNumber: 0,
|
68
|
-
capacityInKB: 4000000,
|
69
|
-
)
|
70
|
-
}, {
|
71
|
-
operation: :add,
|
72
|
-
device: VIM.VirtualE1000(
|
73
|
-
key: 0,
|
74
|
-
deviceInfo: {
|
75
|
-
label: 'Network Adapter 1',
|
76
|
-
summary: 'VM Network',
|
77
|
-
},
|
78
|
-
backing: VIM.VirtualEthernetCardNetworkBackingInfo(
|
79
|
-
deviceName: 'VM Network',
|
80
|
-
),
|
81
|
-
addressType: 'generated'
|
82
|
-
)
|
83
|
-
}
|
84
|
-
],
|
85
|
-
extraConfig: [
|
86
|
-
{
|
87
|
-
key: 'bios.bootOrder',
|
88
|
-
value: 'ethernet0'
|
89
|
-
}
|
90
|
-
]
|
91
|
-
}
|
92
|
-
|
93
|
-
vmFolder.CreateVM_Task(:config => vm_cfg, :pool => rp).wait_for_completion
|