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/examples/create_vm.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.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
|
data/examples/extraConfig.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'trollop'
|
2
|
-
require 'rbvmomi'
|
3
|
-
require 'rbvmomi/trollop'
|
4
|
-
|
5
|
-
VIM = RbVmomi::VIM
|
6
|
-
CMDS = %w(list set)
|
7
|
-
|
8
|
-
opts = Trollop.options do
|
9
|
-
banner <<-EOS
|
10
|
-
View and modify VM extraConfig options.
|
11
|
-
|
12
|
-
Usage:
|
13
|
-
extraConfig.rb [options] VM list
|
14
|
-
extraConfig.rb [options] VM set key=value [key=value...]
|
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 'list'
|
50
|
-
vm.config.extraConfig.each { |x| puts "#{x.key}: #{x.value}" }
|
51
|
-
when 'set'
|
52
|
-
extraConfig = ARGV[2..-1].map { |x| x.split("=", 2) }.map { |k,v| { :key => k, :value => v } }
|
53
|
-
vm.ReconfigVM_Task(:spec => VIM.VirtualMachineConfigSpec(:extraConfig => extraConfig)).wait_for_completion
|
54
|
-
end
|
data/examples/lease_tool.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'trollop'
|
3
|
-
require 'rbvmomi'
|
4
|
-
require 'rbvmomi/trollop'
|
5
|
-
require 'rbvmomi/utils/leases'
|
6
|
-
require 'yaml'
|
7
|
-
|
8
|
-
VIM = RbVmomi::VIM
|
9
|
-
CMDS = ['set_lease_on_leaseless_vms', 'show_expired_vms',
|
10
|
-
'show_soon_expired_vms', 'kill_expired_vms']
|
11
|
-
|
12
|
-
opts = Trollop.options do
|
13
|
-
banner <<-EOS
|
14
|
-
Tool for managing leases on VMs where leases are stored in YAML on VM annotations.
|
15
|
-
|
16
|
-
Usage:
|
17
|
-
lease_tool.rb [options] <cmd>
|
18
|
-
|
19
|
-
Commands: #{CMDS * ' '}
|
20
|
-
|
21
|
-
VIM connection options:
|
22
|
-
EOS
|
23
|
-
|
24
|
-
rbvmomi_connection_opts
|
25
|
-
|
26
|
-
text <<-EOS
|
27
|
-
|
28
|
-
VM location options:
|
29
|
-
EOS
|
30
|
-
|
31
|
-
rbvmomi_datacenter_opt
|
32
|
-
|
33
|
-
text <<-EOS
|
34
|
-
|
35
|
-
Other options:
|
36
|
-
EOS
|
37
|
-
|
38
|
-
opt :vm_folder_path, "Path to VM folder to deploy VM into", :type => :string
|
39
|
-
opt :force, "Really perform VMs. Used with kill_expired_vms"
|
40
|
-
|
41
|
-
stop_on CMDS
|
42
|
-
end
|
43
|
-
|
44
|
-
Trollop.die("must specify host") unless opts[:host]
|
45
|
-
cmd = ARGV[0] or Trollop.die("no command given")
|
46
|
-
Trollop.die("no vm folder path given") unless opts[:vm_folder_path]
|
47
|
-
|
48
|
-
vim = VIM.connect opts
|
49
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
50
|
-
|
51
|
-
root_vm_folder = dc.vmFolder
|
52
|
-
vm_folder = root_vm_folder.traverse(opts[:vm_folder_path], VIM::Folder)
|
53
|
-
|
54
|
-
lease_tool = LeaseTool.new
|
55
|
-
vms_props_list = (['runtime.powerState'] + lease_tool.vms_props_list).uniq
|
56
|
-
inventory = vm_folder.inventory_flat('VirtualMachine' => vms_props_list)
|
57
|
-
inventory = inventory.select{|obj, props| obj.is_a?(VIM::VirtualMachine)}
|
58
|
-
case cmd
|
59
|
-
when 'set_lease_on_leaseless_vms'
|
60
|
-
lease_tool.set_lease_on_leaseless_vms(
|
61
|
-
inventory.keys, inventory,
|
62
|
-
:lease_minutes => 3 * 24 * 60 * 60 # 3 days
|
63
|
-
)
|
64
|
-
when 'show_expired_vms'
|
65
|
-
vms = lease_tool.filter_expired_vms inventory.keys, inventory
|
66
|
-
vms.each do |vm, time_to_expiration|
|
67
|
-
puts "VM '#{inventory[vm]['name']}' is expired"
|
68
|
-
end
|
69
|
-
when 'kill_expired_vms'
|
70
|
-
vms = lease_tool.filter_expired_vms inventory.keys, inventory
|
71
|
-
vms.each do |vm, time_to_expiration|
|
72
|
-
puts "VM '#{inventory[vm]['name']}' is expired"
|
73
|
-
if !opts[:force]
|
74
|
-
puts "NOT killing VM '#{inventory[vm]['name']}' because --force not set"
|
75
|
-
else
|
76
|
-
puts "Killing expired VM '#{inventory[vm]['name']}'"
|
77
|
-
# Destroying VMs is very stressful for vCenter, and we aren't in a rush
|
78
|
-
# so do one VM at a time
|
79
|
-
if inventory[vm]['runtime.powerState'] == 'poweredOn'
|
80
|
-
vm.PowerOffVM_Task.wait_for_completion
|
81
|
-
end
|
82
|
-
vm.Destroy_Task.wait_for_completion
|
83
|
-
end
|
84
|
-
end
|
85
|
-
when 'show_soon_expired_vms'
|
86
|
-
vms = lease_tool.filter_expired_vms(
|
87
|
-
inventory.keys, inventory,
|
88
|
-
:time_delta => 3.5 * 24 * 60 * 60, # 3.5 days
|
89
|
-
)
|
90
|
-
# We could send the user emails here, but for this example, just print the
|
91
|
-
# VMs that will expire within the next 3.5 days
|
92
|
-
vms.each do |vm, time_to_expiration|
|
93
|
-
if time_to_expiration > 0
|
94
|
-
hours_to_expiration = time_to_expiration / (60.0 * 60.0)
|
95
|
-
puts "VM '%s' expires in %.2fh" % [inventory[vm]['name'], hours_to_expiration]
|
96
|
-
else
|
97
|
-
puts "VM '#{inventory[vm]['name']}' is expired"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
else
|
101
|
-
abort "invalid command"
|
102
|
-
end
|
data/examples/logbundle.rb
DELETED
@@ -1,63 +0,0 @@
|
|
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
|
data/examples/logtail.rb
DELETED
@@ -1,60 +0,0 @@
|
|
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/nfs_datastore.rb
DELETED
@@ -1,95 +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(mount unmount)
|
8
|
-
|
9
|
-
opts = Trollop.options do
|
10
|
-
banner <<-EOS
|
11
|
-
Mount/Unmount an NFS datastore from a cluster or single host system.
|
12
|
-
|
13
|
-
Usage:
|
14
|
-
nfs_datastore.rb [options] resource mount nfs-hostname:/remote/path [name]
|
15
|
-
nfs_datastore.rb [options] resource unmount nfs-hostname:/remote/path [name]
|
16
|
-
|
17
|
-
Commands: #{CMDS * ' '}
|
18
|
-
|
19
|
-
VIM connection options:
|
20
|
-
EOS
|
21
|
-
|
22
|
-
rbvmomi_connection_opts
|
23
|
-
|
24
|
-
text <<-EOS
|
25
|
-
|
26
|
-
VM location options:
|
27
|
-
EOS
|
28
|
-
|
29
|
-
rbvmomi_datacenter_opt
|
30
|
-
|
31
|
-
text <<-EOS
|
32
|
-
|
33
|
-
Other options:
|
34
|
-
EOS
|
35
|
-
|
36
|
-
stop_on CMDS
|
37
|
-
end
|
38
|
-
|
39
|
-
Trollop.die("must specify host") unless opts[:host]
|
40
|
-
|
41
|
-
cr_path = ARGV[0] or Trollop.die("no system name given")
|
42
|
-
cmd = ARGV[1] or Trollop.die("no command given")
|
43
|
-
abort "invalid command" unless CMDS.member? cmd
|
44
|
-
nfs_spec = ARGV[2] or Trollop.die("no nfs path given")
|
45
|
-
remoteHost, remotePath = nfs_spec.split(":")
|
46
|
-
localPath = ARGV[3] || remoteHost
|
47
|
-
mode = "readOnly" #hardcoded.
|
48
|
-
|
49
|
-
vim = VIM.connect opts
|
50
|
-
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
51
|
-
cr = dc.find_compute_resource(cr_path) || dc.hostFolder.children.find(cr_path).first
|
52
|
-
abort "compute resource not found" unless cr
|
53
|
-
|
54
|
-
case cr
|
55
|
-
when VIM::ClusterComputeResource
|
56
|
-
hosts = cr.host
|
57
|
-
when VIM::ComputeResource
|
58
|
-
hosts = [cr]
|
59
|
-
else
|
60
|
-
abort "invalid resource"
|
61
|
-
end
|
62
|
-
|
63
|
-
hosts.each do |host|
|
64
|
-
hds = host.configManager.datastoreSystem
|
65
|
-
|
66
|
-
ds = hds.datastore.select {|ds|
|
67
|
-
ds.info.respond_to?(:nas) and
|
68
|
-
ds.info.name == localPath and
|
69
|
-
ds.info.nas.remoteHost == remoteHost and
|
70
|
-
ds.info.nas.remotePath == remotePath
|
71
|
-
}.first
|
72
|
-
|
73
|
-
case cmd
|
74
|
-
when 'mount'
|
75
|
-
if ds
|
76
|
-
puts "already mounted on #{host.name} as #{ds.name}"
|
77
|
-
else
|
78
|
-
ds =
|
79
|
-
hds.CreateNasDatastore(:spec => VIM.HostNasVolumeSpec(:remoteHost => remoteHost,
|
80
|
-
:remotePath => remotePath,
|
81
|
-
:localPath => localPath,
|
82
|
-
:accessMode => mode))
|
83
|
-
puts "mounted on #{host.name} as #{ds.name}"
|
84
|
-
end
|
85
|
-
when 'unmount'
|
86
|
-
if ds
|
87
|
-
hds.RemoveDatastore(:datastore => ds)
|
88
|
-
puts "unmounted from #{host.name}"
|
89
|
-
else
|
90
|
-
puts "not mounted on #{host.name}"
|
91
|
-
end
|
92
|
-
else
|
93
|
-
abort "invalid command"
|
94
|
-
end
|
95
|
-
end
|