rbvmomi 1.8.2 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
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