vmonkey 0.7.0 → 0.8.0
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.
- checksums.yaml +4 -4
- data/lib/vmonkey/version.rb +1 -1
- data/lib/vmonkey/vim/VirtualApp.rb +28 -16
- data/lib/vmonkey/vim/VirtualMachine.rb +17 -9
- data/spec/vapp_property_spec.rb +51 -0
- data/spec/vapp_spec.rb +1 -20
- data/spec/virtualmachine_property_spec.rb +48 -0
- data/spec/virtualmachine_spec.rb +0 -25
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b5abf9886b87a12c8c10b8325e21b066efbde2e
|
4
|
+
data.tar.gz: e5dbdfb1e613e7bb2bddfc548daac3a2fb2f006b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 179e134d60a7800751beee309ef87abed62b5d06032eb0ef3f37af53e3da762631c02662a2382205c6388ca7456192c2bd94fc11b6d8ed29203843df03a4bc89
|
7
|
+
data.tar.gz: cc36d62392f7c923dbc1fd3cd4588652f7c86fb60fd9f247f8c22047a5d1bcc7c6ef0a71a72b9ea8b21539478ed148f0864c629fbcca70455f54235d30dd18de
|
data/lib/vmonkey/version.rb
CHANGED
@@ -12,12 +12,12 @@ class RbVmomi::VIM::VirtualApp
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def start
|
15
|
-
PowerOnVApp_Task().wait_for_completion unless vapp_state? 'started'
|
15
|
+
self.PowerOnVApp_Task().wait_for_completion unless vapp_state? 'started'
|
16
16
|
end
|
17
17
|
|
18
18
|
def stop
|
19
19
|
return if vapp_state? 'stopped'
|
20
|
-
PowerOffVApp_Task()
|
20
|
+
self.PowerOffVApp_Task( force: true )
|
21
21
|
sleep 2 until vapp_state? 'stopped'
|
22
22
|
end
|
23
23
|
|
@@ -37,12 +37,16 @@ class RbVmomi::VIM::VirtualApp
|
|
37
37
|
vm.find { |vm| vm.name == vm_name }
|
38
38
|
end
|
39
39
|
|
40
|
+
def find_vm!(vm_name)
|
41
|
+
find_vm(vm_name) || raise("VM not found. [#{vm_name}]")
|
42
|
+
end
|
43
|
+
|
40
44
|
def annotation
|
41
45
|
vAppConfig.annotation
|
42
46
|
end
|
43
47
|
|
44
48
|
def annotation=(value)
|
45
|
-
UpdateVAppConfig(spec: {annotation: value})
|
49
|
+
self.UpdateVAppConfig(spec: {annotation: value})
|
46
50
|
end
|
47
51
|
|
48
52
|
def properties
|
@@ -53,10 +57,10 @@ class RbVmomi::VIM::VirtualApp
|
|
53
57
|
case args.size
|
54
58
|
when 1
|
55
59
|
read_property(*args)
|
56
|
-
when 2
|
60
|
+
when 2, 3
|
57
61
|
set_property(*args)
|
58
62
|
else
|
59
|
-
raise ArgumentError.new("wrong number of arguments (#{args.size} for 1 or
|
63
|
+
raise ArgumentError.new("wrong number of arguments (#{args.size} for 1, 2 or 3)")
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
@@ -85,10 +89,20 @@ class RbVmomi::VIM::VirtualApp
|
|
85
89
|
|
86
90
|
def read_property(name)
|
87
91
|
p = find_property(name)
|
88
|
-
|
92
|
+
value = nil
|
93
|
+
unless p.nil?
|
94
|
+
value = p[:value]
|
95
|
+
value = p[:defaultValue] if value.empty?
|
96
|
+
end
|
97
|
+
value
|
89
98
|
end
|
90
99
|
|
91
|
-
def set_property(name, value)
|
100
|
+
def set_property(name, value, opts={})
|
101
|
+
opts = {
|
102
|
+
type: 'string',
|
103
|
+
userConfigurable: true
|
104
|
+
}.merge opts
|
105
|
+
|
92
106
|
if vAppConfig.property
|
93
107
|
existing_property = find_property(name)
|
94
108
|
end
|
@@ -101,19 +115,17 @@ class RbVmomi::VIM::VirtualApp
|
|
101
115
|
property_key = name.object_id
|
102
116
|
end
|
103
117
|
|
104
|
-
|
118
|
+
vapp_config_spec = RbVmomi::VIM.VAppConfigSpec(
|
105
119
|
property: [
|
106
120
|
RbVmomi::VIM.VAppPropertySpec(
|
107
121
|
operation: operation,
|
108
|
-
info: {
|
122
|
+
info: opts.merge({
|
109
123
|
key: property_key,
|
110
124
|
id: name.to_s,
|
111
|
-
type: 'string',
|
112
|
-
userConfigurable: true,
|
113
125
|
value: value.to_s
|
114
|
-
})])
|
126
|
+
}))])
|
115
127
|
|
116
|
-
UpdateVAppConfig( spec:
|
128
|
+
self.UpdateVAppConfig( spec: vapp_config_spec )
|
117
129
|
end
|
118
130
|
|
119
131
|
def port_ready?(port, timeout=5)
|
@@ -150,11 +162,11 @@ class RbVmomi::VIM::VirtualApp
|
|
150
162
|
reparent = parent != to_folder
|
151
163
|
|
152
164
|
if reparent
|
153
|
-
Rename_Task(newName: "#{path.basename}-tmp").wait_for_completion if rename
|
165
|
+
self.Rename_Task(newName: "#{path.basename}-tmp").wait_for_completion if rename
|
154
166
|
to_folder.MoveIntoFolder_Task(list: [self]).wait_for_completion
|
155
|
-
Rename_Task(newName: path.basename).wait_for_completion if rename
|
167
|
+
self.Rename_Task(newName: path.basename).wait_for_completion if rename
|
156
168
|
else
|
157
|
-
Rename_Task(newName: path.basename).wait_for_completion
|
169
|
+
self.Rename_Task(newName: path.basename).wait_for_completion
|
158
170
|
end
|
159
171
|
end
|
160
172
|
|
@@ -37,10 +37,10 @@ class RbVmomi::VIM::VirtualMachine
|
|
37
37
|
case args.size
|
38
38
|
when 1
|
39
39
|
read_property(*args)
|
40
|
-
when 2
|
40
|
+
when 2, 3
|
41
41
|
set_property(*args)
|
42
42
|
else
|
43
|
-
raise ArgumentError.new("wrong number of arguments (#{args.size} for 1 or
|
43
|
+
raise ArgumentError.new("wrong number of arguments (#{args.size} for 1, 2 or 3)")
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -175,10 +175,20 @@ class RbVmomi::VIM::VirtualMachine
|
|
175
175
|
|
176
176
|
def read_property(name)
|
177
177
|
p = find_property(name)
|
178
|
-
|
178
|
+
value = nil
|
179
|
+
unless p.nil?
|
180
|
+
value = p[:value]
|
181
|
+
value = p[:defaultValue] if value.empty?
|
182
|
+
end
|
183
|
+
value
|
179
184
|
end
|
180
185
|
|
181
|
-
def set_property(name, value)
|
186
|
+
def set_property(name, value, opts={})
|
187
|
+
opts = {
|
188
|
+
type: 'string',
|
189
|
+
userConfigurable: true
|
190
|
+
}.merge opts
|
191
|
+
|
182
192
|
if config.vAppConfig && config.vAppConfig.property
|
183
193
|
existing_property = find_property(name)
|
184
194
|
end
|
@@ -198,13 +208,11 @@ class RbVmomi::VIM::VirtualMachine
|
|
198
208
|
property: [
|
199
209
|
RbVmomi::VIM.VAppPropertySpec(
|
200
210
|
operation: operation,
|
201
|
-
info: {
|
211
|
+
info: opts.merge({
|
202
212
|
key: property_key,
|
203
213
|
id: name.to_s,
|
204
|
-
|
205
|
-
|
206
|
-
value: value
|
207
|
-
})]))
|
214
|
+
value: value.to_s
|
215
|
+
}))]))
|
208
216
|
|
209
217
|
if config.vAppConfig.nil? || config.vAppConfig.ovfEnvironmentTransport.empty?
|
210
218
|
vm_config_spec[:vAppConfig][:ovfEnvironmentTransport] = ['com.vmware.guestInfo']
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
using VMonkey unless RUBY_VERSION.split('.')[0] == '1'
|
3
|
+
|
4
|
+
describe RbVmomi::VIM::VirtualApp do
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
@monkey ||= VMonkey.connect
|
8
|
+
@vapp ||= @monkey.vapp VM_SPEC_OPTS[:vapp_path]
|
9
|
+
@spec_vapp_path = "#{VM_SPEC_OPTS[:working_folder]}/vmonkey_spec_vapp"
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'with a cloned vapp' do
|
13
|
+
before(:all) { @spec_vapp = @vapp.clone_to @spec_vapp_path }
|
14
|
+
after(:all) { @spec_vapp.destroy }
|
15
|
+
|
16
|
+
describe '#clone' do
|
17
|
+
context 'to a Folder' do
|
18
|
+
subject { @monkey.vapp @spec_vapp_path }
|
19
|
+
it { should_not be_nil }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#annotation=' do
|
24
|
+
it 'sets the annotation' do
|
25
|
+
@spec_vapp.annotation = 'xyzzy'
|
26
|
+
expect(@spec_vapp.annotation).to eq 'xyzzy'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#property' do
|
31
|
+
before(:all) do
|
32
|
+
@spec_vapp.property :prop, 'xyzzy'
|
33
|
+
@spec_vapp.property :prop2, 'abc123'
|
34
|
+
@spec_vapp.property :prop2, 'abc456'
|
35
|
+
@spec_vapp.property :ip_prop, nil, type: 'ip'
|
36
|
+
@spec_vapp.property :ip_prop_with_default, nil, type: 'ip', defaultValue: '0.0.0.0'
|
37
|
+
end
|
38
|
+
|
39
|
+
it { expect(@spec_vapp.property :prop).to eq 'xyzzy' }
|
40
|
+
it { expect(@spec_vapp.property :prop2).to eq 'abc456' }
|
41
|
+
it { expect(@spec_vapp.property :xyzzy).to be_nil }
|
42
|
+
|
43
|
+
it { expect(@spec_vapp.property :ip_prop).to be_empty }
|
44
|
+
it { expect(@spec_vapp.find_property(:ip_prop)[:type]).to eq 'ip' }
|
45
|
+
|
46
|
+
it { expect(@spec_vapp.property :ip_prop_with_default).to eq '0.0.0.0' }
|
47
|
+
it { expect(@spec_vapp.find_property(:ip_prop_with_default)[:type]).to eq 'ip' }
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
data/spec/vapp_spec.rb
CHANGED
@@ -35,25 +35,6 @@ describe RbVmomi::VIM::VirtualApp do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
describe '#annotation=' do
|
39
|
-
it 'sets the annotation' do
|
40
|
-
@spec_vapp.annotation = 'xyzzy'
|
41
|
-
expect(@spec_vapp.annotation).to eq 'xyzzy'
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe '#property' do
|
46
|
-
before(:all) do
|
47
|
-
@spec_vapp.property :prop, 'xyzzy'
|
48
|
-
@spec_vapp.property :prop2, 'abc123'
|
49
|
-
@spec_vapp.property :prop2, 'abc456'
|
50
|
-
end
|
51
|
-
|
52
|
-
it { expect(@spec_vapp.property :prop).to eq 'xyzzy' }
|
53
|
-
it { expect(@spec_vapp.property :prop2).to eq 'abc456' }
|
54
|
-
it { expect(@spec_vapp.property :xyzzy).to be_nil }
|
55
|
-
end
|
56
|
-
|
57
38
|
describe '#move_to' do
|
58
39
|
it 'should raise a RuntimeError when given a path of an existing vApp' do
|
59
40
|
expect { @spec_vapp.move_to @spec_vapp_path }.to raise_error RuntimeError
|
@@ -137,6 +118,7 @@ describe RbVmomi::VIM::VirtualApp do
|
|
137
118
|
|
138
119
|
context 'that has had #start called' do
|
139
120
|
before(:all) { @spec_vapp.start }
|
121
|
+
after(:all) { @spec_vapp.stop }
|
140
122
|
|
141
123
|
context 'immediately following start' do
|
142
124
|
describe '#port_ready?' do
|
@@ -156,7 +138,6 @@ describe RbVmomi::VIM::VirtualApp do
|
|
156
138
|
end
|
157
139
|
end
|
158
140
|
|
159
|
-
after(:all) { @spec_vapp.stop }
|
160
141
|
end
|
161
142
|
|
162
143
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
using VMonkey unless RUBY_VERSION.split('.')[0] == '1'
|
3
|
+
|
4
|
+
describe RbVmomi::VIM::VirtualMachine do
|
5
|
+
before :all do
|
6
|
+
@monkey ||= VMonkey.connect
|
7
|
+
@template = @monkey.vm VM_SPEC_OPTS[:template_path]
|
8
|
+
@vm_path = "#{VM_SPEC_OPTS[:working_folder]}/vmonkey_spec"
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'with a cloned VM' do
|
12
|
+
before(:all) { @spec_vm = @template.clone_to @vm_path }
|
13
|
+
after(:all) { @spec_vm.destroy }
|
14
|
+
|
15
|
+
describe '#annotation=' do
|
16
|
+
it 'sets the annotation' do
|
17
|
+
@spec_vm.annotation = 'xyzzy'
|
18
|
+
expect(@spec_vm.annotation).to eq 'xyzzy'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#property' do
|
23
|
+
before(:all) do
|
24
|
+
@spec_vm.property :prop, 'xyzzy'
|
25
|
+
@spec_vm.property :prop2, 'abc123'
|
26
|
+
@spec_vm.property :prop2, 'abc456'
|
27
|
+
@spec_vm.property :ip_prop, nil, type: 'ip'
|
28
|
+
@spec_vm.property :ip_prop_with_default, nil, type: 'ip', defaultValue: '0.0.0.0'
|
29
|
+
end
|
30
|
+
|
31
|
+
it { expect(@spec_vm.property :prop).to eq 'xyzzy' }
|
32
|
+
it { expect(@spec_vm.property :prop2).to eq 'abc456' }
|
33
|
+
it { expect(@spec_vm.property :xyzzy).to be_nil }
|
34
|
+
|
35
|
+
it { expect(@spec_vm.property :ip_prop).to be_empty }
|
36
|
+
it { expect(@spec_vm.find_property(:ip_prop)[:type]).to eq 'ip' }
|
37
|
+
|
38
|
+
it { expect(@spec_vm.property :ip_prop_with_default).to eq '0.0.0.0' }
|
39
|
+
it { expect(@spec_vm.find_property(:ip_prop_with_default)[:type]).to eq 'ip' }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#property!' do
|
43
|
+
it 'should raise a RuntimeError given a path to a non-existent property' do
|
44
|
+
expect { @spec_vm.property! :xyzzy }.to raise_error RuntimeError
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/spec/virtualmachine_spec.rb
CHANGED
@@ -84,31 +84,6 @@ describe RbVmomi::VIM::VirtualMachine do
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
describe '#annotation=' do
|
88
|
-
it 'sets the annotation' do
|
89
|
-
@spec_vm.annotation = 'xyzzy'
|
90
|
-
expect(@spec_vm.annotation).to eq 'xyzzy'
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#property' do
|
95
|
-
before(:all) do
|
96
|
-
@spec_vm.property :prop, 'xyzzy'
|
97
|
-
@spec_vm.property :prop2, 'abc123'
|
98
|
-
@spec_vm.property :prop2, 'abc456'
|
99
|
-
end
|
100
|
-
|
101
|
-
it { expect(@spec_vm.property :prop).to eq 'xyzzy' }
|
102
|
-
it { expect(@spec_vm.property :prop2).to eq 'abc456' }
|
103
|
-
it { expect(@spec_vm.property :xyzzy).to be_nil }
|
104
|
-
end
|
105
|
-
|
106
|
-
describe '#property!' do
|
107
|
-
it 'should raise a RuntimeError given a path to a non-existent property' do
|
108
|
-
expect { @spec_vm.property! :xyzzy }.to raise_error RuntimeError
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
87
|
describe '#move_to' do
|
113
88
|
it 'should raise a RuntimeError when given a path of an existing VM' do
|
114
89
|
expect { @spec_vm.move_to @vm_path }.to raise_error RuntimeError
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmonkey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Dupras
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-09-
|
12
|
+
date: 2014-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -119,8 +119,10 @@ files:
|
|
119
119
|
- spec/datacenter_spec.rb
|
120
120
|
- spec/folder_spec.rb
|
121
121
|
- spec/spec_helper.rb
|
122
|
+
- spec/vapp_property_spec.rb
|
122
123
|
- spec/vapp_spec.rb
|
123
124
|
- spec/vim_spec.rb
|
125
|
+
- spec/virtualmachine_property_spec.rb
|
124
126
|
- spec/virtualmachine_spec.rb
|
125
127
|
- spec/vmonkey_spec.rb
|
126
128
|
- vmonkey.gemspec
|
@@ -152,7 +154,9 @@ test_files:
|
|
152
154
|
- spec/datacenter_spec.rb
|
153
155
|
- spec/folder_spec.rb
|
154
156
|
- spec/spec_helper.rb
|
157
|
+
- spec/vapp_property_spec.rb
|
155
158
|
- spec/vapp_spec.rb
|
156
159
|
- spec/vim_spec.rb
|
160
|
+
- spec/virtualmachine_property_spec.rb
|
157
161
|
- spec/virtualmachine_spec.rb
|
158
162
|
- spec/vmonkey_spec.rb
|