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 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