vmonkey 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f06b3dd64edba38e7b3f7b330edffae937941e3
4
- data.tar.gz: 59a854225c0012e6719d3800feac1c83b7849d5b
3
+ metadata.gz: 2c508835c077aca3004f773a73dfb541babb3819
4
+ data.tar.gz: 326b56af7fd2c5dd1ba364fe834fd0546863e859
5
5
  SHA512:
6
- metadata.gz: cdcb5eeeab2916d3b0869369c4a6301ee302d3fbe90565b1e85d4030eb7de592275e7b79f1291b1334b856eb0bc8e5f87b019f35eeccc54a23a5c7c921b20f34
7
- data.tar.gz: 9e437485f66d560e513a208f6dbe74a78f0e34df3e5ba4f783ad2202dfc0d95e8c9ae3014e54fc57f31faad90faee22332859c5eae97dba20769aa754029fa13
6
+ metadata.gz: 47e5a378a2fadf4304ff8d4bf19f66b30ce9745dabc44ac5a30262b428f57500285a1bd730bb90df0709d7c2daeb858c220ceb4114f5be33c5f81d73d2ed864d
7
+ data.tar.gz: 04c89a6f1bf9e2f978bbdf4b78086616a174e6f5326b3a3095868c4ef555e83fc3d7759111b5d991038f6d6cdd70d43b42033dc5a9020e6608a144b0a19dad77
data/.gitignore CHANGED
@@ -22,3 +22,4 @@ tmp
22
22
  mkmf.log
23
23
  .vmonkey
24
24
  .DS_Store
25
+ .ruby-version
@@ -1,3 +1,3 @@
1
1
  module Vmonkey
2
- VERSION = '0.6.2'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -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
- end
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.6.2
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-08-26 00:00:00.000000000 Z
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: ' simple to use vsphere methods '
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.0.14
147
+ rubygems_version: 2.2.2
148
148
  signing_key:
149
149
  specification_version: 4
150
150
  summary: simple to use vsphere methods