bosh_openstack_cpi 1.3016.0 → 1.3022.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: 025e73f0033cb3d734e2281b75ac4153e3db3ae5
4
- data.tar.gz: f66c0bbae2e9115c33d6e0bbce4e7f676583a47d
3
+ metadata.gz: fce52580bbf8ebe362d5ac6a5bd24d265c61604e
4
+ data.tar.gz: 20678c5e476b29b4f0f934530e3cdf5455d69f52
5
5
  SHA512:
6
- metadata.gz: 0515b11c8c613aa444bbe56dc19f45d5784c350944e457bb057cf901eb6c9f7512991b44f00f9d9f3f80114d236b960464f2903ca57e1a166df97cb90ec4d907
7
- data.tar.gz: f8847d8c6909d5ce0bc9c316955e7edc4cfe578308653c3e7435f54c144032b9800de4c68d38efeec0a2fde52f236f9a2876ebdebd909ef232c62ab4e4d6a97c
6
+ metadata.gz: 0426193fa3cd30fb97e79293bae060a73a31989faaad498e5bc105f8f91354d739edf1ae0711d6dc8127b8f9b847466385f4d8bbbb178e0d154b42db114edc48
7
+ data.tar.gz: f0efe00cb7da5a25493be3ee4d27789346f2c4edac5899f95fedda0661b12528efb3be6b8230699421175f78f939344ee6aec9f19a2b675beb764417a9e8a178
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2009-2013 VMware, Inc.
2
- # Copyright (c) 2012 Piston Cloud Computing, Inc.
1
+ require 'common/common'
3
2
 
4
3
  module Bosh::OpenStackCloud
5
4
  ##
@@ -7,11 +6,14 @@ module Bosh::OpenStackCloud
7
6
  class Cloud < Bosh::Cloud
8
7
  include Helpers
9
8
 
10
- OPTION_KEYS = ['openstack', 'registry', 'agent']
9
+ OPTION_KEYS = ['openstack', 'registry', 'agent', 'use_dhcp']
11
10
 
12
11
  BOSH_APP_DIR = '/var/vcap/bosh'
13
12
  FIRST_DEVICE_NAME_LETTER = 'b'
14
13
 
14
+ CONNECT_RETRY_DELAY = 1
15
+ CONNECT_RETRY_COUNT = 5
16
+
15
17
  attr_reader :openstack
16
18
  attr_reader :registry
17
19
  attr_reader :glance
@@ -44,6 +46,7 @@ module Bosh::OpenStackCloud
44
46
  @wait_resource_poll_interval = @openstack_properties["wait_resource_poll_interval"]
45
47
  @boot_from_volume = @openstack_properties["boot_from_volume"]
46
48
  @boot_volume_cloud_properties = @openstack_properties["boot_volume_cloud_properties"] || {}
49
+ @use_dhcp = @openstack_properties.fetch('use_dhcp', true)
47
50
 
48
51
  unless @openstack_properties['auth_url'].match(/\/tokens$/)
49
52
  @openstack_properties['auth_url'] = @openstack_properties['auth_url'] + '/tokens'
@@ -63,10 +66,21 @@ module Bosh::OpenStackCloud
63
66
  :openstack_endpoint_type => @openstack_properties['endpoint_type'],
64
67
  :connection_options => @openstack_properties['connection_options'].merge(extra_connection_options)
65
68
  }
69
+
70
+ connect_retry_errors = [Excon::Errors::GatewayTimeout]
71
+
72
+ connect_retry_options = {
73
+ sleep: CONNECT_RETRY_DELAY,
74
+ tries: CONNECT_RETRY_COUNT,
75
+ on: connect_retry_errors,
76
+ }
77
+
66
78
  begin
67
- @openstack = Fog::Compute.new(openstack_params)
68
- rescue Exception => e
69
- @logger.error(e)
79
+ Bosh::Common.retryable(connect_retry_options) do |tries, error|
80
+ @logger.error("Failed #{tries} times, last failure due to: #{error.inspect}") unless error.nil?
81
+ @openstack = Fog::Compute.new(openstack_params)
82
+ end
83
+ rescue Bosh::Common::RetryCountExceeded, Excon::Errors::ClientError, Excon::Errors::ServerError
70
84
  cloud_error('Unable to connect to the OpenStack Compute API. Check task debug log for details.')
71
85
  end
72
86
 
@@ -84,10 +98,13 @@ module Bosh::OpenStackCloud
84
98
  :openstack_endpoint_type => @openstack_properties['endpoint_type'],
85
99
  :connection_options => @openstack_properties['connection_options'].merge(extra_connection_options)
86
100
  }
101
+
87
102
  begin
88
- @glance = Fog::Image.new(glance_params)
89
- rescue Exception => e
90
- @logger.error(e)
103
+ Bosh::Common.retryable(connect_retry_options) do |tries, error|
104
+ @logger.error("Failed #{tries} times, last failure due to: #{error.inspect}") unless error.nil?
105
+ @glance = Fog::Image.new(glance_params)
106
+ end
107
+ rescue Bosh::Common::RetryCountExceeded, Excon::Errors::ClientError, Excon::Errors::ServerError
91
108
  cloud_error('Unable to connect to the OpenStack Image Service API. Check task debug log for details.')
92
109
  end
93
110
 
@@ -101,11 +118,14 @@ module Bosh::OpenStackCloud
101
118
  :openstack_endpoint_type => @openstack_properties['endpoint_type'],
102
119
  :connection_options => @openstack_properties['connection_options'].merge(extra_connection_options)
103
120
  }
121
+
104
122
  begin
105
- @volume = Fog::Volume.new(volume_params)
106
- rescue Exception => e
107
- @logger.error(e)
108
- cloud_error("Unable to connect to the OpenStack Volume API. Check task debug log for details.")
123
+ Bosh::Common.retryable(connect_retry_options) do |tries, error|
124
+ @logger.error("Failed #{tries} times, last failure due to: #{error.inspect}") unless error.nil?
125
+ @volume = Fog::Volume.new(volume_params)
126
+ end
127
+ rescue Bosh::Common::RetryCountExceeded, Excon::Errors::ClientError, Excon::Errors::ServerError
128
+ cloud_error('Unable to connect to the OpenStack Volume API. Check task debug log for details.')
109
129
  end
110
130
 
111
131
  @metadata_lock = Mutex.new
@@ -300,7 +320,7 @@ module Bosh::OpenStackCloud
300
320
 
301
321
  @logger.info("Configuring network for server `#{server.id}'...")
302
322
  network_configurator.configure(@openstack, server)
303
- rescue Bosh::Clouds::CloudError => e
323
+ rescue => e
304
324
  @logger.warn("Failed to create server: #{e.message}")
305
325
  destroy_server(server)
306
326
  raise Bosh::Clouds::VMCreationFailed.new(true), e.message
@@ -311,7 +331,7 @@ module Bosh::OpenStackCloud
311
331
  settings = initial_agent_settings(server_name, agent_id, network_spec, environment,
312
332
  flavor_has_ephemeral_disk?(flavor))
313
333
  @registry.update_settings(server.name, settings)
314
- rescue Bosh::Clouds::CloudError => e
334
+ rescue => e
315
335
  @logger.warn("Failed to register server: #{e.message}")
316
336
  destroy_server(server)
317
337
  raise Bosh::Clouds::VMCreationFailed.new(false), e.message
@@ -391,7 +411,7 @@ module Bosh::OpenStackCloud
391
411
  network_configurator.configure(@openstack, server)
392
412
 
393
413
  update_agent_settings(server) do |settings|
394
- settings['networks'] = network_spec
414
+ settings['networks'] = agent_network_spec(network_spec)
395
415
  end
396
416
  end
397
417
  end
@@ -656,7 +676,7 @@ module Bosh::OpenStackCloud
656
676
  data['registry'] = { 'endpoint' => @registry.endpoint }
657
677
  data['server'] = { 'name' => server_name }
658
678
  data['openssh'] = { 'public_key' => public_key } if public_key
659
- data['networks'] = network_spec
679
+ data['networks'] = agent_network_spec(network_spec)
660
680
 
661
681
  with_dns(network_spec) do |servers|
662
682
  data['dns'] = { 'nameserver' => servers }
@@ -701,7 +721,7 @@ module Bosh::OpenStackCloud
701
721
  'name' => server_name
702
722
  },
703
723
  'agent_id' => agent_id,
704
- 'networks' => network_spec,
724
+ 'networks' => agent_network_spec(network_spec),
705
725
  'disks' => {
706
726
  'system' => '/dev/sda',
707
727
  'persistent' => {}
@@ -713,6 +733,13 @@ module Bosh::OpenStackCloud
713
733
  settings.merge(@agent_properties)
714
734
  end
715
735
 
736
+ def agent_network_spec(network_spec)
737
+ Hash[*network_spec.map do |name, settings|
738
+ settings['use_dhcp'] = @use_dhcp
739
+ [name, settings]
740
+ end.flatten]
741
+ end
742
+
716
743
  ##
717
744
  # Updates the agent settings
718
745
  #
@@ -24,6 +24,7 @@ module Bosh::OpenStackCloud
24
24
  retries = 0
25
25
  begin
26
26
  yield
27
+
27
28
  rescue Excon::Errors::RequestEntityTooLarge => e
28
29
  # If we find a rate limit error, parse message, wait, and retry
29
30
  overlimit = parse_openstack_response(e.response, "overLimit", "overLimitFault")
@@ -37,10 +38,21 @@ module Bosh::OpenStackCloud
37
38
  retry
38
39
  end
39
40
  cloud_error("OpenStack API Request Entity Too Large error. Check task debug log for details.", e)
41
+
42
+ rescue Excon::Errors::ServiceUnavailable => e
43
+ unless retries >= MAX_RETRIES
44
+ retries += 1
45
+ @logger.debug("OpenStack API Service Unavailable error, retrying (#{retries})") if @logger
46
+ sleep(DEFAULT_RETRY_TIMEOUT)
47
+ retry
48
+ end
49
+ cloud_error("OpenStack API Service Unavailable error. Check task debug log for details.", e)
50
+
40
51
  rescue Excon::Errors::BadRequest => e
41
52
  badrequest = parse_openstack_response(e.response, "badRequest")
42
- details = badrequest.nil? ? "" : " (#{badrequest["message"]})"
53
+ details = badrequest.nil? ? "" : " (#{badrequest["message"]})"
43
54
  cloud_error("OpenStack API Bad Request#{details}. Check task debug log for details.", e)
55
+
44
56
  rescue Excon::Errors::InternalServerError => e
45
57
  unless retries >= MAX_RETRIES
46
58
  retries += 1
@@ -51,9 +63,9 @@ module Bosh::OpenStackCloud
51
63
  cloud_error("OpenStack API Internal Server error. Check task debug log for details.", e)
52
64
  end
53
65
  end
54
-
66
+
55
67
  ##
56
- # Parses and look ups for keys in an OpenStack response
68
+ # Parses and look ups for keys in an OpenStack response
57
69
  #
58
70
  # @param [Excon::Response] response Response from OpenStack API
59
71
  # @param [Array<String>] keys Keys to look up in response
@@ -120,7 +132,7 @@ module Bosh::OpenStackCloud
120
132
  break if target_state.include?(state)
121
133
 
122
134
  sleep(@wait_resource_poll_interval)
123
-
135
+
124
136
  end
125
137
 
126
138
  if @logger
@@ -3,6 +3,6 @@
3
3
 
4
4
  module Bosh
5
5
  module OpenStackCloud
6
- VERSION = '1.3016.0'
6
+ VERSION = '1.3022.0'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_openstack_cpi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3016.0
4
+ version: 1.3022.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piston Cloud Computing / VMware
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-14 00:00:00.000000000 Z
11
+ date: 2015-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog-aws
@@ -44,42 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3016.0
47
+ version: 1.3022.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.3016.0
54
+ version: 1.3022.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bosh_cpi
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3016.0
61
+ version: 1.3022.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.3016.0
68
+ version: 1.3022.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bosh-registry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3016.0
75
+ version: 1.3022.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.3016.0
82
+ version: 1.3022.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: httpclient
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -180,7 +180,7 @@ dependencies:
180
180
  version: '0'
181
181
  description: |-
182
182
  BOSH OpenStack CPI
183
- 10557b
183
+ 6073a7
184
184
  email: support@cloudfoundry.com
185
185
  executables:
186
186
  - bosh_openstack_console