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/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
|