bosh-director 1.3063.0 → 1.3068.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: 7ac5ff2357caa3c0640c5e26554f1515c241fc9c
4
- data.tar.gz: a0a297f8295f7607b2302a8b71586eae974e5100
3
+ metadata.gz: 9cae55bf1eca66fc2b7350f2d90cf6c771ff6536
4
+ data.tar.gz: 706c4b982e6e7faef9bee55cf2ee49d0f291dbac
5
5
  SHA512:
6
- metadata.gz: 88b3761ba7e48100c86310bbf3bec22a00241f1c93e66e6b2092c5c1932913381af25cd37b3c6befc6576856b810266ef449cb70d73c26aedfe6ec51bc9afa20
7
- data.tar.gz: 0b9aae13fd73fe0b644edc889edca059b31f288f32e2a5446e15b7e696cf1a11ea557e773a7d3cb07846498e80da07afd8078add4c836af7868185abd57c485a
6
+ metadata.gz: 94f7c1ee49d3ab4018517437d1f602518ade5803bf712dfab62e83f520108be596fb171aa93b9074380ff35dfea95552313bcc71f4691eb46760dc42d072d367
7
+ data.tar.gz: 8e3632b636703a18fc8fe46f5987cf952e6726dcdfeffee66dfb4ae800e04b4008d02a40a3f75cb16318599ddbaf81f42ae6fc0f6d53e95f51f702b5c5493260
@@ -123,12 +123,12 @@ module Bosh::Director
123
123
  end
124
124
  end
125
125
 
126
- def run_scripts(scripts_list, options)
126
+ def run_script(script_name, options)
127
127
  begin
128
- send_message(:run_scripts, scripts_list, options)
128
+ send_message(:run_script, script_name, options)
129
129
  rescue RpcRemoteException => e
130
130
  if e.message =~ /unknown message/
131
- @logger.warn("Ignoring run_scripts 'unknown message' error from the agent: #{e.inspect}. Received while trying to run : #{scripts_list}")
131
+ @logger.warn("Ignoring run_script 'unknown message' error from the agent: #{e.inspect}. Received while trying to run: #{script_name}")
132
132
  else
133
133
  raise
134
134
  end
@@ -10,8 +10,15 @@ module Bosh::Director
10
10
  end
11
11
 
12
12
  get '/:id' do
13
+ @resource_manager.clean_old_tmpfiles
14
+
13
15
  tmp_file = @resource_manager.get_resource_path(params[:id])
14
- send_disposable_file(tmp_file, :type => 'application/x-gzip')
16
+
17
+ status 200
18
+ headers \
19
+ 'Content-Type' => 'application/x-gzip',
20
+ 'X-Accel-Redirect' => File.join('/x_accel_files/', tmp_file)
21
+ body ''
15
22
  end
16
23
  end
17
24
  end
@@ -1,5 +1,7 @@
1
1
  # Copyright (c) 2009-2012 VMware, Inc.
2
2
 
3
+ require 'fileutils'
4
+
3
5
  module Bosh::Director
4
6
  module Api
5
7
  class ResourceManager
@@ -10,14 +12,17 @@ module Bosh::Director
10
12
  end
11
13
 
12
14
  # Retrieves the resource `id` from the blobstore and stores it
13
- # locally, and returns the path to the file
15
+ # locally, and returns the path to the file. It is the caller's
16
+ # responsibility to delete the resulting file at some point.
17
+ # An easy option is to call clean_old_tmpfiles before each call
18
+ # to this method.
14
19
  #
15
20
  # @param [String] id
16
21
  # @return [String] path to the contents of the blobstore id
17
22
  def get_resource_path(id)
18
23
  blobstore_resource(id) do |blobstore|
19
24
  random_name = "resource-#{SecureRandom.uuid}"
20
- path = File.join(Dir.tmpdir, random_name)
25
+ path = File.join(resource_tmpdir, random_name)
21
26
 
22
27
  File.open(path, "w") do |f|
23
28
  blobstore.get(id, f)
@@ -27,6 +32,17 @@ module Bosh::Director
27
32
  end
28
33
  end
29
34
 
35
+ # Returns the directory where files created by get_resource_path will be written.
36
+ def resource_tmpdir
37
+ Dir.tmpdir
38
+ end
39
+
40
+ # Deletes all get_resource_path temporary files that are more than 5 minutes old.
41
+ def clean_old_tmpfiles
42
+ Dir.glob("#{resource_tmpdir}/resource-*").
43
+ select{|f| File.mtime(f) < (Time.now - (60*5)) }.
44
+ each{|f| FileUtils.rm_f(f) }
45
+ end
30
46
  # Retrieves the resource `id` from the blobstore and returns the
31
47
  # contents of it.
32
48
  # @param [String] id
@@ -154,6 +154,7 @@ module Bosh::Director
154
154
  agent_client(new_vm).apply(spec)
155
155
 
156
156
  if instance && instance.state == "started"
157
+ agent_client(new_vm).run_script('pre-start', {})
157
158
  agent_client(new_vm).start
158
159
  end
159
160
  end
@@ -1,5 +1,3 @@
1
- require 'common/deep_copy'
2
-
3
1
  module Bosh::Director
4
2
  module DeploymentPlan
5
3
  class CloudManifestParser
@@ -1,5 +1,3 @@
1
- require 'common/deep_copy'
2
-
3
1
  module Bosh::Director
4
2
  module DeploymentPlan
5
3
  class DeploymentSpecParser
@@ -1,4 +1,3 @@
1
- require 'common/deep_copy'
2
1
  require 'bosh/template/property_helper'
3
2
 
4
3
  module Bosh::Director
@@ -2,6 +2,7 @@ require 'bosh/director/deployment_plan/deployment_spec_parser'
2
2
  require 'bosh/director/deployment_plan/cloud_manifest_parser'
3
3
  require 'bosh/director/deployment_plan/disk_pool'
4
4
  require 'forwardable'
5
+ require 'common/deep_copy'
5
6
 
6
7
  module Bosh::Director
7
8
  # Encapsulates essential director data structures retrieved
@@ -53,7 +54,7 @@ module Bosh::Director
53
54
  @properties = attrs.fetch(:properties)
54
55
  @releases = {}
55
56
 
56
- @manifest_text = manifest_text
57
+ @manifest_text = Bosh::Common::DeepCopy.copy(manifest_text)
57
58
  @cloud_config = cloud_config
58
59
  @cloud_planner = CloudPlanner.new(cloud_config)
59
60
  @model = deployment_model
@@ -75,6 +75,8 @@ module Bosh::Director
75
75
  ReleaseVersionInvalid = err(30010)
76
76
  ReleaseNotMatchingManifest = err(30011)
77
77
  ReleaseInvalidPackage = err(30012)
78
+ ReleaseExistingJobFingerprintMismatch = err(30013)
79
+ ReleaseVersionCommitHashMismatch = err(30014)
78
80
 
79
81
  ValidationInvalidType = err(40000)
80
82
  ValidationMissingField = err(40001)
@@ -119,17 +119,7 @@ module Bosh::Director
119
119
  end
120
120
 
121
121
  def run_pre_start_scripts
122
- event_log.begin_stage('running pre-start scripts', 1)
123
-
124
- pre_start_scripts_list = []
125
- @instance.spec['job']['templates'].each do |template|
126
- pre_start_scripts_list << "jobs/#{template['name']}/bin/pre-start"
127
- end
128
-
129
- event_log.track(@instance.spec['job']['name']) {
130
- @agent.run_scripts(pre_start_scripts_list, {})
131
- }
132
-
122
+ @agent.run_script("pre-start", {})
133
123
  end
134
124
 
135
125
  def start!
@@ -385,9 +375,5 @@ module Bosh::Director
385
375
  delete_mounted_disk(new_disk)
386
376
  raise
387
377
  end
388
-
389
- def event_log
390
- @event_log ||= Config.event_log
391
- end
392
378
  end
393
379
  end
@@ -28,14 +28,9 @@ module Bosh::Director
28
28
  @release_path = release_path
29
29
  end
30
30
 
31
- @release_model = nil
32
- @release_version_model = nil
31
+ @release_model, @release_version_model, @manifest, @name, @version = nil, nil, nil, nil, nil
33
32
 
34
33
  @rebase = !!options['rebase']
35
-
36
- @manifest = nil
37
- @name = nil
38
- @version = nil
39
34
  end
40
35
 
41
36
  # Extracts release tarball, verifies release manifest and saves release in DB
@@ -51,14 +46,11 @@ module Bosh::Director
51
46
 
52
47
  single_step_stage("Verifying manifest") { verify_manifest(release_dir) }
53
48
 
54
- with_release_lock(@name) {
55
- process_release(release_dir)
56
- }
49
+ with_release_lock(@name) { process_release(release_dir) }
57
50
 
58
51
  "Created release `#{@name}/#{@version}'"
59
52
 
60
53
  rescue Exception => e
61
- remove_release_version_model
62
54
  raise e
63
55
 
64
56
  ensure
@@ -103,9 +95,7 @@ module Bosh::Director
103
95
 
104
96
  begin
105
97
  @version = Bosh::Common::Version::ReleaseVersion.parse(@manifest["version"])
106
- unless @version == @manifest["version"]
107
- logger.info("Formatted version '#{@manifest["version"]}' => '#{@version}'")
108
- end
98
+ logger.info("Formatted version '#{@manifest["version"]}' => '#{@version}'") unless @version == @manifest["version"]
109
99
  rescue SemiSemantic::ParseError
110
100
  raise ReleaseVersionInvalid, "Release version invalid: #{@manifest["version"]}"
111
101
  end
@@ -129,18 +119,22 @@ module Bosh::Director
129
119
  def process_release(release_dir)
130
120
  @release_model = Models::Release.find_or_create(:name => @name)
131
121
 
132
- if @rebase
133
- @version = next_release_version
134
- end
122
+ @version = next_release_version if @rebase
135
123
 
136
124
  version_attrs = { :release => @release_model, :version => @version.to_s }
137
- version_attrs[:uncommitted_changes] = @uncommitted_changes if @uncommitted_changes
138
- version_attrs[:commit_hash] = @commit_hash if @commit_hash
139
125
 
140
- @release_is_new = false
141
- @release_version_model = Models::ReleaseVersion.find_or_create(version_attrs) {
142
- @release_is_new = true
143
- }
126
+ release_is_new = false
127
+ @release_version_model = Models::ReleaseVersion.find_or_create(version_attrs){ release_is_new = true }
128
+
129
+ if release_is_new
130
+ @release_version_model.uncommitted_changes = @uncommitted_changes if @uncommitted_changes
131
+ @release_version_model.commit_hash = @commit_hash if @commit_hash
132
+ @release_version_model.save
133
+ else
134
+ if @release_version_model.commit_hash != @commit_hash || @release_version_model.uncommitted_changes != @uncommitted_changes
135
+ raise ReleaseVersionCommitHashMismatch, "release `#{@name}/#{@version}' has already been uploaded with commit_hash as `#{@commit_hash}' and uncommitted_changes as `#{@uncommitted_changes}'"
136
+ end
137
+ end
144
138
 
145
139
  single_step_stage("Resolving package dependencies") do
146
140
  resolve_package_dependencies(@manifest[@packages_folder])
@@ -148,7 +142,7 @@ module Bosh::Director
148
142
 
149
143
  @packages = {}
150
144
  process_packages(release_dir)
151
- process_jobs(release_dir) if @release_is_new
145
+ process_jobs(release_dir)
152
146
 
153
147
  event_log.begin_stage(@compiled_release ? "Compiled Release has been created" : "Release has been created", 1)
154
148
  event_log.track("#{@name}/#{@version}") {}
@@ -200,13 +194,16 @@ module Bosh::Director
200
194
  registered_packages = []
201
195
 
202
196
  @manifest[@packages_folder].each do |package_meta|
203
- # Checking whether we might have the same bits somewhere
197
+ # Checking whether we might have the same bits somewhere (in any release, not just the one being uploaded)
198
+ @release_version_model.packages.select { |pv| pv.name == package_meta['name'] }.each do |package|
199
+ if package.fingerprint != package_meta['fingerprint']
200
+ raise ReleaseInvalidPackage, "package `#{package_meta['name']}' had different fingerprint in previously uploaded release `#{@name}/#{@version}'"
201
+ end
202
+ end
204
203
 
205
204
  packages = Models::Package.where(fingerprint: package_meta["fingerprint"]).all
205
+
206
206
  if packages.empty?
207
- unless @release_is_new
208
- raise ReleaseInvalidPackage, "package #{package_meta['name']}/#{package_meta['version']} not part of previous upload of release #{@name}/#{@version}"
209
- end
210
207
  new_packages << package_meta
211
208
  next
212
209
  end
@@ -227,14 +224,25 @@ module Bosh::Director
227
224
  end
228
225
 
229
226
  if existing_package.release_versions.include? @release_version_model
227
+ if existing_package.blobstore_id.nil?
228
+ packages.each do |package|
229
+ unless package.blobstore_id.nil?
230
+ package_meta["blobstore_id"] = package.blobstore_id
231
+ package_meta["sha1"] = package.sha1
232
+ break
233
+ end
234
+ end
235
+ end
230
236
  registered_packages << [existing_package, package_meta]
231
237
  else
232
238
  existing_packages << [existing_package, package_meta]
233
239
  end
240
+
234
241
  else
235
242
  # We found a package with the same fingerprint but different
236
243
  # (release, name, version) tuple, so we need to make a copy
237
244
  # of the package blob and create a new db entry for it
245
+
238
246
  packages.each do |package|
239
247
  unless package.blobstore_id.nil?
240
248
  package_meta["blobstore_id"] = package.blobstore_id
@@ -246,13 +254,9 @@ module Bosh::Director
246
254
  end
247
255
  end
248
256
 
249
- did_something = false
250
-
251
- package_stemcell_hashes1, created_package = create_packages(new_packages, release_dir)
252
- did_something |= created_package
257
+ package_stemcell_hashes1 = create_packages(new_packages, release_dir)
253
258
 
254
- package_stemcell_hashes2, modified_package = use_existing_packages(existing_packages, release_dir)
255
- did_something |= modified_package
259
+ package_stemcell_hashes2 = use_existing_packages(existing_packages, release_dir)
256
260
 
257
261
  if @compiled_release
258
262
  compatible_stemcell_combos = registered_packages.flat_map do |pkg, pkg_meta|
@@ -264,11 +268,10 @@ module Bosh::Director
264
268
  end
265
269
  end
266
270
  consolidated_package_stemcell_hashes = Array(package_stemcell_hashes1) | Array(package_stemcell_hashes2) | compatible_stemcell_combos
267
- did_something |= create_compiled_packages(consolidated_package_stemcell_hashes, release_dir)
271
+ create_compiled_packages(consolidated_package_stemcell_hashes, release_dir)
268
272
  else
269
- did_something |= backfill_source_for_packages(registered_packages, release_dir)
273
+ backfill_source_for_packages(registered_packages, release_dir)
270
274
  end
271
- did_something
272
275
  end
273
276
 
274
277
  # @return [boolean] true if sources were added to at least one package; false if the call had no effect.
@@ -293,7 +296,7 @@ module Bosh::Director
293
296
  # @return [Array<Hash>] package & stemcell matching pairs that were registered. empty if no packages were changed.
294
297
  def use_existing_packages(packages, release_dir)
295
298
  if packages.empty?
296
- return [], false
299
+ return []
297
300
  end
298
301
 
299
302
  package_stemcell_hashes = []
@@ -319,17 +322,16 @@ module Bosh::Director
319
322
  end
320
323
  end
321
324
 
322
- return package_stemcell_hashes, true
325
+ return package_stemcell_hashes
323
326
  end
324
327
 
325
328
  # Creates packages using provided metadata
326
329
  # @param [Array<Hash>] packages Packages metadata
327
330
  # @param [String] release_dir local path to the unpacked release
328
331
  # @return [Array<Hash>, boolean] array of compiled package & stemcell matching pairs that were registered, and a
329
- # flag indicating if any changes were made to the database.
330
332
  def create_packages(package_metas, release_dir)
331
333
  if package_metas.empty?
332
- return [], false
334
+ return []
333
335
  end
334
336
 
335
337
  package_stemcell_hashes = []
@@ -354,7 +356,7 @@ module Bosh::Director
354
356
  end
355
357
  end
356
358
 
357
- return package_stemcell_hashes, true
359
+ return package_stemcell_hashes
358
360
  end
359
361
 
360
362
  # @return [boolean] true if at least one job was created; false if the call had no effect.
@@ -450,8 +452,7 @@ module Bosh::Director
450
452
  def save_package_source_blob(package, package_meta, release_dir)
451
453
  return false unless package.blobstore_id.nil?
452
454
 
453
- name, version = package_meta['name'], package_meta['version']
454
- existing_blob = package_meta['blobstore_id']
455
+ name, version, existing_blob = package_meta['name'], package_meta['version'], package_meta['blobstore_id']
455
456
  desc = "package '#{name}/#{version}'"
456
457
 
457
458
  package.sha1 = package_meta['sha1']
@@ -500,6 +501,12 @@ module Bosh::Director
500
501
 
501
502
  @manifest["jobs"].each do |job_meta|
502
503
  # Checking whether we might have the same bits somewhere
504
+ @release_version_model.templates.select { |t| t.name == job_meta["name"] }.each do |tmpl|
505
+ if tmpl.fingerprint != job_meta["fingerprint"]
506
+ raise ReleaseExistingJobFingerprintMismatch, "job `#{job_meta["name"]}' had different fingerprint in previously uploaded release `#{@name}/#{@version}'"
507
+ end
508
+ end
509
+
503
510
  jobs = Models::Template.where(fingerprint: job_meta["fingerprint"]).all
504
511
 
505
512
  template = jobs.find do |job|
@@ -552,13 +559,15 @@ module Bosh::Director
552
559
  jobs.each do |template, _|
553
560
  job_desc = "#{template.name}/#{template.version}"
554
561
  logger.info("Using existing job `#{job_desc}'")
555
- register_template(template)
562
+ register_template(template) unless template.release_versions.include? @release_version_model
556
563
  end
557
564
  end
558
565
 
559
566
  true
560
567
  end
561
568
 
569
+ private
570
+
562
571
  # Marks job template model as being used by release version
563
572
  # @param [Models::Template] template Job template model
564
573
  # @return [void]
@@ -566,8 +575,6 @@ module Bosh::Director
566
575
  @release_version_model.add_template(template)
567
576
  end
568
577
 
569
- private
570
-
571
578
  # Returns the next release version (to be used for rebased release)
572
579
  # @return [String]
573
580
  def next_release_version
@@ -577,16 +584,6 @@ module Bosh::Director
577
584
  list = Bosh::Common::Version::ReleaseVersionList.parse(strings)
578
585
  list.rebase(@version)
579
586
  end
580
-
581
- # Removes release version model, along with all packages and templates.
582
- # @return [void]
583
- def remove_release_version_model
584
- return unless @release_version_model && !@release_version_model.new?
585
-
586
- @release_version_model.remove_all_packages
587
- @release_version_model.remove_all_templates
588
- @release_version_model.destroy
589
- end
590
587
  end
591
588
  end
592
589
  end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.3063.0'
3
+ VERSION = '1.3068.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,155 +1,155 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3063.0
4
+ version: 1.3068.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-09-01 00:00:00.000000000 Z
11
+ date: 2015-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bcrypt-ruby
14
+ name: bosh_common
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.1
19
+ version: 1.3068.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.0.1
26
+ version: 1.3068.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: blobstore_client
28
+ name: bosh_cpi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3063.0
33
+ version: 1.3068.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.3063.0
40
+ version: 1.3068.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: bosh-core
42
+ name: bosh-registry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3063.0
47
+ version: 1.3068.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.3063.0
54
+ version: 1.3068.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: bosh-director-core
56
+ name: blobstore_client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3063.0
61
+ version: 1.3068.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.3063.0
68
+ version: 1.3068.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: bosh_common
70
+ name: bosh-core
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3063.0
75
+ version: 1.3068.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.3063.0
82
+ version: 1.3068.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: bosh-template
84
+ name: bosh-director-core
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.3063.0
89
+ version: 1.3068.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.3063.0
96
+ version: 1.3068.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: bosh_cpi
98
+ name: bosh-template
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.3063.0
103
+ version: 1.3068.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.3063.0
110
+ version: 1.3068.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.3063.0
117
+ version: 2.0.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.3063.0
124
+ version: 2.0.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.3063.0
131
+ version: 1.3068.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.3063.0
138
+ version: 1.3068.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.3063.0
145
+ version: 2.0.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.3063.0
152
+ version: 2.0.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: bosh_vcloud_cpi
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - '='
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.11.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: bcrypt-ruby
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 3.0.1
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 3.0.1
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: eventmachine
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -570,9 +584,7 @@ dependencies:
570
584
  - - ">="
571
585
  - !ruby/object:Gem::Version
572
586
  version: '0'
573
- description: |-
574
- BOSH Director
575
- ac5134
587
+ description: BOSH Director
576
588
  email: support@cloudfoundry.com
577
589
  executables:
578
590
  - bosh-director