vmware-vra 1.2.0 → 1.3.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: 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.