rbvmomi 1.2.2 → 1.2.3
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.
- data/Rakefile +14 -0
- data/VERSION +1 -1
- data/devel/analyze-vim-declarations.rb +5 -6
- data/examples/annotate.rb +54 -0
- data/examples/clone_vm.rb +84 -0
- data/examples/vm_drs_behavior.rb +76 -0
- data/lib/rbvmomi/basic_types.rb +5 -0
- data/lib/rbvmomi/connection.rb +1 -1
- data/lib/rbvmomi/vim.rb +11 -3
- data/vmodl.db +0 -0
- metadata +8 -2
data/Rakefile
CHANGED
@@ -29,3 +29,17 @@ Rake::TestTask.new do |t|
|
|
29
29
|
end
|
30
30
|
|
31
31
|
YARD::Rake::YardocTask.new
|
32
|
+
|
33
|
+
begin
|
34
|
+
require 'rcov/rcovtask'
|
35
|
+
desc 'Measures test coverage using rcov'
|
36
|
+
Rcov::RcovTask.new do |rcov|
|
37
|
+
rcov.pattern = 'test/test_*.rb'
|
38
|
+
rcov.output_dir = 'coverage'
|
39
|
+
rcov.verbose = true
|
40
|
+
rcov.libs << "test"
|
41
|
+
rcov.rcov_opts << '--exclude "gems/*"'
|
42
|
+
end
|
43
|
+
rescue LoadError
|
44
|
+
puts "Rcov not available. Install it with: gem install rcov"
|
45
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.3
|
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'nokogiri'
|
3
|
-
require 'cdb'
|
4
3
|
|
5
4
|
# :usage => analyze-vim-declarations.rb vim-declarations.xml foo-declarations.xml vmodl.db
|
6
5
|
|
@@ -175,16 +174,16 @@ TYPES.each do |k,t|
|
|
175
174
|
end
|
176
175
|
end
|
177
176
|
|
178
|
-
db =
|
177
|
+
db = {}
|
179
178
|
|
180
179
|
TYPES.each do |k,t|
|
181
|
-
db[k] =
|
180
|
+
db[k] = t
|
182
181
|
end
|
183
182
|
|
184
|
-
db['_typenames'] =
|
185
|
-
db['_versions'] =
|
183
|
+
db['_typenames'] = TYPES.keys
|
184
|
+
db['_versions'] = VERSIONS
|
186
185
|
|
187
|
-
db
|
186
|
+
File.open(OUT_FN, 'w') { |io| Marshal.dump db, io }
|
188
187
|
|
189
188
|
if filename = ENV['VERSION_GRAPH']
|
190
189
|
File.open(filename, 'w') do |io|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'trollop'
|
2
|
+
require 'rbvmomi'
|
3
|
+
require 'rbvmomi/trollop'
|
4
|
+
|
5
|
+
VIM = RbVmomi::VIM
|
6
|
+
CMDS = %w(get set)
|
7
|
+
|
8
|
+
opts = Trollop.options do
|
9
|
+
banner <<-EOS
|
10
|
+
Annotate a VM.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
annotate.rb [options] VM get
|
14
|
+
annotate.rb [options] VM set annotation
|
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 'get'
|
50
|
+
puts vm.config.annotation
|
51
|
+
when 'set'
|
52
|
+
value = ARGV[2] or Trollop.die("no annotation given")
|
53
|
+
vm.ReconfigVM_Task(:spec => VIM.VirtualMachineConfigSpec(:annotation => value)).wait_for_completion
|
54
|
+
end
|
@@ -0,0 +1,84 @@
|
|
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
|
+
Clone a VM.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
clone_vm.rb [options] source_vm dest_vm
|
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
|
+
|
32
|
+
opt :linked_clone, "Use a linked clone instead of a full clone"
|
33
|
+
end
|
34
|
+
|
35
|
+
Trollop.die("must specify host") unless opts[:host]
|
36
|
+
ARGV.size == 2 or abort "must specify VM source name and VM target name"
|
37
|
+
vm_source = ARGV[0]
|
38
|
+
vm_target = ARGV[1]
|
39
|
+
|
40
|
+
vim = VIM.connect opts
|
41
|
+
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
42
|
+
vm = dc.find_vm(vm_source) or abort "VM not found"
|
43
|
+
|
44
|
+
if opts[:linked_clone]
|
45
|
+
# The API for linked clones is quite strange. We can't create a linked
|
46
|
+
# straight from any VM. The disks of the VM for which we can create a
|
47
|
+
# linked clone need to be read-only and thus VC demands that the VM we
|
48
|
+
# are cloning from uses delta-disks. Only then it will allow us to
|
49
|
+
# share the base disk.
|
50
|
+
#
|
51
|
+
# Thus, this code first create a delta disk on top of the base disk for
|
52
|
+
# the to-be-cloned VM, if delta disks aren't used already.
|
53
|
+
disks = vm.config.hardware.device.grep(VIM::VirtualDisk)
|
54
|
+
disks.select { |x| x.backing.parent == nil }.each do |disk|
|
55
|
+
spec = {
|
56
|
+
:deviceChange => [
|
57
|
+
{
|
58
|
+
:operation => :remove,
|
59
|
+
:device => disk
|
60
|
+
},
|
61
|
+
{
|
62
|
+
:operation => :add,
|
63
|
+
:fileOperation => :create,
|
64
|
+
:device => disk.dup.tap { |x|
|
65
|
+
x.backing = x.backing.dup
|
66
|
+
x.backing.fileName = "[#{disk.backing.datastore.name}]"
|
67
|
+
x.backing.parent = disk.backing
|
68
|
+
},
|
69
|
+
}
|
70
|
+
]
|
71
|
+
}
|
72
|
+
vm.ReconfigVM_Task(:spec => spec).wait_for_completion
|
73
|
+
end
|
74
|
+
|
75
|
+
relocateSpec = VIM.VirtualMachineRelocateSpec(:diskMoveType => :moveChildMostDiskBacking)
|
76
|
+
else
|
77
|
+
relocateSpec = VIM.VirtualMachineRelocateSpec
|
78
|
+
end
|
79
|
+
|
80
|
+
spec = VIM.VirtualMachineCloneSpec(:location => relocateSpec,
|
81
|
+
:powerOn => false,
|
82
|
+
:template => false)
|
83
|
+
|
84
|
+
vm.CloneVM_Task(:folder => vm.parent, :name => vm_target, :spec => spec).wait_for_completion
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'trollop'
|
3
|
+
require 'rbvmomi'
|
4
|
+
require 'rbvmomi/trollop'
|
5
|
+
|
6
|
+
VIM = RbVmomi::VIM
|
7
|
+
CMDS = %w(get set)
|
8
|
+
BEHAVIOR = %w(fullyAutomated manual partiallyAutomated default)
|
9
|
+
|
10
|
+
opts = Trollop.options do
|
11
|
+
banner <<-EOS
|
12
|
+
Configure VM DRS behavior.
|
13
|
+
|
14
|
+
Usage:
|
15
|
+
vm_drs_behavior.rb [options] VM get
|
16
|
+
vm_drs_behavior.rb [options] VM set #{BEHAVIOR.join('|')}
|
17
|
+
|
18
|
+
Commands: #{CMDS * ' '}
|
19
|
+
|
20
|
+
VIM connection options:
|
21
|
+
EOS
|
22
|
+
|
23
|
+
rbvmomi_connection_opts
|
24
|
+
|
25
|
+
text <<-EOS
|
26
|
+
|
27
|
+
VM location options:
|
28
|
+
EOS
|
29
|
+
|
30
|
+
rbvmomi_datacenter_opt
|
31
|
+
|
32
|
+
text <<-EOS
|
33
|
+
|
34
|
+
Other options:
|
35
|
+
EOS
|
36
|
+
|
37
|
+
stop_on CMDS
|
38
|
+
end
|
39
|
+
|
40
|
+
Trollop.die("must specify host") unless opts[:host]
|
41
|
+
|
42
|
+
vm_name = ARGV[0] or Trollop.die("no VM name given")
|
43
|
+
cmd = ARGV[1] or Trollop.die("no command given")
|
44
|
+
abort "invalid command" unless CMDS.member? cmd
|
45
|
+
|
46
|
+
vim = VIM.connect opts
|
47
|
+
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
|
48
|
+
vm = dc.find_vm(vm_name) or abort "VM not found"
|
49
|
+
|
50
|
+
cluster = vm.runtime.host.parent
|
51
|
+
config = cluster.configurationEx.drsVmConfig.select {|c| c.key.name == vm.name }.first
|
52
|
+
default = cluster.configurationEx.drsConfig.defaultVmBehavior
|
53
|
+
|
54
|
+
case cmd
|
55
|
+
when 'get'
|
56
|
+
if config
|
57
|
+
behavior = config.behavior
|
58
|
+
else
|
59
|
+
behavior = "#{default} (default)"
|
60
|
+
end
|
61
|
+
puts "#{vm.name} is #{behavior}"
|
62
|
+
when 'set'
|
63
|
+
behavior = ARGV[2] or Trollop.die("no behavior given")
|
64
|
+
abort "invalid behavior" unless BEHAVIOR.member? behavior
|
65
|
+
|
66
|
+
if behavior == "default"
|
67
|
+
behavior = default
|
68
|
+
end
|
69
|
+
vm_spec =
|
70
|
+
VIM.ClusterDrsVmConfigSpec(:operation => VIM.ArrayUpdateOperation(config ? "edit" : "add"),
|
71
|
+
:info => VIM.ClusterDrsVmConfigInfo(:key => vm,
|
72
|
+
:behavior => VIM.DrsBehavior(behavior)))
|
73
|
+
spec = VIM.ClusterConfigSpecEx(:drsVmConfigSpec => [vm_spec])
|
74
|
+
cluster.ReconfigureComputeResource_Task(:spec => spec, :modify => true).wait_for_completion
|
75
|
+
end
|
76
|
+
|
data/lib/rbvmomi/basic_types.rb
CHANGED
data/lib/rbvmomi/connection.rb
CHANGED
@@ -174,7 +174,7 @@ class Connection < TrivialSoap
|
|
174
174
|
when Symbol, String
|
175
175
|
if expected == BasicTypes::Binary
|
176
176
|
attrs['xsi:type'] = 'xsd:base64Binary' if expected == BasicTypes::AnyType
|
177
|
-
xml.tag! name, [o].pack('m').chomp, attrs
|
177
|
+
xml.tag! name, [o].pack('m').chomp.gsub("\n", ""), attrs
|
178
178
|
else
|
179
179
|
attrs['xsi:type'] = 'xsd:string' if expected == BasicTypes::AnyType
|
180
180
|
xml.tag! name, o.to_s, attrs
|
data/lib/rbvmomi/vim.rb
CHANGED
@@ -27,13 +27,16 @@ class VIM < Connection
|
|
27
27
|
opts[:port] ||= (opts[:ssl] ? 443 : 80)
|
28
28
|
opts[:path] ||= '/sdk'
|
29
29
|
opts[:ns] ||= 'urn:vim25'
|
30
|
-
opts[:rev]
|
30
|
+
rev_given = opts[:rev] != nil
|
31
|
+
opts[:rev] = '4.0' unless rev_given
|
31
32
|
opts[:debug] = (!ENV['RBVMOMI_DEBUG'].empty? rescue false) unless opts.member? :debug
|
32
33
|
|
33
34
|
new(opts).tap do |vim|
|
34
35
|
vim.serviceContent.sessionManager.Login :userName => opts[:user], :password => opts[:password]
|
35
|
-
|
36
|
-
|
36
|
+
unless rev_given
|
37
|
+
rev = vim.serviceContent.about.apiVersion
|
38
|
+
vim.rev = [rev, '4.1'].min
|
39
|
+
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
@@ -67,6 +70,11 @@ class VIM < Connection
|
|
67
70
|
serviceContent.searchIndex
|
68
71
|
end
|
69
72
|
|
73
|
+
# @private
|
74
|
+
def pretty_print pp
|
75
|
+
pp.text "VIM(#{@opts[:host]})"
|
76
|
+
end
|
77
|
+
|
70
78
|
@extension_dirs = [File.join(File.dirname(__FILE__), "vim")]
|
71
79
|
|
72
80
|
# Directories to search for extensions
|
data/vmodl.db
CHANGED
Binary file
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rbvmomi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.2.
|
5
|
+
version: 1.2.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rich Lane
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-04-05 00:00:00 -07:00
|
14
14
|
default_executable: rbvmomish
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -65,6 +65,8 @@ files:
|
|
65
65
|
- bin/rbvmomish
|
66
66
|
- devel/analyze-vim-declarations.rb
|
67
67
|
- devel/analyze-xml.rb
|
68
|
+
- examples/annotate.rb
|
69
|
+
- examples/clone_vm.rb
|
68
70
|
- examples/create_vm-1.9.rb
|
69
71
|
- examples/create_vm.rb
|
70
72
|
- examples/extraConfig.rb
|
@@ -76,6 +78,7 @@ files:
|
|
76
78
|
- examples/run.sh
|
77
79
|
- examples/screenshot.rb
|
78
80
|
- examples/vdf.rb
|
81
|
+
- examples/vm_drs_behavior.rb
|
79
82
|
- lib/rbvmomi.rb
|
80
83
|
- lib/rbvmomi/basic_types.rb
|
81
84
|
- lib/rbvmomi/connection.rb
|
@@ -134,6 +137,8 @@ signing_key:
|
|
134
137
|
specification_version: 3
|
135
138
|
summary: Ruby interface to the VMware vSphere API
|
136
139
|
test_files:
|
140
|
+
- examples/annotate.rb
|
141
|
+
- examples/clone_vm.rb
|
137
142
|
- examples/create_vm-1.9.rb
|
138
143
|
- examples/create_vm.rb
|
139
144
|
- examples/extraConfig.rb
|
@@ -144,6 +149,7 @@ test_files:
|
|
144
149
|
- examples/readme-2.rb
|
145
150
|
- examples/screenshot.rb
|
146
151
|
- examples/vdf.rb
|
152
|
+
- examples/vm_drs_behavior.rb
|
147
153
|
- test/test_deserialization.rb
|
148
154
|
- test/test_emit_request.rb
|
149
155
|
- test/test_exceptions.rb
|