bosh-director 1.3022.0 → 1.3025.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: 59a2d6077683ae1eaac10b9926fd87139cbf2193
4
- data.tar.gz: e417875f5b9b4311ca2ffc19cbea42a4b4e673ed
3
+ metadata.gz: 2866e5d5feee61d1a283c8d9d1a0a06a9cb6f731
4
+ data.tar.gz: 2c6bb5137cb1fb66507b92cd009f5a34a963d1d7
5
5
  SHA512:
6
- metadata.gz: fc4627b56956d3e9ce4795286416798815f1475b5542aee9b7de375f1b8c6b64f083b02b93db041e3530ab799f63732bc67bd3e87662e131ffd81c9dcd8216c5
7
- data.tar.gz: c0d98a660d38ed280d769427e1ba7adb37e66426a2ccd7d46156c582194d0950eb6628a68999e257db3a92dd79871eeb8b29a954d8a29b01d303a82e744f6cec
6
+ metadata.gz: 601d852bd27463f21c5552a841b21d894636f85a9be57a9ca92db09aa36c93565fe8dac7742400bcb181c8921d7702b5ccf58ad1aa209e66b943f156fc95bfbe
7
+ data.tar.gz: ee763723e9f537a5f1cde210c8425dffe420d98052247ebfb864ca33576bc62fed2e9274a96097c43b44044b76a6bb8aa696c563f7d8a18c8019dd0ee9641f7c
@@ -16,7 +16,6 @@ module Bosh::Director
16
16
  post '/', :consumes => :multipart do
17
17
  options = {
18
18
  rebase: params['rebase'] == 'true',
19
- compiled: params['compiled'] == 'true',
20
19
  }
21
20
 
22
21
  task = @release_manager.create_release_from_file_path(current_user, params[:nginx_upload_path], options)
@@ -10,10 +10,6 @@ module Bosh::Director
10
10
 
11
11
  @queue = :normal
12
12
 
13
- @stemcell
14
- @targeted_deployment
15
- @release_version
16
-
17
13
  def self.job_type
18
14
  :export_release
19
15
  end
@@ -33,13 +33,6 @@ module Bosh::Director
33
33
 
34
34
  @rebase = !!options['rebase']
35
35
  @skip_if_exists = !!options['skip_if_exists']
36
- @compiled_release = !!options['compiled']
37
-
38
- if @compiled_release
39
- @packages_folder = "compiled_packages"
40
- else
41
- @packages_folder = "packages"
42
- end
43
36
 
44
37
  @manifest = nil
45
38
  @name = nil
@@ -110,6 +103,15 @@ module Bosh::Director
110
103
  end
111
104
 
112
105
  @manifest = Psych.load_file(manifest_file)
106
+
107
+ #handle compiled_release case
108
+ @compiled_release = !!@manifest["compiled_packages"]
109
+ if @compiled_release
110
+ @packages_folder = "compiled_packages"
111
+ else
112
+ @packages_folder = "packages"
113
+ end
114
+
113
115
  normalize_manifest
114
116
 
115
117
  @name = @manifest["name"]
@@ -253,69 +255,134 @@ module Bosh::Director
253
255
  end
254
256
  end
255
257
 
256
- create_packages(new_packages, release_dir)
257
- use_existing_packages(existing_packages)
258
+ package_stemcell_hashes1 = create_packages(new_packages, release_dir)
259
+ package_stemcell_hashes2 = use_existing_packages(existing_packages)
260
+ consolidated_package_stemcell_hashes = Array(package_stemcell_hashes1) | Array(package_stemcell_hashes2)
261
+
262
+ create_compiled_packages(consolidated_package_stemcell_hashes, release_dir)
263
+ end
264
+
265
+ # Points release DB model to existing packages described by given metadata
266
+ # @param [Array<Array>] packages Existing packages metadata
267
+ def use_existing_packages(packages)
268
+ return if packages.empty?
269
+
270
+ package_stemcell_hashes = []
271
+
272
+ single_step_stage("Processing #{packages.size} existing package#{"s" if packages.size > 1}") do
273
+ packages.each do |package, package_meta|
274
+ package_desc = "#{package.name}/#{package.version}"
275
+ logger.info("Using existing package `#{package_desc}'")
276
+ register_package(package)
277
+
278
+ if @compiled_release
279
+ stemcells = stemcells_used_by_package(package_meta)
280
+ stemcells.each do |stemcell|
281
+ hash = { "package" => package, "stemcell" => stemcell}
282
+ package_stemcell_hashes << hash
283
+ end
284
+ end
285
+ end
286
+ end
287
+
288
+ package_stemcell_hashes
258
289
  end
259
290
 
260
291
  # Creates packages using provided metadata
261
292
  # @param [Array<Hash>] packages Packages metadata
262
293
  # @param [String] release_dir local path to the unpacked release
263
- # @return [void]
264
- def create_packages(packages, release_dir)
265
- if packages.empty?
294
+ # @return [Array<Hash>] package & stemcell
295
+ def create_packages(package_metas, release_dir)
296
+ if package_metas.empty?
266
297
  @packages_unchanged = true
267
298
  return
268
299
  end
269
300
 
270
- event_log.begin_stage("Creating new packages", packages.size)
271
- packages.each do |package_meta|
301
+ package_stemcell_hashes = []
302
+ event_log.begin_stage("Creating new packages", package_metas.size)
303
+
304
+ package = package_metas.each do |package_meta|
272
305
  package_desc = "#{package_meta["name"]}/#{package_meta["version"]}"
273
306
  event_log.track(package_desc) do
274
307
  logger.info("Creating new package `#{package_desc}'")
308
+ package = create_package(package_meta, release_dir)
309
+ register_package(package)
310
+ package
311
+ end
275
312
 
276
- if @compiled_release
277
- package = create_package_for_compiled_release(package_meta, release_dir)
278
- else
279
- package = create_package(package_meta, release_dir)
313
+ if @compiled_release
314
+ stemcells = stemcells_used_by_package(package_meta)
315
+ stemcells.each do |stemcell|
316
+ hash = { "package" => package, "stemcell" => stemcell}
317
+ package_stemcell_hashes << hash
280
318
  end
281
-
282
- register_package(package)
283
319
  end
284
320
  end
321
+
322
+ package_stemcell_hashes
285
323
  end
286
324
 
287
- # Points release DB model to existing packages described by given metadata
288
- # @param [Array<Array>] packages Existing packages metadata
289
- def use_existing_packages(packages)
290
- return if packages.empty?
325
+ def create_compiled_packages(all_compiled_packages, release_dir)
326
+ if all_compiled_packages.nil?
327
+ return
328
+ end
291
329
 
292
- single_step_stage("Processing #{packages.size} existing package#{"s" if packages.size > 1}") do
293
- packages.each do |package, _|
294
- package_desc = "#{package.name}/#{package.version}"
295
- logger.info("Using existing package `#{package_desc}'")
296
- register_package(package)
330
+ event_log.begin_stage('Creating new compiled packages', all_compiled_packages.size)
331
+
332
+ all_compiled_packages.each do |compiled_package_spec|
333
+ package = compiled_package_spec['package']
334
+ stemcell = compiled_package_spec['stemcell']
335
+
336
+ existing_compiled_package = Models::CompiledPackage.where(
337
+ :package_id => package.id,
338
+ :stemcell_id => stemcell.id)
339
+
340
+ if existing_compiled_package.empty?
341
+ package_desc = "#{package.name}/#{package.version} for #{stemcell.name}/#{stemcell.version}"
342
+ event_log.track(package_desc) do
343
+ create_compiled_package(package, stemcell, release_dir)
344
+ end
297
345
  end
298
346
  end
299
347
  end
300
348
 
301
- def create_package_for_compiled_release(package_meta, release_dir)
302
- name, version = package_meta["name"], package_meta["version"]
303
- desc = "package `#{name}/#{version}'"
349
+ def stemcells_used_by_package(package_meta)
350
+ if package_meta['stemcell'].nil?
351
+ raise 'stemcell informatiom(operating system/version) should be listed for each package of a compiled tarball'
352
+ end
304
353
 
305
- package_attrs = {
306
- :release => @release_model,
307
- :name => name,
308
- :sha1 => nil,
309
- :blobstore_id => nil,
310
- :fingerprint => package_meta["fingerprint"],
311
- :version => version
312
- }
354
+ values = package_meta['stemcell'].split('/', 2)
355
+ operating_system = values[0]
356
+ stemcell_version = values[1]
357
+ unless operating_system && stemcell_version
358
+ raise 'stemcell informatiom(operating system/version) should be listed for each package of a compiled tarball'
359
+ end
313
360
 
314
- package = Models::Package.new(package_attrs)
315
- package.dependency_set = package_meta["dependencies"]
361
+ stemcells = Models::Stemcell.where(:operating_system => operating_system, :version => stemcell_version)
362
+ if stemcells.empty?
363
+ raise "No stemcells matching OS #{operating_system} version #{stemcell_version}"
364
+ end
316
365
 
317
- logger.info("Creating #{desc} from provided bits")
318
- package.save
366
+ stemcells
367
+ end
368
+
369
+ def create_compiled_package(package, stemcell, release_dir)
370
+ tgz = File.join(release_dir, 'compiled_packages', "#{package.name}.tgz")
371
+ validate_tgz(tgz, "#{package.name}.tgz")
372
+
373
+ compiled_package = Models::CompiledPackage.new
374
+
375
+ compiled_package.blobstore_id = BlobUtil.create_blob(tgz)
376
+ compiled_package.sha1 = Digest::SHA1.hexdigest(tgz)
377
+
378
+ transitive_dependencies = @release_version_model.transitive_dependencies(package)
379
+ compiled_package.dependency_key = Models::CompiledPackage.create_dependency_key(transitive_dependencies)
380
+
381
+ compiled_package.build = Models::CompiledPackage.generate_build_number(package, stemcell)
382
+ compiled_package.package_id = package.id
383
+ compiled_package.stemcell_id = stemcell.id
384
+
385
+ compiled_package.save
319
386
  end
320
387
 
321
388
  # Creates package in DB according to given metadata
@@ -323,43 +390,48 @@ module Bosh::Director
323
390
  # @param [String] release_dir local path to the unpacked release
324
391
  # @return [void]
325
392
  def create_package(package_meta, release_dir)
326
- name, version = package_meta["name"], package_meta["version"]
393
+ name, version = package_meta['name'], package_meta['version']
327
394
 
328
395
  package_attrs = {
329
- :release => @release_model,
330
- :name => name,
331
- :sha1 => package_meta["sha1"],
332
- :fingerprint => package_meta["fingerprint"],
333
- :version => version
396
+ :release => @release_model,
397
+ :name => name,
398
+ :sha1 => @compiled_release ? nil : package_meta['sha1'],
399
+ :blobstore_id => nil,
400
+ :fingerprint => package_meta['fingerprint'],
401
+ :version => version
334
402
  }
335
403
 
336
404
  package = Models::Package.new(package_attrs)
337
- package.dependency_set = package_meta["dependencies"]
405
+ package.dependency_set = package_meta['dependencies']
338
406
 
339
- existing_blob = package_meta["blobstore_id"]
340
- desc = "package `#{name}/#{version}'"
407
+ unless @compiled_release
408
+ existing_blob = package_meta['blobstore_id']
409
+ desc = "package '#{name}/#{version}'"
341
410
 
342
- if existing_blob
343
- logger.info("Creating #{desc} from existing blob #{existing_blob}")
344
- package.blobstore_id = BlobUtil.copy_blob(existing_blob)
345
- else
346
- logger.info("Creating #{desc} from provided bits")
347
-
348
- package_tgz = File.join(release_dir, "packages", "#{name}.tgz")
349
- result = Bosh::Exec.sh("tar -tzf #{package_tgz} 2>&1", :on_error => :return)
350
- if result.failed?
351
- logger.error("Extracting #{desc} archive failed, " +
352
- "tar returned #{result.exit_status}, " +
353
- "output: #{result.output}")
354
- raise PackageInvalidArchive, "Extracting #{desc} archive failed. Check task debug log for details."
355
- end
411
+ if existing_blob
412
+ logger.info("Creating #{desc} from existing blob #{existing_blob}")
413
+ package.blobstore_id = BlobUtil.copy_blob(existing_blob)
414
+
415
+ else
416
+ logger.info("Creating #{desc} from provided bits")
356
417
 
357
- package.blobstore_id = BlobUtil.create_blob(package_tgz)
418
+ package_tgz = File.join(release_dir, 'packages', "#{name}.tgz")
419
+ validate_tgz(package_tgz, desc)
420
+ package.blobstore_id = BlobUtil.create_blob(package_tgz)
421
+ end
358
422
  end
359
423
 
360
424
  package.save
361
425
  end
362
426
 
427
+ def validate_tgz(tgz, desc)
428
+ result = Bosh::Exec.sh("tar -tzf #{tgz} 2>&1", :on_error => :return)
429
+ if result.failed?
430
+ logger.error("Extracting #{desc} archive failed, tar returned #{result.exit_status}, output: #{result.output}")
431
+ raise PackageInvalidArchive, "Extracting #{desc} archive failed. Check task debug log for details."
432
+ end
433
+ end
434
+
363
435
  # Marks package model as used by release version model
364
436
  # @param [Models::Package] package Package model
365
437
  # @return [void]
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.3022.0'
3
+ VERSION = '1.3025.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.3022.0
4
+ version: 1.3025.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-07-23 00:00:00.000000000 Z
11
+ date: 2015-07-27 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.3022.0
33
+ version: 1.3025.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.3022.0
40
+ version: 1.3025.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.3022.0
47
+ version: 1.3025.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.3022.0
54
+ version: 1.3025.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.3022.0
61
+ version: 1.3025.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.3022.0
68
+ version: 1.3025.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.3022.0
75
+ version: 1.3025.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.3022.0
82
+ version: 1.3025.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.3022.0
89
+ version: 1.3025.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.3022.0
96
+ version: 1.3025.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.3022.0
103
+ version: 1.3025.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.3022.0
110
+ version: 1.3025.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.3022.0
117
+ version: 1.3025.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.3022.0
124
+ version: 1.3025.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.3022.0
131
+ version: 1.3025.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.3022.0
138
+ version: 1.3025.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.3022.0
145
+ version: 1.3025.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.3022.0
152
+ version: 1.3025.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
- 6073a7
575
+ 37d29e
576
576
  email: support@cloudfoundry.com
577
577
  executables:
578
578
  - bosh-director