vagrant-rbvmomi 1.8.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 (76) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +6 -0
  3. data/LICENSE +19 -0
  4. data/README.rdoc +78 -0
  5. data/Rakefile +31 -0
  6. data/VERSION +1 -0
  7. data/bin/rbvmomish +138 -0
  8. data/devel/analyze-vim-declarations.rb +213 -0
  9. data/devel/analyze-xml.rb +46 -0
  10. data/devel/benchmark.rb +117 -0
  11. data/devel/collisions.rb +18 -0
  12. data/devel/merge-internal-vmodl.rb +59 -0
  13. data/devel/merge-manual-vmodl.rb +32 -0
  14. data/examples/annotate.rb +54 -0
  15. data/examples/cached_ovf_deploy.rb +120 -0
  16. data/examples/clone_vm.rb +84 -0
  17. data/examples/create_vm-1.9.rb +93 -0
  18. data/examples/create_vm.rb +93 -0
  19. data/examples/extraConfig.rb +54 -0
  20. data/examples/lease_tool.rb +102 -0
  21. data/examples/logbundle.rb +63 -0
  22. data/examples/logtail.rb +60 -0
  23. data/examples/nfs_datastore.rb +95 -0
  24. data/examples/power.rb +59 -0
  25. data/examples/readme-1.rb +35 -0
  26. data/examples/readme-2.rb +51 -0
  27. data/examples/run.sh +41 -0
  28. data/examples/screenshot.rb +48 -0
  29. data/examples/vdf.rb +81 -0
  30. data/examples/vm_drs_behavior.rb +76 -0
  31. data/lib/rbvmomi.rb +12 -0
  32. data/lib/rbvmomi/basic_types.rb +375 -0
  33. data/lib/rbvmomi/connection.rb +270 -0
  34. data/lib/rbvmomi/deserialization.rb +248 -0
  35. data/lib/rbvmomi/fault.rb +17 -0
  36. data/lib/rbvmomi/pbm.rb +66 -0
  37. data/lib/rbvmomi/sms.rb +61 -0
  38. data/lib/rbvmomi/sms/SmsStorageManager.rb +7 -0
  39. data/lib/rbvmomi/trivial_soap.rb +114 -0
  40. data/lib/rbvmomi/trollop.rb +70 -0
  41. data/lib/rbvmomi/type_loader.rb +136 -0
  42. data/lib/rbvmomi/utils/admission_control.rb +398 -0
  43. data/lib/rbvmomi/utils/deploy.rb +336 -0
  44. data/lib/rbvmomi/utils/leases.rb +142 -0
  45. data/lib/rbvmomi/utils/perfdump.rb +628 -0
  46. data/lib/rbvmomi/vim.rb +128 -0
  47. data/lib/rbvmomi/vim/ComputeResource.rb +51 -0
  48. data/lib/rbvmomi/vim/Datacenter.rb +17 -0
  49. data/lib/rbvmomi/vim/Datastore.rb +68 -0
  50. data/lib/rbvmomi/vim/DynamicTypeMgrAllTypeInfo.rb +75 -0
  51. data/lib/rbvmomi/vim/DynamicTypeMgrDataTypeInfo.rb +20 -0
  52. data/lib/rbvmomi/vim/DynamicTypeMgrManagedTypeInfo.rb +46 -0
  53. data/lib/rbvmomi/vim/Folder.rb +207 -0
  54. data/lib/rbvmomi/vim/HostSystem.rb +174 -0
  55. data/lib/rbvmomi/vim/ManagedEntity.rb +57 -0
  56. data/lib/rbvmomi/vim/ManagedObject.rb +60 -0
  57. data/lib/rbvmomi/vim/ObjectContent.rb +23 -0
  58. data/lib/rbvmomi/vim/ObjectUpdate.rb +23 -0
  59. data/lib/rbvmomi/vim/OvfManager.rb +200 -0
  60. data/lib/rbvmomi/vim/PerfCounterInfo.rb +26 -0
  61. data/lib/rbvmomi/vim/PerformanceManager.rb +110 -0
  62. data/lib/rbvmomi/vim/PropertyCollector.rb +25 -0
  63. data/lib/rbvmomi/vim/ReflectManagedMethodExecuter.rb +30 -0
  64. data/lib/rbvmomi/vim/ResourcePool.rb +55 -0
  65. data/lib/rbvmomi/vim/ServiceInstance.rb +55 -0
  66. data/lib/rbvmomi/vim/Task.rb +65 -0
  67. data/lib/rbvmomi/vim/VirtualMachine.rb +74 -0
  68. data/test/test_deserialization.rb +383 -0
  69. data/test/test_emit_request.rb +128 -0
  70. data/test/test_exceptions.rb +14 -0
  71. data/test/test_helper.rb +14 -0
  72. data/test/test_misc.rb +24 -0
  73. data/test/test_parse_response.rb +69 -0
  74. data/test/test_serialization.rb +311 -0
  75. data/vmodl.db +0 -0
  76. metadata +163 -0
@@ -0,0 +1,60 @@
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
@@ -0,0 +1,95 @@
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
@@ -0,0 +1,59 @@
1
+ require 'trollop'
2
+ require 'rbvmomi'
3
+ require 'rbvmomi/trollop'
4
+
5
+ VIM = RbVmomi::VIM
6
+ CMDS = %w(on off reset suspend destroy)
7
+
8
+ opts = Trollop.options do
9
+ banner <<-EOS
10
+ Perform VM power operations.
11
+
12
+ Usage:
13
+ power.rb [options] cmd VM
14
+
15
+ Commands: #{CMDS * ' '}
16
+
17
+ VIM connection options:
18
+ EOS
19
+
20
+ rbvmomi_connection_opts
21
+
22
+ text <<-EOS
23
+
24
+ VM location options:
25
+ EOS
26
+
27
+ rbvmomi_datacenter_opt
28
+
29
+ text <<-EOS
30
+
31
+ Other options:
32
+ EOS
33
+
34
+ stop_on CMDS
35
+ end
36
+
37
+ cmd = ARGV[0] or Trollop.die("no command given")
38
+ vm_name = ARGV[1] or Trollop.die("no VM name given")
39
+ Trollop.die("must specify host") unless opts[:host]
40
+
41
+ vim = VIM.connect opts
42
+
43
+ dc = vim.serviceInstance.content.rootFolder.traverse(opts[:datacenter], VIM::Datacenter) or abort "datacenter not found"
44
+ vm = dc.vmFolder.traverse(vm_name, VIM::VirtualMachine) or abort "VM not found"
45
+
46
+ case cmd
47
+ when 'on'
48
+ vm.PowerOnVM_Task.wait_for_completion
49
+ when 'off'
50
+ vm.PowerOffVM_Task.wait_for_completion
51
+ when 'reset'
52
+ vm.ResetVM_Task.wait_for_completion
53
+ when 'suspend'
54
+ vm.SuspendVM_Task.wait_for_completion
55
+ when 'destroy'
56
+ vm.Destroy_Task.wait_for_completion
57
+ else
58
+ abort "invalid command"
59
+ end
@@ -0,0 +1,35 @@
1
+ require 'rbvmomi'
2
+ require 'rbvmomi/trollop'
3
+
4
+ opts = Trollop.options do
5
+ banner <<-EOS
6
+ Example 1 from the README: Power on a VM.
7
+
8
+ Usage:
9
+ readme-1.rb [options] VM name
10
+
11
+ VIM connection options:
12
+ EOS
13
+
14
+ rbvmomi_connection_opts
15
+
16
+ text <<-EOS
17
+
18
+ VM location options:
19
+ EOS
20
+
21
+ rbvmomi_datacenter_opt
22
+
23
+ text <<-EOS
24
+
25
+ Other options:
26
+ EOS
27
+ end
28
+
29
+ Trollop.die("must specify host") unless opts[:host]
30
+ vm_name = ARGV[0] or abort "must specify VM name"
31
+
32
+ vim = RbVmomi::VIM.connect opts
33
+ dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or fail "datacenter not found"
34
+ vm = dc.find_vm(vm_name) or fail "VM not found"
35
+ vm.PowerOnVM_Task.wait_for_completion
@@ -0,0 +1,51 @@
1
+ require 'rbvmomi'
2
+ require 'rbvmomi/trollop'
3
+
4
+ opts = Trollop.options do
5
+ banner <<-EOS
6
+ Example 2 from the README: Power on a VM the hard way.
7
+
8
+ Usage:
9
+ readme-2.rb [options] VM name
10
+
11
+ VIM connection options:
12
+ EOS
13
+
14
+ rbvmomi_connection_opts
15
+
16
+ text <<-EOS
17
+
18
+ VM location options:
19
+ EOS
20
+
21
+ rbvmomi_datacenter_opt
22
+
23
+ text <<-EOS
24
+
25
+ Other options:
26
+ EOS
27
+ end
28
+
29
+ Trollop.die("must specify host") unless opts[:host]
30
+ vm_name = ARGV[0] or abort "must specify VM name"
31
+
32
+ vim = RbVmomi::VIM.connect opts
33
+ rootFolder = vim.serviceInstance.content.rootFolder
34
+ dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).find { |x| x.name == opts[:datacenter] } or fail "datacenter not found"
35
+ vm = dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).find { |x| x.name == vm_name } or fail "VM not found"
36
+ task = vm.PowerOnVM_Task
37
+ filter = vim.propertyCollector.CreateFilter(
38
+ :spec => {
39
+ :propSet => [{ :type => 'Task', :all => false, :pathSet => ['info.state']}],
40
+ :objectSet => [{ :obj => task }]
41
+ },
42
+ :partialUpdates => false
43
+ )
44
+ ver = ''
45
+ while true
46
+ result = vim.propertyCollector.WaitForUpdates(:version => ver)
47
+ ver = result.version
48
+ break if ['success', 'error'].member? task.info.state
49
+ end
50
+ filter.DestroyPropertyFilter
51
+ raise task.info.error if task.info.state == 'error'
@@ -0,0 +1,41 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ if [ -z "$RBVMOMI_HOST" ]
5
+ then
6
+ echo "export at least RBVMOMI_HOST"
7
+ exit 1
8
+ fi
9
+
10
+ EXAMPLES="$(dirname $(which $0))"
11
+ export RUBYOPT="-I$EXAMPLES/../lib -rubygems"
12
+
13
+ source "$HOME/.rvm/scripts/rvm"
14
+ rvm use 1.8.7
15
+ ruby -v
16
+ RUBY=ruby
17
+
18
+ echo Creating VM
19
+ $RUBY $EXAMPLES/create_vm.rb foo
20
+ echo Powering on VM
21
+ $RUBY $EXAMPLES/power.rb on foo
22
+ echo Resetting VM
23
+ $RUBY $EXAMPLES/power.rb reset foo
24
+ echo Powering off VM
25
+ $RUBY $EXAMPLES/power.rb off foo
26
+ echo "Powering on VM (1)"
27
+ $RUBY $EXAMPLES/readme-1.rb foo
28
+ echo Powering off VM
29
+ $RUBY $EXAMPLES/power.rb off foo
30
+ echo "Powering on VM (2)"
31
+ $RUBY $EXAMPLES/readme-2.rb foo
32
+ echo "Setting extraConfig"
33
+ $RUBY $EXAMPLES/extraConfig.rb foo set guestinfo.bar=baz
34
+ echo "Listing extraConfig"
35
+ $RUBY $EXAMPLES/extraConfig.rb foo list | grep guestinfo.bar
36
+ echo Powering off VM
37
+ $RUBY $EXAMPLES/power.rb off foo
38
+ echo Querying datastore utilization
39
+ $RUBY $EXAMPLES/vdf.rb
40
+ echo Destroying VM
41
+ $RUBY $EXAMPLES/power.rb destroy foo
@@ -0,0 +1,48 @@
1
+ # Based on takeVMScreenshot.pl by William Lam
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
+ Take a screenshot.
11
+
12
+ Usage:
13
+ screenshot.rb [options] vm filename
14
+
15
+ A PNG image will be saved to the given filename.
16
+
17
+ VIM connection options:
18
+ EOS
19
+
20
+ rbvmomi_connection_opts
21
+
22
+ text <<-EOS
23
+
24
+ VM location options:
25
+ EOS
26
+
27
+ rbvmomi_datacenter_opt
28
+
29
+ text <<-EOS
30
+
31
+ Other options:
32
+ EOS
33
+ end
34
+
35
+ Trollop.die("must specify host") unless opts[:host]
36
+ vm_name = ARGV[0] or abort("must specify VM name")
37
+ output_path = ARGV[1] or abort("must specify output filename")
38
+
39
+ vim = VIM.connect opts
40
+ dc = vim.serviceInstance.find_datacenter(opts[:datacenter])
41
+ vm = dc.find_vm vm_name
42
+ abort "VM must be running" unless vm.runtime.powerState == 'poweredOn'
43
+ remote_path = vm.CreateScreenshot_Task.wait_for_completion
44
+ remote_path =~ /^(\/vmfs\/volumes\/[^\/]+)\// or fail
45
+ datastore_prefix = $1
46
+ datastore_path = $'
47
+ datastore = vm.datastore.find { |ds| ds.info.url == datastore_prefix }
48
+ datastore.download datastore_path, output_path
@@ -0,0 +1,81 @@
1
+ # Translation of vGhetto vdf, originally by William Lam
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
+ Display utilization of each datastore in the datacenter.
11
+
12
+ Usage:
13
+ vdf.rb [options]
14
+
15
+ VIM connection options:
16
+ EOS
17
+
18
+ rbvmomi_connection_opts
19
+
20
+ text <<-EOS
21
+
22
+ Datacenter selection:
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
+
35
+ vim = VIM.connect opts
36
+
37
+ dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
38
+
39
+ def si n
40
+ ['', 'K', 'M', 'G', 'T', 'P'].each_with_index do |x,i|
41
+ v = n.to_f/(1000**i)
42
+ return v,x if v < 1000 or x == 'P'
43
+ end
44
+ end
45
+
46
+ def unit n, u, p
47
+ "%.*g%s%s" % [p, si(n), u].flatten
48
+ end
49
+
50
+ def b n
51
+ unit(n,'B',3)
52
+ end
53
+
54
+ puts "Filesystem#{' '*53}Size Used Avail Use% Mounted on"
55
+ fmt = "%-62s %-8s %-8s %-8s %-8s %s"
56
+
57
+ if false
58
+ # simple version
59
+ dc.datastore.sort_by { |ds| ds.info.url }.each do |ds|
60
+ s = ds.summary
61
+ next unless s.accessible
62
+ size = s.capacity
63
+ free = s.freeSpace
64
+ used = size - free
65
+ pct_used = used*100.0/size
66
+ puts(fmt % [ds.info.url, b(size), b(used), b(free), unit(pct_used,'%',3), ds.name])
67
+ end
68
+ else
69
+ # fast version
70
+ paths = %w(name info.url summary.accessible summary.capacity summary.freeSpace)
71
+ propSet = [{ :type => 'Datastore', :pathSet => paths }]
72
+ filterSpec = { :objectSet => dc.datastore.map { |ds| { :obj => ds } }, :propSet => propSet }
73
+ data = vim.propertyCollector.RetrieveProperties(:specSet => [filterSpec])
74
+ data.select { |d| d['summary.accessible'] }.sort_by { |d| d['info.url'] }.each do |d|
75
+ size = d['summary.capacity']
76
+ free = d['summary.freeSpace']
77
+ used = size - free
78
+ pct_used = used*100.0/size
79
+ puts(fmt % [d['info.url'], b(size), b(used), b(free), unit(pct_used,'%',3), d['name']])
80
+ end
81
+ end