vmware-vra 1.1.0 → 1.2.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: 56ccef7bb2c458c16968ac45d3ba00306e0cfe39
4
- data.tar.gz: 8023755792111c3fbebb453f3b651c6d12dde66f
3
+ metadata.gz: 01f8978ee0a6e0ed1865001f50876e122b5ee30f
4
+ data.tar.gz: ff5897d229cc674c2f5b3310c29bbe7857f6b55c
5
5
  SHA512:
6
- metadata.gz: 24cd4008b751382b4869c1a5e9abb49c35087ad0f65c29e9e2c9911a34a07ada9a31323e16c1867454ba19081b73ec788da3807b9a78d4b0d33148edd4ca2737
7
- data.tar.gz: cd5567b6825a179d15a043d048fa5862fd88b6ee8ae3ef1a4ca4ed01acc378ee1cd1a28f148705a8c2d36ee39de2672aae72c0f1f92df471e50440c347012583
6
+ metadata.gz: fe516b37bc68296e53500270d3ac357d52ed176974e55ae539ab302f3cffa6453be5cc264c27f0b41ba1813027145d2ad99641ee9f545704213e827ee55b67ae
7
+ data.tar.gz: b94a9d038ea6dbe094b601baedd89fc2c0c26b455613699ffc88cad4556c8117d2244204a3671c336252a51bfbd6eb50d490975785eac7268c47d03fd8636f0d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## v1.2.0
2
+ * [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
+
1
4
  ## v1.1.0
2
5
  * [pr#9](https://github.com/chef-partners/vmware-vra-gem/pull/9) Mask password and bearer token in console/debug/log output.
3
6
  Thanks to [@rubytester](https://github.com/rubytester) for the idea and initial proposal to address in [pr#7](https://github.com/chef-partners/vmware-vra-gem/pull/7)
data/README.md CHANGED
@@ -170,6 +170,20 @@ vra.resources.all_resources
170
170
  vra.requests.all_requests
171
171
  ```
172
172
 
173
+ ### Pagination
174
+
175
+ vRA paginates API requests where lists of items are returned. By default, this gem will ask vRA to provide items in groups of 20. However, as reported in [Issue 10](https://github.com/chef-partners/vmware-vra-gem/issues/10), it appears vRA may have a pagination bug. You can change the default page size from 20 to a value of your choice by passing in a `page_size` option when setting up the client:
176
+
177
+ ```ruby
178
+ vra = Vra::Client.new(username: 'devmgr@corp.local', password: 'mypassword', tenant: 'mytenant', base_url: 'https://vra.corp.local', verify_ssl: true, page_size: 100)
179
+ ```
180
+
181
+ ... or setting `page_size` on the client object after you've created it:
182
+
183
+ ```ruby
184
+ client.page_size = 100
185
+ ```
186
+
173
187
  ## License and Authors
174
188
 
175
189
  Author:: Chef Partner Engineering (<partnereng@chef.io>)
data/lib/vra/client.rb CHANGED
@@ -23,7 +23,7 @@ require 'passwordmasker'
23
23
  module Vra
24
24
  # rubocop:disable ClassLength
25
25
  class Client
26
- attr_accessor :bearer_token
26
+ attr_accessor :bearer_token, :page_size
27
27
 
28
28
  def initialize(opts)
29
29
  @base_url = opts[:base_url]
@@ -32,6 +32,7 @@ module Vra
32
32
  @tenant = opts[:tenant]
33
33
  @verify_ssl = opts.fetch(:verify_ssl, true)
34
34
  @bearer_token = PasswordMasker.new(nil)
35
+ @page_size = opts.fetch(:page_size, 20)
35
36
 
36
37
  validate_client_options!
37
38
  end
@@ -138,10 +139,10 @@ module Vra
138
139
  response.body
139
140
  end
140
141
 
141
- def http_get_paginated_array!(path, limit=20)
142
+ def http_get_paginated_array!(path)
142
143
  items = []
143
144
  page = 1
144
- base_path = path + "?limit=#{limit}"
145
+ base_path = path + "?limit=#{page_size}"
145
146
 
146
147
  loop do
147
148
  response = FFI_Yajl::Parser.parse(http_get!("#{base_path}&page=#{page}"))
@@ -151,6 +152,12 @@ module Vra
151
152
  page += 1
152
153
  end
153
154
 
155
+ raise Vra::Exception::DuplicateItemsDetected,
156
+ 'Duplicate items were returned by the vRA API. ' \
157
+ 'Increase your page size to avoid this vRA API bug. ' \
158
+ 'See https://github.com/chef-partners/vmware-vra-gem#pagination ' \
159
+ 'for more information.' if items.uniq!
160
+
154
161
  items
155
162
  end
156
163
 
@@ -20,6 +20,7 @@ require 'ffi_yajl'
20
20
 
21
21
  module Vra
22
22
  module Exception
23
+ class DuplicateItemsDetected < RuntimeError; end
23
24
  class NotFound < RuntimeError; end
24
25
  class RequestError < RuntimeError; end
25
26
  class Unauthorized < RuntimeError; end
data/lib/vra/version.rb CHANGED
@@ -17,5 +17,5 @@
17
17
  #
18
18
 
19
19
  module Vra
20
- VERSION = '1.1.0'
20
+ VERSION = '1.2.0'
21
21
  end
data/spec/client_spec.rb CHANGED
@@ -275,11 +275,12 @@ describe Vra::Client do
275
275
 
276
276
  describe '#http_get_paginated_array!' do
277
277
  it 'allows a limit override' do
278
+ client.page_size = 10
278
279
  expect(client).to receive(:http_get!)
279
280
  .with('/test?limit=10&page=1')
280
281
  .and_return({ 'content' => [], 'metadata' => { 'totalPages' => 1 } }.to_json)
281
282
 
282
- client.http_get_paginated_array!('/test', 10)
283
+ client.http_get_paginated_array!('/test')
283
284
  end
284
285
 
285
286
  it 'only calls http_get! once when total pages is 0 (no items)' do
@@ -313,6 +314,14 @@ describe Vra::Client do
313
314
 
314
315
  client.http_get_paginated_array!('/test')
315
316
  end
317
+
318
+ it 'raises an exception if duplicate items are returned by the API' do
319
+ allow(client).to receive(:http_get!)
320
+ .with('/test?limit=20&page=1')
321
+ .and_return({ 'content' => [ 1, 2, 3, 1 ], 'metadata' => { 'totalPages' => 1 } }.to_json)
322
+
323
+ expect { client.http_get_paginated_array!('/test') }.to raise_error(Vra::Exception::DuplicateItemsDetected)
324
+ end
316
325
  end
317
326
 
318
327
  describe '#http_post' 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.1.0
4
+ version: 1.2.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-17 00:00:00.000000000 Z
11
+ date: 2015-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client