vmonkey 0.6.2 → 0.7.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/.gitignore +1 -0
- data/lib/vmonkey/version.rb +1 -1
- data/lib/vmonkey/vim/VirtualApp.rb +55 -0
- data/spec/vapp_spec.rb +105 -1
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c508835c077aca3004f773a73dfb541babb3819
|
4
|
+
data.tar.gz: 326b56af7fd2c5dd1ba364fe834fd0546863e859
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47e5a378a2fadf4304ff8d4bf19f66b30ce9745dabc44ac5a30262b428f57500285a1bd730bb90df0709d7c2daeb858c220ceb4114f5be33c5f81d73d2ed864d
|
7
|
+
data.tar.gz: 04c89a6f1bf9e2f978bbdf4b78086616a174e6f5326b3a3095868c4ef555e83fc3d7759111b5d991038f6d6cdd70d43b42033dc5a9020e6608a144b0a19dad77
|
data/.gitignore
CHANGED
data/lib/vmonkey/version.rb
CHANGED
@@ -15,6 +15,12 @@ class RbVmomi::VIM::VirtualApp
|
|
15
15
|
PowerOnVApp_Task().wait_for_completion unless vapp_state? 'started'
|
16
16
|
end
|
17
17
|
|
18
|
+
def stop
|
19
|
+
return if vapp_state? 'stopped'
|
20
|
+
PowerOffVApp_Task()
|
21
|
+
sleep 2 until vapp_state? 'stopped'
|
22
|
+
end
|
23
|
+
|
18
24
|
def vm_pool
|
19
25
|
self
|
20
26
|
end
|
@@ -110,6 +116,55 @@ class RbVmomi::VIM::VirtualApp
|
|
110
116
|
UpdateVAppConfig( spec: vm_config_spec )
|
111
117
|
end
|
112
118
|
|
119
|
+
def port_ready?(port, timeout=5)
|
120
|
+
return false if vapp_state? 'stopped'
|
121
|
+
ready=self.vm.all? { |vm| vm.port_ready?(port, 2) }
|
122
|
+
ready
|
123
|
+
end
|
124
|
+
|
125
|
+
def wait_for(max=600, interval=2, &block)
|
126
|
+
elapsed = 0
|
127
|
+
start = Time.now
|
128
|
+
|
129
|
+
until (result = yield) || (elapsed > max)
|
130
|
+
sleep interval
|
131
|
+
elapsed = Time.now - start
|
132
|
+
end
|
133
|
+
|
134
|
+
unless result
|
135
|
+
raise "Waited #{max} seconds, giving up."
|
136
|
+
end
|
137
|
+
|
138
|
+
true
|
139
|
+
end
|
140
|
+
|
141
|
+
def wait_for_port(port)
|
142
|
+
wait_for { port_ready?(port) }
|
143
|
+
end
|
144
|
+
|
145
|
+
def move_to(path)
|
146
|
+
monkey.vapp(path) && raise("VirtualApp already exists. [#{path}]")
|
147
|
+
|
148
|
+
rename = self.name != path.basename
|
149
|
+
to_folder = monkey.folder! path.parent
|
150
|
+
reparent = parent != to_folder
|
151
|
+
|
152
|
+
if reparent
|
153
|
+
Rename_Task(newName: "#{path.basename}-tmp").wait_for_completion if rename
|
154
|
+
to_folder.MoveIntoFolder_Task(list: [self]).wait_for_completion
|
155
|
+
Rename_Task(newName: path.basename).wait_for_completion if rename
|
156
|
+
else
|
157
|
+
Rename_Task(newName: path.basename).wait_for_completion
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def move_to!(path)
|
162
|
+
dest_vapp = monkey.vapp(path)
|
163
|
+
dest_vapp.destroy if dest_vapp
|
164
|
+
|
165
|
+
move_to(path)
|
166
|
+
end
|
167
|
+
|
113
168
|
def _clone_params(vapp_name, dest, opts)
|
114
169
|
{
|
115
170
|
name: vapp_name,
|
data/spec/vapp_spec.rb
CHANGED
@@ -54,6 +54,110 @@ describe RbVmomi::VIM::VirtualApp do
|
|
54
54
|
it { expect(@spec_vapp.property :xyzzy).to be_nil }
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
describe '#move_to' do
|
58
|
+
it 'should raise a RuntimeError when given a path of an existing vApp' do
|
59
|
+
expect { @spec_vapp.move_to @spec_vapp_path }.to raise_error RuntimeError
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should move a vapp to a new name in the same folder' do
|
63
|
+
parent = @spec_vapp.parentFolder
|
64
|
+
|
65
|
+
@spec_vapp.move_to "#{@spec_vapp_path}-moved"
|
66
|
+
expect(@spec_vapp.name).to eq "#{@spec_vapp_path.basename}-moved"
|
67
|
+
expect(@spec_vapp.parentFolder).to eq parent
|
68
|
+
|
69
|
+
@spec_vapp.move_to @spec_vapp_path
|
70
|
+
expect(@spec_vapp.name).to eq @spec_vapp_path.basename
|
71
|
+
expect(@spec_vapp.parentFolder).to eq parent
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should move a vapp to the same name in a new folder' do
|
75
|
+
from_folder = @spec_vapp.parentFolder
|
76
|
+
from_name = @spec_vapp.name
|
77
|
+
to_path = "#{VM_SPEC_OPTS[:working_folder2]}/#{@spec_vapp_path.basename}"
|
78
|
+
to_folder = @monkey.folder VM_SPEC_OPTS[:working_folder2]
|
79
|
+
|
80
|
+
@spec_vapp.move_to to_path
|
81
|
+
expect(@spec_vapp.name).to eq from_name
|
82
|
+
expect(@spec_vapp.parentFolder).to eq to_folder
|
83
|
+
|
84
|
+
@spec_vapp.move_to @spec_vapp_path
|
85
|
+
expect(@spec_vapp.name).to eq from_name
|
86
|
+
expect(@spec_vapp.parentFolder).to eq from_folder
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should move a vapp to a new name in a new folder' do
|
90
|
+
from_folder = @spec_vapp.parentFolder
|
91
|
+
from_name = @spec_vapp.name
|
92
|
+
to_name = "#{@spec_vapp_path.basename}-different"
|
93
|
+
to_path = "#{VM_SPEC_OPTS[:working_folder2]}/#{to_name}"
|
94
|
+
to_folder = @monkey.folder VM_SPEC_OPTS[:working_folder2]
|
95
|
+
|
96
|
+
@spec_vapp.move_to to_path
|
97
|
+
expect(@spec_vapp.name).to eq to_name
|
98
|
+
expect(@spec_vapp.parentFolder).to eq to_folder
|
99
|
+
|
100
|
+
@spec_vapp.move_to @spec_vapp_path
|
101
|
+
expect(@spec_vapp.name).to eq from_name
|
102
|
+
expect(@spec_vapp.parentFolder).to eq from_folder
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#move_to!' do
|
107
|
+
before(:all) do
|
108
|
+
@other_path = "#{@spec_vapp_path}-other"
|
109
|
+
@other_vapp = @spec_vapp.clone_to @other_path
|
110
|
+
end
|
111
|
+
|
112
|
+
after(:all) do
|
113
|
+
other_vapp = @monkey.vapp @other_path
|
114
|
+
other_vapp.destroy if other_vapp
|
115
|
+
end
|
58
116
|
|
117
|
+
it 'should overwrite a vApp when given a path of an existing VM' do
|
118
|
+
@spec_vapp.move_to! @other_path
|
119
|
+
expect(@monkey.vapp @other_path).to_not be_nil
|
120
|
+
|
121
|
+
@spec_vapp.move_to @spec_vapp_path
|
122
|
+
expect(@monkey.vapp @other_path).to be_nil
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe '#stop' do
|
127
|
+
it 'should return successfully when the vApp is already powered off' do
|
128
|
+
expect { @spec_vapp.stop }.to_not raise_error
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe '#port_ready?' do
|
133
|
+
it 'should be false when the vApp is powered off' do
|
134
|
+
expect( @spec_vapp.port_ready? 22 ).to be_falsey
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'that has had #start called' do
|
139
|
+
before(:all) { @spec_vapp.start }
|
140
|
+
|
141
|
+
context 'immediately following start' do
|
142
|
+
describe '#port_ready?' do
|
143
|
+
it 'should be false' do
|
144
|
+
expect(@spec_vapp.port_ready? 22).to be_falsey
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'following wait_for_port' do
|
150
|
+
before(:all) { @spec_vapp.wait_for_port 22 }
|
151
|
+
|
152
|
+
describe '#port_ready?' do
|
153
|
+
it 'should be true' do
|
154
|
+
expect(@spec_vapp.port_ready? 22).to be_truthy
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
after(:all) { @spec_vapp.stop }
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
59
163
|
end
|
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.7.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-
|
12
|
+
date: 2014-09-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -29,73 +29,73 @@ dependencies:
|
|
29
29
|
name: rbvmomi
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '1.5'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '1.5'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: bundler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '1.6'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.6'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rake
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '2.14'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '2.14'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rspec-its
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
-
description:
|
98
|
+
description: " simple to use vsphere methods "
|
99
99
|
email:
|
100
100
|
- brian@duprasville.com
|
101
101
|
- dsmith@rallydev.com
|
@@ -103,7 +103,7 @@ executables: []
|
|
103
103
|
extensions: []
|
104
104
|
extra_rdoc_files: []
|
105
105
|
files:
|
106
|
-
- .gitignore
|
106
|
+
- ".gitignore"
|
107
107
|
- CHANGELOG.md
|
108
108
|
- Gemfile
|
109
109
|
- LICENSE.txt
|
@@ -134,17 +134,17 @@ require_paths:
|
|
134
134
|
- lib
|
135
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
|
-
- -
|
142
|
+
- - ">="
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
146
146
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.
|
147
|
+
rubygems_version: 2.2.2
|
148
148
|
signing_key:
|
149
149
|
specification_version: 4
|
150
150
|
summary: simple to use vsphere methods
|