vmware-vra 1.2.0 → 1.3.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: 01f8978ee0a6e0ed1865001f50876e122b5ee30f
4
- data.tar.gz: ff5897d229cc674c2f5b3310c29bbe7857f6b55c
3
+ metadata.gz: 563dc4afc43f55acb9a8730e85c36eb056bf8659
4
+ data.tar.gz: 7cd1b95d64942372852164ae4a9d46d7b29eb102
5
5
  SHA512:
6
- metadata.gz: fe516b37bc68296e53500270d3ac357d52ed176974e55ae539ab302f3cffa6453be5cc264c27f0b41ba1813027145d2ad99641ee9f545704213e827ee55b67ae
7
- data.tar.gz: b94a9d038ea6dbe094b601baedd89fc2c0c26b455613699ffc88cad4556c8117d2244204a3671c336252a51bfbd6eb50d490975785eac7268c47d03fd8636f0d
6
+ metadata.gz: bfd135e158d35ff715734115ba2185762d680b397e4488bb7d3afa4ff19a7c8cb64b58f244512d9c4d12d60f8822c349bc02e8dcc308cff5c9b3bac59e1006e3
7
+ data.tar.gz: f32e242fe52fdb7596de59cf6d792f7097fd3b9a514e80204b608219b6f7799c15cd4f6f73db7b71d8c0c24797cfced5ceae64232ad5f68366c9db91ccab7b27
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## v1.3.0
2
+ * [pr#13](https://github.com/chef-partners/vmware-vra-gem/pull/13) Additional methods to support a vRA driver for Chef Provisioning
3
+
1
4
  ## v1.2.0
2
5
  * [pr#11](https://github.com/chef-partners/vmware-vra-gem/pull/11) Ability to set paginated results page size, which is a workaround for issue reported in #10 regarding duplicate items returned in paginated results.
3
6
 
data/lib/vra/resource.rb CHANGED
@@ -49,55 +49,87 @@ module Vra
49
49
  rescue Vra::Exception::HTTPNotFound
50
50
  raise Vra::Exception::NotFound, "resource ID #{@id} does not exist"
51
51
  end
52
+ alias_method :refresh, :fetch_resource_data
52
53
 
53
54
  def name
54
- @resource_data['name']
55
+ resource_data['name']
56
+ end
57
+
58
+ def description
59
+ resource_data['description']
55
60
  end
56
61
 
57
62
  def status
58
- @resource_data['status']
63
+ resource_data['status']
59
64
  end
60
65
 
61
66
  def vm?
62
- @resource_data['resourceTypeRef']['id'] == 'Infrastructure.Virtual'
67
+ resource_data['resourceTypeRef']['id'] == 'Infrastructure.Virtual'
63
68
  end
64
69
 
65
70
  def tenant_id
66
- @resource_data['organization']['tenantRef']
71
+ resource_data['organization']['tenantRef']
67
72
  end
68
73
 
69
74
  def tenant_name
70
- @resource_data['organization']['tenantLabel']
75
+ resource_data['organization']['tenantLabel']
71
76
  end
72
77
 
73
78
  def subtenant_id
74
- @resource_data['organization']['subtenantRef']
79
+ resource_data['organization']['subtenantRef']
75
80
  end
76
81
 
77
82
  def subtenant_name
78
- @resource_data['organization']['subtenantLabel']
83
+ resource_data['organization']['subtenantLabel']
79
84
  end
80
85
 
81
86
  def catalog_id
82
- @resource_data['catalogItem']['id']
87
+ resource_data['catalogItem']['id']
83
88
  end
84
89
 
85
90
  def catalog_name
86
- @resource_data['catalogItem']['label']
91
+ resource_data['catalogItem']['label']
87
92
  end
88
93
 
89
94
  def owner_ids
90
- @resource_data['owners'].map { |x| x['ref'] }
95
+ resource_data['owners'].map { |x| x['ref'] }
91
96
  end
92
97
 
93
98
  def owner_names
94
- @resource_data['owners'].map { |x| x['value'] }
99
+ resource_data['owners'].map { |x| x['value'] }
100
+ end
101
+
102
+ def machine_status
103
+ status = resource_data['resourceData']['entries'].find { |x| x['key'] == 'MachineStatus' }
104
+ raise 'No MachineStatus entry available for resource' if status.nil?
105
+
106
+ status['value']['value']
107
+ end
108
+
109
+ def machine_on?
110
+ machine_status == 'On'
111
+ end
112
+
113
+ def machine_off?
114
+ machine_status == 'Off'
115
+ end
116
+
117
+ def machine_turning_on?
118
+ machine_status == 'TurningOn'
119
+ end
120
+
121
+ def machine_turning_off?
122
+ %w(TurningOff ShuttingDown).include?(machine_status)
123
+ end
124
+
125
+ def machine_in_provisioned_state?
126
+ machine_status == 'MachineProvisioned'
95
127
  end
96
128
 
97
129
  def network_interfaces
98
130
  return unless vm?
99
131
 
100
- network_list = @resource_data['resourceData']['entries'].find { |x| x['key'] == 'NETWORK_LIST' }
132
+ network_list = resource_data['resourceData']['entries'].find { |x| x['key'] == 'NETWORK_LIST' }
101
133
  return if network_list.nil?
102
134
 
103
135
  network_list['value']['items'].each_with_object([]) do |item, nics|
@@ -127,9 +159,9 @@ module Vra
127
159
  def actions
128
160
  # if this Resource instance was created with data from a "all_resources" fetch,
129
161
  # it is likely missing operations data because the vRA API is not pleasant sometimes.
130
- fetch_resource_data if @resource_data['operations'].nil?
162
+ fetch_resource_data if resource_data['operations'].nil?
131
163
 
132
- @resource_data['operations']
164
+ resource_data['operations']
133
165
  end
134
166
 
135
167
  def action_id_by_name(name)
@@ -148,6 +180,27 @@ module Vra
148
180
  submit_action_request(action_id)
149
181
  end
150
182
 
183
+ def shutdown
184
+ action_id = action_id_by_name('Shutdown')
185
+ raise Vra::Exception::NotFound, "No shutdown action found for resource #{@id}" if action_id.nil?
186
+
187
+ submit_action_request(action_id)
188
+ end
189
+
190
+ def poweroff
191
+ action_id = action_id_by_name('Power Off')
192
+ raise Vra::Exception::NotFound, "No power-off action found for resource #{@id}" if action_id.nil?
193
+
194
+ submit_action_request(action_id)
195
+ end
196
+
197
+ def poweron
198
+ action_id = action_id_by_name('Power On')
199
+ raise Vra::Exception::NotFound, "No power-on action found for resource #{@id}" if action_id.nil?
200
+
201
+ submit_action_request(action_id)
202
+ end
203
+
151
204
  def action_request_payload(action_id)
152
205
  {
153
206
  '@type' => 'ResourceActionRequest',
data/lib/vra/version.rb CHANGED
@@ -17,5 +17,5 @@
17
17
  #
18
18
 
19
19
  module Vra
20
- VERSION = '1.2.0'
20
+ VERSION = '1.3.0'
21
21
  end
@@ -6,6 +6,7 @@
6
6
  "label": "Virtual Machine"
7
7
  },
8
8
  "name": "hol-dev-11",
9
+ "description": "test-description",
9
10
  "status": "ACTIVE",
10
11
  "organization": {
11
12
  "tenantRef": "vsphere.local",
@@ -19,6 +19,23 @@
19
19
  require 'spec_helper'
20
20
  require 'ffi_yajl'
21
21
 
22
+ shared_examples_for 'a resource action' do |action_method, action_name|
23
+ context 'when the action is available' do
24
+ it 'calls gets the action ID and submits the request' do
25
+ expect(resource).to receive(:action_id_by_name).with(action_name).and_return('action-123')
26
+ expect(resource).to receive(:submit_action_request).with('action-123')
27
+ resource.send(action_method)
28
+ end
29
+ end
30
+
31
+ context 'when the action is not available' do
32
+ it 'raises an exception' do
33
+ expect(resource).to receive(:action_id_by_name).with(action_name).and_return nil
34
+ expect { resource.send(action_method) }.to raise_error(Vra::Exception::NotFound)
35
+ end
36
+ end
37
+ end
38
+
22
39
  describe Vra::Resource do
23
40
  let(:client) do
24
41
  Vra::Client.new(username: 'user@corp.local',
@@ -93,6 +110,12 @@ describe Vra::Resource do
93
110
  end
94
111
  end
95
112
 
113
+ describe '#description' do
114
+ it 'returns the correct description' do
115
+ expect(resource.description).to eq 'test-description'
116
+ end
117
+ end
118
+
96
119
  describe '#status' do
97
120
  it 'returns the correct status' do
98
121
  expect(resource.status).to eq 'ACTIVE'
@@ -141,6 +164,102 @@ describe Vra::Resource do
141
164
  end
142
165
  end
143
166
 
167
+ describe '#machine_status' do
168
+ context 'when no MachineStatus exists' do
169
+ let(:resource_data) { { 'resourceData' => { 'entries' => [] } } }
170
+
171
+ it 'raises an exception' do
172
+ allow(resource).to receive(:resource_data).and_return(resource_data)
173
+ expect { resource.machine_status }.to raise_error(RuntimeError)
174
+ end
175
+ end
176
+
177
+ context 'when MachineStatus Exists' do
178
+ let(:resource_data) do
179
+ {
180
+ 'resourceData' => {
181
+ 'entries' => [
182
+ {
183
+ 'key' => 'MachineStatus',
184
+ 'value' => { 'type' => 'string', 'value' => 'Off' }
185
+ }
186
+ ]
187
+ }
188
+ }
189
+ end
190
+
191
+ it 'returns the correct status value' do
192
+ allow(resource).to receive(:resource_data).and_return(resource_data)
193
+ expect(resource.machine_status).to eq('Off')
194
+ end
195
+ end
196
+ end
197
+
198
+ describe '#machine_on?' do
199
+ it 'returns true if the machine_status is On' do
200
+ allow(resource).to receive(:machine_status).and_return('On')
201
+ expect(resource.machine_on?).to eq(true)
202
+ end
203
+
204
+ it 'returns false if the machine_status is not On' do
205
+ allow(resource).to receive(:machine_status).and_return('Off')
206
+ expect(resource.machine_on?).to eq(false)
207
+ end
208
+ end
209
+
210
+ describe '#machine_off?' do
211
+ it 'returns true if the machine_status is Off' do
212
+ allow(resource).to receive(:machine_status).and_return('Off')
213
+ expect(resource.machine_off?).to eq(true)
214
+ end
215
+
216
+ it 'returns false if the machine_status is not Off' do
217
+ allow(resource).to receive(:machine_status).and_return('On')
218
+ expect(resource.machine_off?).to eq(false)
219
+ end
220
+ end
221
+
222
+ describe '#machine_turning_on?' do
223
+ it 'returns true if the machine_status is TurningOn' do
224
+ allow(resource).to receive(:machine_status).and_return('TurningOn')
225
+ expect(resource.machine_turning_on?).to eq(true)
226
+ end
227
+
228
+ it 'returns false if the machine_status is not TurningOn' do
229
+ allow(resource).to receive(:machine_status).and_return('On')
230
+ expect(resource.machine_turning_on?).to eq(false)
231
+ end
232
+ end
233
+
234
+ describe '#machine_turning_off?' do
235
+ it 'returns true if the machine_status is TurningOff' do
236
+ allow(resource).to receive(:machine_status).and_return('TurningOff')
237
+ expect(resource.machine_turning_off?).to eq(true)
238
+ end
239
+
240
+ it 'returns true if the machine_status is ShuttingDown' do
241
+ allow(resource).to receive(:machine_status).and_return('ShuttingDown')
242
+ expect(resource.machine_turning_off?).to eq(true)
243
+ end
244
+
245
+ it 'returns false if the machine_status is not TurningOff or ShuttingDown' do
246
+ allow(resource).to receive(:machine_status).and_return('Off')
247
+ expect(resource.machine_turning_off?).to eq(false)
248
+ end
249
+ end
250
+
251
+ describe '#machine_in_provisioned_state?' do
252
+ it 'returns true if the machine_status is MachineProvisioned' do
253
+ allow(resource).to receive(:machine_status).and_return('MachineProvisioned')
254
+ expect(resource.machine_in_provisioned_state?).to eq(true)
255
+ end
256
+
257
+ it 'returns false if the machine_status is not MachineProvisioned' do
258
+ allow(resource).to receive(:machine_status).and_return('On')
259
+ expect(resource.machine_in_provisioned_state?).to eq(false)
260
+ end
261
+ end
262
+
144
263
  describe '#network_interfaces' do
145
264
  it 'returns an array of 2 elements' do
146
265
  expect(resource.network_interfaces.size).to be 2
@@ -194,20 +313,19 @@ describe Vra::Resource do
194
313
  end
195
314
 
196
315
  describe '#destroy' do
197
- context 'when the destroy action is available' do
198
- it 'calls gets the action ID and submits the request' do
199
- expect(resource).to receive(:action_id_by_name).with('Destroy').and_return('action-123')
200
- expect(resource).to receive(:submit_action_request).with('action-123')
201
- resource.destroy
202
- end
203
- end
316
+ it_behaves_like 'a resource action', :destroy, 'Destroy'
317
+ end
204
318
 
205
- context 'when the destroy action is not available' do
206
- it 'raises an exception' do
207
- allow(resource).to receive(:action_id_by_name).and_return nil
208
- expect { resource.destroy }.to raise_error(Vra::Exception::NotFound)
209
- end
210
- end
319
+ describe '#shutdown' do
320
+ it_behaves_like 'a resource action', :shutdown, 'Shutdown'
321
+ end
322
+
323
+ describe '#poweroff' do
324
+ it_behaves_like 'a resource action', :poweroff, 'Power Off'
325
+ end
326
+
327
+ describe '#poweron' do
328
+ it_behaves_like 'a resource action', :poweron, 'Power On'
211
329
  end
212
330
 
213
331
  describe '#submit_action_request' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmware-vra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Leff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-24 00:00:00.000000000 Z
11
+ date: 2015-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  requirements: []
182
182
  rubyforge_project:
183
- rubygems_version: 2.4.4
183
+ rubygems_version: 2.4.8
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: Client gem for interacting with VMware vRealize Automation.