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.
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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