bosh_vcloud_cpi 0.7.7 → 0.7.8

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: 07d91dc15ea8945ce0b95c3b27544e22ef364f5b
4
- data.tar.gz: 349ef92995b29e875dcada52f16d22e4081770ce
3
+ metadata.gz: fcbdf7f3f5c6a9d0852c992f96b106ddd67503f0
4
+ data.tar.gz: a48e39654ba4916e2c28cf221f1e949ce4224e55
5
5
  SHA512:
6
- metadata.gz: 71a8bda2ffac0f6df601119fcaf0fcd9a7b2dfdb30dec1eaca871a926a7a0dbfc7b46de099b1f365ef69e845225b4e6050c0627af52e53095b378859d7ba4ec8
7
- data.tar.gz: c88c7e27548b5e1ed7cd7fb576f1e8d8b50202e2fd53d5cdec3724f31bc2ece235144e6541adcd61b5845fde6ca6fa275dff845ec40c715b478966d5a0b8fb2f
6
+ metadata.gz: ad0c6cd71dbe20b8e184e75660ff18d7cb727dee725b9c9a6f47f8f8f941a2b867cb2f3e5b03b8ad32c30af8282b501d37fdb7dbece810d0251416de5e9ef0fb
7
+ data.tar.gz: 0ccad8d4448fb37560df3cfbf6128ffe4caad3e833f463c398ec7d10998b9d24e5e7c3290bf5d8255b88ba618a1d4055a761675729303b31131a61635a1cdf83
@@ -6,4 +6,7 @@ module VCloudCloud
6
6
 
7
7
  class TimeoutError < StandardError
8
8
  end
9
+
10
+ class ObjectExistsError < StandardError
11
+ end
9
12
  end
@@ -1,6 +1,7 @@
1
1
  require 'base64'
2
2
  require 'uri'
3
3
  require 'rest_client'
4
+ require 'common/common'
4
5
 
5
6
  require_relative 'cache'
6
7
  require_relative 'file_uploader'
@@ -188,7 +189,7 @@ module VCloudCloud
188
189
  WAIT_DELAY = 5 # delay in seconds for pooling next task status
189
190
  COOKIE_TIMEOUT = 600 # default timeout in seconds, if not specified in configuration file, after which session must be re-created
190
191
  RETRY_MAX = 3 # maximum attempts
191
- RETRY_DELAY = 100 # delay of first retry, the next is * 2
192
+ RETRY_DELAY = 0.1 # wait time before retrying
192
193
 
193
194
  def cookie_available?
194
195
  @cookie && Time.now < @cookie_expiration
@@ -219,6 +220,21 @@ module VCloudCloud
219
220
  end
220
221
  end
221
222
 
223
+ def raise_specific_error(response, e)
224
+ begin
225
+ wrapped_response = VCloudSdk::Xml::WrapperFactory.wrap_document response.body
226
+ rescue => ex
227
+ @logger.debug "Wrap document raise error: #{ex.message}"
228
+ end
229
+
230
+ unless wrapped_response.nil?
231
+ if wrapped_response.is_a?VCloudSdk::Xml::Error
232
+ wrapped_response.exception(e)
233
+ end
234
+ end
235
+ raise e
236
+ end
237
+
222
238
  def send_request(method, path, options = {})
223
239
  path = path.href unless path.is_a?(String)
224
240
 
@@ -238,11 +254,19 @@ module VCloudCloud
238
254
  params[:cookies] = @cookie if !options[:login] && cookie_available?
239
255
  params[:payload] = options[:payload].to_s if options[:payload]
240
256
  params[:headers].merge! options[:headers] if options[:headers]
241
- response = retry_for_network_issue do
257
+
258
+ errors = [RestClient::Exception, OpenSSL::SSL::SSLError, OpenSSL::X509::StoreError]
259
+ Bosh::Common.retryable(sleep: @retry_delay, tries: 20, on: errors) do |tries, error|
242
260
  @logger.debug "REST REQ #{method.to_s.upcase} #{params[:url]} #{params[:headers].inspect} #{params[:cookies].inspect} #{params[:payload]}"
261
+ @logger.warn "Attempting to retry #{method.to_s.upcase} request against #{params[:url]} after #{tries} unsuccessful attempts. Latest error: #{error.inspect}" if tries > 1
262
+
243
263
  RestClient::Request.execute params do |response, request, result, &block|
244
264
  @logger.debug "REST RES #{response.code} #{response.headers.inspect} #{response.body}"
245
- response.return! request, result, &block
265
+ begin
266
+ response.return! request, result, &block
267
+ rescue => e
268
+ raise_specific_error(response, e)
269
+ end
246
270
  end
247
271
  end
248
272
  end
@@ -271,24 +295,5 @@ module VCloudCloud
271
295
  def wrap_response(response)
272
296
  VCloudSdk::Xml::WrapperFactory.wrap_document response
273
297
  end
274
-
275
- def retry_for_network_issue
276
- retries = 0
277
- delay = @retry_delay
278
- result = nil
279
- loop do
280
- begin
281
- result = yield
282
- break
283
- rescue RestClient::Exception => ex
284
- raise ex if retries >= @retry_max
285
- @logger.error "RestClient exception (retry after #{delay}ms): #{ex}"
286
- sleep(delay / 1000)
287
- delay *= 2
288
- retries += 1
289
- end
290
- end
291
- result
292
- end
293
298
  end
294
299
  end
@@ -96,6 +96,10 @@ module VCloudSdk
96
96
  href.split('/')[-1]
97
97
  end
98
98
 
99
+ def error
100
+ @root["Error"]
101
+ end
102
+
99
103
  def name
100
104
  @root["name"]
101
105
  end
@@ -311,3 +315,4 @@ require_relative "wrapper_classes/vdc"
311
315
  require_relative "wrapper_classes/vdc_storage_profile"
312
316
  require_relative "wrapper_classes/virtual_hardware_section"
313
317
  require_relative "wrapper_classes/vm"
318
+ require_relative "wrapper_classes/error_wrapper"
@@ -0,0 +1,29 @@
1
+ require 'cloud/vcloud/errors'
2
+
3
+ module VCloudSdk
4
+ module Xml
5
+ class Error < Wrapper
6
+
7
+ def major_error
8
+ @root["majorErrorCode"]
9
+ end
10
+
11
+ def minor_error
12
+ @root["minorErrorCode"]
13
+ end
14
+
15
+ def error_msg
16
+ @root["message"]
17
+ end
18
+
19
+ def exception(e)
20
+ if error_msg.include? "There is already a VM named" and major_error == "400"
21
+ raise VCloudCloud::ObjectExistsError
22
+ else
23
+ raise e
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_vcloud_cpi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.7
4
+ version: 0.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - VMware
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-09 00:00:00.000000000 Z
11
+ date: 2015-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bosh_common
@@ -124,7 +124,7 @@ dependencies:
124
124
  version: '0'
125
125
  description: |-
126
126
  BOSH vCloud CPI
127
- c90a70
127
+ a3d5f4
128
128
  email: support@cloudfoundry.com
129
129
  executables: []
130
130
  extensions: []
@@ -175,6 +175,7 @@ files:
175
175
  - lib/cloud/vcloud/xml/wrapper_classes/disk_attach_or_detach_params.rb
176
176
  - lib/cloud/vcloud/xml/wrapper_classes/disk_create_params.rb
177
177
  - lib/cloud/vcloud/xml/wrapper_classes/entity.rb
178
+ - lib/cloud/vcloud/xml/wrapper_classes/error_wrapper.rb
178
179
  - lib/cloud/vcloud/xml/wrapper_classes/file.rb
179
180
  - lib/cloud/vcloud/xml/wrapper_classes/hard_disk_item_wrapper.rb
180
181
  - lib/cloud/vcloud/xml/wrapper_classes/instantiate_vapp_template_params.rb