bosh-director 1.3033.0 → 1.3039.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: e33d9d02e1fdad6c921fef85eba81325457d783a
4
- data.tar.gz: 02ec8b58afd26b564f75b1bce643124c8ccc422f
3
+ metadata.gz: e1c9c98a013230e8d0555c8b260168f1fc0c9093
4
+ data.tar.gz: 9cb640f2ae37516b36760f377488b7043f612540
5
5
  SHA512:
6
- metadata.gz: 69ccd932a27ee4003922bd34dba420ba5af82c6fe763ee79ddcfd375e2cf91ea93c68a28aa078440e22c1f313a00987164faf0059ab974a7f5ba5d3c4e2de3d2
7
- data.tar.gz: d311220b9905560bdafa4c6414dee1e4f76394bbf9ff378c472c5b07079f79e2ab0a218523c3fab24d3dedcb0c719b4d712b2ed6fb5f453467dc230b4b3f0ed9
6
+ metadata.gz: 481c63da02db2398df3d2a57b6ab6e4b9aecc455db3a0eb92dda84c0608e023edaadbc93e13f3a8f4cf72fac1e8bcb72d615f5c77597da57d8a8e6267d5caac7
7
+ data.tar.gz: b0744f35130ef2545dbbb72da03aa01fe4380baf6c2ecd544538934a98b627f926d0c433de93f3d4f6f77d70216e152863f6f0185dad187e0b347dddd3346c07
@@ -48,7 +48,7 @@ module Bosh::Director
48
48
  redirect "/tasks/#{task.id}"
49
49
  end
50
50
 
51
- # PUT /deployments/foo/jobs/dea/2?state={started,stopped,detached,restart,recreate}
51
+ # PUT /deployments/foo/jobs/dea/2?state={started,stopped,detached,restart,recreate}&skip_drain=true
52
52
  put '/:deployment/jobs/:job/:index', :consumes => :yaml do
53
53
  begin
54
54
  index = Integer(params[:index])
@@ -61,9 +61,10 @@ module Bosh::Director
61
61
  params[:job] => {
62
62
  'instance_states' => {
63
63
  index => params['state']
64
- }
64
+ },
65
65
  }
66
- }
66
+ },
67
+ 'skip_drain' => params[:job]
67
68
  }
68
69
 
69
70
  deployment = @deployment_manager.find_by_name(params[:deployment])
@@ -269,6 +270,7 @@ module Bosh::Director
269
270
  post '/', :consumes => :yaml do
270
271
  options = {}
271
272
  options['recreate'] = true if params['recreate'] == 'true'
273
+ options['skip_drain'] = params['skip_drain'] if params['skip_drain']
272
274
  latest_cloud_config = Bosh::Director::Api::CloudConfigManager.new.latest
273
275
 
274
276
  task = @deployment_manager.create_deployment(current_user, request.body, latest_cloud_config, options)
@@ -313,7 +315,6 @@ module Bosh::Director
313
315
  planner_factory.planner_without_vm_binding(manifest_hash, cloud_config_model, {})
314
316
  end
315
317
 
316
-
317
318
  def convert_job_instance_hash(hash)
318
319
  hash.reduce([]) do |jobs, kv|
319
320
  job, indicies = kv
@@ -60,6 +60,11 @@ module Bosh::Director
60
60
 
61
61
  get '/:name', scope: :read do
62
62
  name = params[:name].to_s.strip
63
+
64
+ if params['version']
65
+ return inspect_release(name, params['version'])
66
+ end
67
+
63
68
  release = @release_manager.find_by_name(name)
64
69
 
65
70
  result = { }
@@ -100,6 +105,44 @@ module Bosh::Director
100
105
  task = @release_manager.delete_release(current_user, release, options)
101
106
  redirect "/tasks/#{task.id}"
102
107
  end
108
+
109
+ private
110
+
111
+ def inspect_release(name, version)
112
+ release = @release_manager.find_by_name(name)
113
+ release_version = @release_manager.find_version(release, version)
114
+
115
+ result = { }
116
+
117
+ result['jobs'] = release_version.templates.sort_by { |t| t.name }.map do |template|
118
+ {
119
+ 'name' => template.name,
120
+ 'blobstore_id' => template.blobstore_id,
121
+ 'sha1' => template.sha1,
122
+ 'fingerprint' => template.fingerprint.to_s,
123
+ }
124
+ end
125
+
126
+ result['packages'] = release_version.packages.sort_by { |p| p.name }.map do |package|
127
+ {
128
+ 'name' => package.name,
129
+ 'blobstore_id' => package.blobstore_id,
130
+ 'sha1' => package.sha1,
131
+ 'fingerprint' => package.fingerprint.to_s,
132
+ 'compiled_packages' => package.compiled_packages.sort_by { |cp| cp.stemcell }.map do |compiled|
133
+ {
134
+ 'stemcell' => "#{compiled.stemcell.name}/#{compiled.stemcell.version}",
135
+ 'sha1' => compiled.sha1,
136
+ 'blobstore_id' => compiled.blobstore_id,
137
+ }
138
+ end
139
+ }
140
+ end
141
+
142
+ content_type(:json)
143
+ json_encode(result)
144
+ end
145
+
103
146
  end
104
147
  end
105
148
  end
@@ -16,20 +16,30 @@ module Bosh::Director
16
16
  path = File.join(@download_dir, 'compiled_packages')
17
17
  FileUtils.mkpath(path)
18
18
 
19
- @compiled_packages_group.compiled_packages.each do |compiled_package|
20
- blobstore_id = compiled_package.blobstore_id
21
- File.open(File.join(path, "#{compiled_package.package.name}.tgz"), 'w') do |f|
22
- @blobstore_client.get(blobstore_id, f, sha1: compiled_package.sha1)
19
+ compiled_packages = @compiled_packages_group.compiled_packages
20
+ event_log.begin_stage("copying packages", compiled_packages.count)
21
+
22
+ compiled_packages.each do |compiled_package|
23
+ desc = "#{compiled_package.package.name}/#{compiled_package.package.version}"
24
+ event_log.track(desc) do
25
+ blobstore_id = compiled_package.blobstore_id
26
+ File.open(File.join(path, "#{compiled_package.package.name}.tgz"), 'w') do |f|
27
+ @blobstore_client.get(blobstore_id, f, sha1: compiled_package.sha1)
28
+ end
23
29
  end
24
30
  end
25
31
 
26
32
  path = File.join(@download_dir, 'jobs')
27
33
  FileUtils.mkpath(path)
28
34
 
35
+ event_log.begin_stage("copying jobs", @templates.count)
29
36
  @templates.each do |template|
30
- blobstore_id = template.blobstore_id
31
- File.open(File.join(path, "#{template.name}.tgz"), 'w') do |f|
32
- @blobstore_client.get(blobstore_id, f, sha1: template.sha1)
37
+ desc = "#{template.name}/#{template.version}"
38
+ event_log.track(desc) do
39
+ blobstore_id = template.blobstore_id
40
+ File.open(File.join(path, "#{template.name}.tgz"), 'w') do |f|
41
+ @blobstore_client.get(blobstore_id, f, sha1: template.sha1)
42
+ end
33
43
  end
34
44
  end
35
45
 
@@ -39,5 +49,10 @@ module Bosh::Director
39
49
  def cleanup
40
50
  FileUtils.rm_rf(@download_dir)
41
51
  end
52
+
53
+ def event_log
54
+ @event_log ||= Config.event_log
55
+ end
56
+
42
57
  end
43
58
  end
@@ -51,7 +51,15 @@ module Bosh::Director
51
51
  end
52
52
 
53
53
  def write(dest_path)
54
- File.open(dest_path, 'w') { |f| f.write(YAML.dump(generate_manifest)) }
54
+ manifest = generate_manifest
55
+ manifest_yaml = YAML.dump(manifest)
56
+ logger.debug("release.MF contents of #{manifest['name']}/#{manifest['version']} compiled release tarball:\n " + manifest_yaml)
57
+ File.open(dest_path, 'w') { |f| f.write(manifest_yaml) }
55
58
  end
59
+
60
+ def logger
61
+ @logger ||= Config.logger
62
+ end
63
+
56
64
  end
57
65
  end
@@ -36,7 +36,11 @@ module Bosh::Director
36
36
  :nats_uri,
37
37
  )
38
38
 
39
- attr_reader :db_config, :redis_logger_level
39
+ attr_reader(
40
+ :db_config,
41
+ :redis_logger_level,
42
+ :ignore_missing_gateway
43
+ )
40
44
 
41
45
  def clear
42
46
  self.instance_variables.each do |ivar|
@@ -141,6 +145,7 @@ module Bosh::Director
141
145
  @enable_snapshots = config.fetch('snapshots', {}).fetch('enabled', false)
142
146
 
143
147
  @trusted_certs = config['trusted_certs'] || ''
148
+ @ignore_missing_gateway = config['ignore_missing_gateway']
144
149
 
145
150
  Bosh::Clouds::Config.configure(self)
146
151
 
@@ -171,7 +176,12 @@ module Bosh::Director
171
176
  db_config = db_config.merge(connection_options)
172
177
 
173
178
  db = Sequel.connect(db_config)
174
- db.extension :connection_validator
179
+
180
+ Bosh::Common.retryable(sleep: 0.5, tries: 20, on: [Exception]) do
181
+ db.extension :connection_validator
182
+ true
183
+ end
184
+
175
185
  db.pool.connection_validation_timeout = -1
176
186
  if logger
177
187
  db.logger = logger
@@ -30,3 +30,4 @@ require 'bosh/director/deployment_plan/assembler'
30
30
  require 'bosh/director/deployment_plan/planner_factory'
31
31
  require 'bosh/director/deployment_plan/manifest_migrator'
32
32
  require 'bosh/director/deployment_plan/deployment_repo'
33
+ require 'bosh/director/deployment_plan/options/skip_drain'
@@ -43,7 +43,8 @@ module Bosh::Director
43
43
  network_id = @range.network(:Objectify => true)
44
44
  broadcast = @range.broadcast(:Objectify => true)
45
45
 
46
- gateway_property = safe_property(subnet_spec, "gateway", class: String)
46
+ ignore_missing_gateway = Bosh::Director::Config.ignore_missing_gateway
47
+ gateway_property = safe_property(subnet_spec, "gateway", class: String, optional: ignore_missing_gateway)
47
48
  if gateway_property
48
49
  @gateway = NetAddr::CIDR.create(gateway_property)
49
50
  unless @gateway.size == 1
@@ -0,0 +1,20 @@
1
+ module Bosh::Director
2
+ module DeploymentPlan
3
+ class SkipDrain
4
+ def initialize(param)
5
+ @jobs = []
6
+ @all = false
7
+
8
+ if param == '*'
9
+ @all = true
10
+ elsif param.is_a?(String) && !param.empty?
11
+ @jobs = param.split(',')
12
+ end
13
+ end
14
+
15
+ def for_job(job_name)
16
+ @all || @jobs.include?(job_name)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -45,6 +45,9 @@ module Bosh::Director
45
45
  # @return [Boolean] Indicates whether VMs should be recreated
46
46
  attr_reader :recreate
47
47
 
48
+ # @return [Boolean] Indicates whether VMs should be drained
49
+ attr_reader :skip_drain
50
+
48
51
  def initialize(attrs, manifest_text, cloud_config, deployment_model, options = {})
49
52
  @name = attrs.fetch(:name)
50
53
  @properties = attrs.fetch(:properties)
@@ -67,6 +70,7 @@ module Bosh::Director
67
70
  :class => Hash, :default => {})
68
71
 
69
72
  @recreate = !!options['recreate']
73
+ @skip_drain = SkipDrain.new(options['skip_drain'])
70
74
  end
71
75
 
72
76
  def_delegators :@cloud_planner, :add_network, :networks, :network,
@@ -84,6 +88,10 @@ module Bosh::Director
84
88
  @model.vms
85
89
  end
86
90
 
91
+ def skip_drain_for_job?(name)
92
+ @skip_drain.nil? ? false : @skip_drain.for_job(name)
93
+ end
94
+
87
95
  # Adds a release by name
88
96
  # @param [Bosh::Director::DeploymentPlan::ReleaseVersion] release
89
97
  def add_release(release)
@@ -56,6 +56,32 @@ module Bosh
56
56
  assemble_without_vm_binding(attrs, deployment_manifest, cloud_manifest, deployment_model, cloud_config, options)
57
57
  end
58
58
 
59
+ def self.validate_packages(planner, options)
60
+ release_manager = Bosh::Director::Api::ReleaseManager.new
61
+ planner.jobs.each { |job|
62
+ job.templates.each{ |template|
63
+ release_model = release_manager.find_by_name(template.release.name)
64
+ template.package_models.each{ |package|
65
+
66
+ release_version_model = release_manager.find_version(release_model, template.release.version)
67
+ packages_list = release_version_model.transitive_dependencies(package)
68
+ packages_list << package
69
+
70
+ packages_list.each { |needed_package|
71
+ if needed_package.sha1.nil? || needed_package.blobstore_id.nil?
72
+ compiled_packages_list = Bosh::Director::Models::CompiledPackage[:package_id => needed_package.id, :stemcell_id => job.resource_pool.stemcell.model.id]
73
+ if compiled_packages_list.nil?
74
+ msg = "Can't #{options[:context]} `#{release_version_model.release.name}/#{release_version_model.version}': it is not " +
75
+ "compiled for `#{job.resource_pool.stemcell.model.desc}' and no source package is available"
76
+ raise PackageMissingSourceCode, msg
77
+ end
78
+ end
79
+ }
80
+ }
81
+ }
82
+ }
83
+ end
84
+
59
85
  private
60
86
 
61
87
  def deployment_name(manifest_hash)
@@ -66,11 +92,12 @@ module Bosh
66
92
  def assemble_without_vm_binding(attrs, deployment_manifest, cloud_manifest, deployment_model, cloud_config, options)
67
93
  plan_options = {
68
94
  'recreate' => !!options['recreate'],
95
+ 'skip_drain' => options['skip_drain'],
69
96
  'job_states' => options['job_states'] || {},
70
97
  'job_rename' => options['job_rename'] || {}
71
98
  }
72
99
  @logger.info('Creating deployment plan')
73
- @logger.info("Deployment plan options: #{plan_options.pretty_inspect}")
100
+ @logger.info("Deployment plan options: #{plan_options}")
74
101
 
75
102
  deployment = Planner.new(attrs, deployment_manifest, cloud_config, deployment_model, plan_options)
76
103
  deployment = CloudManifestParser.new(deployment, @logger).parse(cloud_manifest)
@@ -94,7 +121,7 @@ module Bosh
94
121
 
95
122
  run_prepare_step(assembler)
96
123
 
97
- validate_packages(planner)
124
+ self.class.validate_packages(planner, {:context => 'deploy'})
98
125
 
99
126
  DeploymentPlan::Steps::PackageCompileStep.new(
100
127
  planner,
@@ -148,32 +175,6 @@ module Bosh
148
175
  end
149
176
  end
150
177
 
151
- def validate_packages(planner)
152
- release_manager = Bosh::Director::Api::ReleaseManager.new
153
- planner.jobs.each { |job|
154
- job.templates.each{ |template|
155
- release_model = release_manager.find_by_name(template.release.name)
156
- template.package_models.each{ |package|
157
-
158
- release_version_model = release_manager.find_version(release_model, template.release.version)
159
- packages_list = release_version_model.transitive_dependencies(package)
160
- packages_list << package
161
-
162
- packages_list.each { |needed_package|
163
- if needed_package.sha1.nil? || needed_package.blobstore_id.nil?
164
- compiled_packages_list = Bosh::Director::Models::CompiledPackage[:package_id => needed_package.id, :stemcell_id => job.resource_pool.stemcell.model.id]
165
- if compiled_packages_list.nil?
166
- msg = "Can't deploy `#{release_version_model.release.name}/#{release_version_model.version}': it is not " +
167
- "compiled for `#{job.resource_pool.stemcell.model.desc}' and no source package is available"
168
- raise PackageMissingSourceCode, msg
169
- end
170
- end
171
- }
172
- }
173
- }
174
- }
175
- end
176
-
177
178
  def track_and_log(message)
178
179
  @event_log.track(message) do
179
180
  @logger.info(message)
@@ -143,7 +143,8 @@ module Bosh::Director
143
143
  end
144
144
 
145
145
  def stop
146
- stopper = Stopper.new(@instance, agent, @target_state, Config, @logger)
146
+ skip_drain = @deployment_plan.skip_drain_for_job?(@job.name)
147
+ stopper = Stopper.new(@instance, agent, @target_state, skip_drain, Config, @logger)
147
148
  stopper.stop
148
149
  end
149
150
 
@@ -1,14 +1,27 @@
1
1
  module Bosh::Director
2
2
  class InstanceUpdater::Stopper
3
- def initialize(instance, agent_client, target_state, config, logger)
3
+ def initialize(instance, agent_client, target_state, skip_drain, config, logger)
4
4
  @instance = instance
5
5
  @agent_client = agent_client
6
6
  @target_state = target_state
7
+ @skip_drain = skip_drain
7
8
  @config = config
8
9
  @logger = logger
9
10
  end
10
11
 
11
12
  def stop
13
+ if @skip_drain
14
+ @logger.info("Skipping drain for '#{@instance}'")
15
+ else
16
+ perform_drain
17
+ end
18
+
19
+ @agent_client.stop
20
+ end
21
+
22
+ private
23
+
24
+ def perform_drain
12
25
  drain_type = shutting_down? ? 'shutdown' : 'update'
13
26
 
14
27
  # Apply spec might change after shutdown drain (unlike update drain)
@@ -21,12 +34,8 @@ module Bosh::Director
21
34
  else
22
35
  wait_for_dynamic_drain(drain_time)
23
36
  end
24
-
25
- @agent_client.stop
26
37
  end
27
38
 
28
- private
29
-
30
39
  def shutting_down?
31
40
  @instance.resource_pool_changed? ||
32
41
  @instance.persistent_disk_changed? ||
@@ -50,6 +50,7 @@ module Bosh::Director
50
50
  with_stemcell_lock(@stemcell.name, @stemcell.version, :timeout => lock_timeout) do
51
51
 
52
52
  planner = create_planner
53
+ DeploymentPlan::PlannerFactory.validate_packages(planner, {:context => 'export'})
53
54
  package_compile_step = DeploymentPlan::Steps::PackageCompileStep.new(
54
55
  planner,
55
56
  Config.cloud, # CPI
@@ -59,10 +59,6 @@ module Bosh::Director
59
59
  process_release(release_dir)
60
60
  }
61
61
 
62
- if @rebase && @packages_unchanged && @jobs_unchanged
63
- raise DirectorError, "Rebase is attempted without any job or package changes"
64
- end
65
-
66
62
  "Created release `#{@name}/#{@version}'"
67
63
 
68
64
  rescue Exception => e
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.3033.0'
3
+ VERSION = '1.3039.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3033.0
4
+ version: 1.3039.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - VMware
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-04 00:00:00.000000000 Z
11
+ date: 2015-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt-ruby
@@ -30,126 +30,126 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3033.0
33
+ version: 1.3039.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.3033.0
40
+ version: 1.3039.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bosh-core
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3033.0
47
+ version: 1.3039.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.3033.0
54
+ version: 1.3039.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bosh-director-core
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3033.0
61
+ version: 1.3039.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.3033.0
68
+ version: 1.3039.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bosh_common
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3033.0
75
+ version: 1.3039.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.3033.0
82
+ version: 1.3039.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bosh-template
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.3033.0
89
+ version: 1.3039.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.3033.0
96
+ version: 1.3039.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bosh_cpi
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.3033.0
103
+ version: 1.3039.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.3033.0
110
+ version: 1.3039.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: bosh_openstack_cpi
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.3033.0
117
+ version: 1.3039.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.3033.0
124
+ version: 1.3039.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bosh_aws_cpi
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.3033.0
131
+ version: 1.3039.0
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.3033.0
138
+ version: 1.3039.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: bosh_vsphere_cpi
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.3033.0
145
+ version: 1.3039.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.3033.0
152
+ version: 1.3039.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: bosh_vcloud_cpi
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -572,7 +572,7 @@ dependencies:
572
572
  version: '0'
573
573
  description: |-
574
574
  BOSH Director
575
- 2c1c13
575
+ e8cf4e
576
576
  email: support@cloudfoundry.com
577
577
  executables:
578
578
  - bosh-director
@@ -723,6 +723,7 @@ files:
723
723
  - lib/bosh/director/deployment_plan/network.rb
724
724
  - lib/bosh/director/deployment_plan/network_subnet.rb
725
725
  - lib/bosh/director/deployment_plan/notifier.rb
726
+ - lib/bosh/director/deployment_plan/options/skip_drain.rb
726
727
  - lib/bosh/director/deployment_plan/planner.rb
727
728
  - lib/bosh/director/deployment_plan/planner_factory.rb
728
729
  - lib/bosh/director/deployment_plan/release_version.rb