bosh-director 1.3112.0 → 1.3115.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 +4 -4
- data/lib/bosh/director/api/controllers/packages_controller.rb +48 -2
- data/lib/bosh/director/config.rb +3 -0
- data/lib/bosh/director/jobs/ssh.rb +5 -0
- data/lib/bosh/director/jobs/update_release.rb +37 -15
- data/lib/bosh/director/problem_resolver.rb +2 -0
- data/lib/bosh/director/version.rb +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 55328ec9d042beefb1bf840777ea01ef3e2f22ed
|
|
4
|
+
data.tar.gz: d2af38792bd179f949e3cf79c9dab94ef12de2e6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 09953e2a0f95ea0da277f98ee89948b740e0b40c286cb1585128a91848a47662d30e97da9eb1ca4e34d646b58905d9f2f8ae4ba0889b9d2a34e1183854e07f3e
|
|
7
|
+
data.tar.gz: e8afa094deb406029e902b414e852212c9f384d6e015a122baee7ae4fe31ebb3b38a29288aa440919cb763ff54e0a57475edd0a85a1101f06e02a3d15abcd89e
|
|
@@ -29,15 +29,61 @@ module Bosh::Director
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
fingerprint_list = []
|
|
32
|
-
|
|
33
32
|
manifest['compiled_packages'].each do |package|
|
|
34
33
|
fingerprint_list << package['fingerprint'] if package['fingerprint']
|
|
35
34
|
end
|
|
36
35
|
|
|
37
|
-
matching_packages = Models::Package.join(Models::CompiledPackage, :package_id=>:id)
|
|
36
|
+
matching_packages = Models::Package.join(Models::CompiledPackage, :package_id=>:id)
|
|
37
|
+
.select(:packages__name, :packages__fingerprint, :compiled_packages__dependency_key, :stemcells__operating_system, :stemcells__version)
|
|
38
|
+
.join(Models::Stemcell, :id=>:stemcell_id)
|
|
39
|
+
.where(fingerprint: fingerprint_list).all
|
|
40
|
+
|
|
41
|
+
matching_packages = filter_matching_packages(matching_packages, manifest)
|
|
38
42
|
|
|
39
43
|
json_encode(matching_packages.map(&:fingerprint).compact.uniq)
|
|
40
44
|
end
|
|
45
|
+
|
|
46
|
+
# dependencies & stemcell should also match
|
|
47
|
+
def filter_matching_packages(matching_packages, manifest)
|
|
48
|
+
filtered_packages = []
|
|
49
|
+
|
|
50
|
+
matching_packages.each do |package|
|
|
51
|
+
stemcell_match = "#{package[:operating_system]}/#{package[:version]}" == compiled_package_meta(package.name, manifest)['stemcell']
|
|
52
|
+
dependencies_match = package[:dependency_key] == dependency_key(package, manifest)
|
|
53
|
+
|
|
54
|
+
if stemcell_match && dependencies_match
|
|
55
|
+
filtered_packages << package
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
filtered_packages
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def dependency_key(package, manifest)
|
|
63
|
+
compiled_package_meta = compiled_package_meta(package.name, manifest)
|
|
64
|
+
dependencies = transitive_dependencies(compiled_package_meta, manifest)
|
|
65
|
+
|
|
66
|
+
key = dependencies.to_a.sort_by {|k| k["name"]}.map { |p| [p['name'], p['version']]}
|
|
67
|
+
Yajl::Encoder.encode(key)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def transitive_dependencies(compiled_package_meta, manifest)
|
|
71
|
+
dependencies = Set.new
|
|
72
|
+
return dependencies if compiled_package_meta['dependencies'].nil?
|
|
73
|
+
|
|
74
|
+
compiled_package_meta['dependencies'].each do |dependency_package_name|
|
|
75
|
+
dependency_compiled_package_meta = compiled_package_meta(dependency_package_name, manifest)
|
|
76
|
+
dependencies << dependency_compiled_package_meta
|
|
77
|
+
dependencies.merge(transitive_dependencies(dependency_compiled_package_meta, manifest))
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
dependencies
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def compiled_package_meta(package_name, manifest)
|
|
84
|
+
manifest['compiled_packages'].select { |p| p['name'] == package_name}[0]
|
|
85
|
+
end
|
|
86
|
+
|
|
41
87
|
end
|
|
42
88
|
end
|
|
43
89
|
end
|
data/lib/bosh/director/config.rb
CHANGED
|
@@ -34,6 +34,7 @@ module Bosh::Director
|
|
|
34
34
|
:enable_snapshots,
|
|
35
35
|
:max_vm_create_tries,
|
|
36
36
|
:nats_uri,
|
|
37
|
+
:default_ssh_options
|
|
37
38
|
)
|
|
38
39
|
|
|
39
40
|
attr_reader(
|
|
@@ -121,6 +122,8 @@ module Bosh::Director
|
|
|
121
122
|
@process_uuid = SecureRandom.uuid
|
|
122
123
|
@nats_uri = config['mbus']
|
|
123
124
|
|
|
125
|
+
@default_ssh_options = config['default_ssh_options']
|
|
126
|
+
|
|
124
127
|
@cloud_options = config['cloud']
|
|
125
128
|
@compiled_package_cache_options = config['compiled_package_cache']
|
|
126
129
|
@name = config['name'] || ''
|
|
@@ -45,6 +45,11 @@ module Bosh::Director
|
|
|
45
45
|
result = agent.ssh(@command, @params)
|
|
46
46
|
result["index"] = instance.index
|
|
47
47
|
|
|
48
|
+
if Config.default_ssh_options
|
|
49
|
+
result["gateway_host"] = Config.default_ssh_options["gateway_host"]
|
|
50
|
+
result["gateway_user"] = Config.default_ssh_options["gateway_user"]
|
|
51
|
+
end
|
|
52
|
+
|
|
48
53
|
result
|
|
49
54
|
end
|
|
50
55
|
|
|
@@ -192,6 +192,7 @@ module Bosh::Director
|
|
|
192
192
|
new_packages = []
|
|
193
193
|
existing_packages = []
|
|
194
194
|
registered_packages = []
|
|
195
|
+
packages_existing_from_other_releases = []
|
|
195
196
|
|
|
196
197
|
@manifest[@packages_folder].each do |package_meta|
|
|
197
198
|
# Checking whether we might have the same bits somewhere (in any release, not just the one being uploaded)
|
|
@@ -242,7 +243,6 @@ module Bosh::Director
|
|
|
242
243
|
# We found a package with the same fingerprint but different
|
|
243
244
|
# (release, name, version) tuple, so we need to make a copy
|
|
244
245
|
# of the package blob and create a new db entry for it
|
|
245
|
-
|
|
246
246
|
packages.each do |package|
|
|
247
247
|
unless package.blobstore_id.nil?
|
|
248
248
|
package_meta["blobstore_id"] = package.blobstore_id
|
|
@@ -251,6 +251,7 @@ module Bosh::Director
|
|
|
251
251
|
end
|
|
252
252
|
end
|
|
253
253
|
new_packages << package_meta
|
|
254
|
+
packages_existing_from_other_releases << package_meta
|
|
254
255
|
end
|
|
255
256
|
end
|
|
256
257
|
|
|
@@ -268,7 +269,7 @@ module Bosh::Director
|
|
|
268
269
|
end
|
|
269
270
|
end
|
|
270
271
|
consolidated_package_stemcell_hashes = Array(package_stemcell_hashes1) | Array(package_stemcell_hashes2) | compatible_stemcell_combos
|
|
271
|
-
create_compiled_packages(consolidated_package_stemcell_hashes, release_dir)
|
|
272
|
+
create_compiled_packages(consolidated_package_stemcell_hashes, release_dir, packages_existing_from_other_releases)
|
|
272
273
|
else
|
|
273
274
|
backfill_source_for_packages(registered_packages, release_dir)
|
|
274
275
|
end
|
|
@@ -361,31 +362,45 @@ module Bosh::Director
|
|
|
361
362
|
end
|
|
362
363
|
|
|
363
364
|
# @return [boolean] true if at least one job was created; false if the call had no effect.
|
|
364
|
-
def create_compiled_packages(all_compiled_packages, release_dir)
|
|
365
|
+
def create_compiled_packages(all_compiled_packages, release_dir, packages_existing_from_other_releases)
|
|
365
366
|
return false if all_compiled_packages.nil?
|
|
366
367
|
|
|
367
368
|
event_log.begin_stage('Creating new compiled packages', all_compiled_packages.size)
|
|
368
|
-
|
|
369
369
|
had_effect = false
|
|
370
|
+
|
|
370
371
|
all_compiled_packages.each do |compiled_package_spec|
|
|
371
372
|
package = compiled_package_spec[:package]
|
|
372
373
|
stemcell = compiled_package_spec[:stemcell]
|
|
373
374
|
|
|
374
|
-
existing_compiled_package = Models::CompiledPackage.where(
|
|
375
|
-
:package_id => package.id,
|
|
376
|
-
:stemcell_id => stemcell.id)
|
|
377
|
-
|
|
375
|
+
existing_compiled_package = Models::CompiledPackage.where(:package_id => package.id, :stemcell_id => stemcell.id)
|
|
378
376
|
if existing_compiled_package.empty?
|
|
377
|
+
|
|
379
378
|
package_desc = "#{package.name}/#{package.version} for #{stemcell.name}/#{stemcell.version}"
|
|
380
379
|
event_log.track(package_desc) do
|
|
381
|
-
|
|
380
|
+
other_compiled_package = get_other_compiled_package(package, packages_existing_from_other_releases, stemcell)
|
|
381
|
+
create_compiled_package(package, stemcell, release_dir, other_compiled_package)
|
|
382
382
|
had_effect = true
|
|
383
383
|
end
|
|
384
384
|
end
|
|
385
385
|
end
|
|
386
|
+
|
|
386
387
|
had_effect
|
|
387
388
|
end
|
|
388
389
|
|
|
390
|
+
def get_other_compiled_package(package, packages_existing_from_other_releases, stemcell)
|
|
391
|
+
other_compiled_package = nil
|
|
392
|
+
packages_existing_from_other_releases.each do |other_package_meta|
|
|
393
|
+
if other_package_meta["fingerprint"] == package.fingerprint
|
|
394
|
+
packages = Models::Package.where(fingerprint: other_package_meta["fingerprint"]).all
|
|
395
|
+
packages.each do |pkg|
|
|
396
|
+
other_compiled_package = Models::CompiledPackage.where(:package_id => pkg.id, :stemcell_id => stemcell.id).first
|
|
397
|
+
break unless other_compiled_package.nil?
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
other_compiled_package
|
|
402
|
+
end
|
|
403
|
+
|
|
389
404
|
def stemcells_used_by_package(package_meta)
|
|
390
405
|
if package_meta['stemcell'].nil?
|
|
391
406
|
raise 'stemcell informatiom(operating system/version) should be listed for each package of a compiled tarball'
|
|
@@ -406,14 +421,21 @@ module Bosh::Director
|
|
|
406
421
|
stemcells
|
|
407
422
|
end
|
|
408
423
|
|
|
409
|
-
def create_compiled_package(package, stemcell, release_dir)
|
|
410
|
-
|
|
411
|
-
|
|
424
|
+
def create_compiled_package(package, stemcell, release_dir, other_compiled_package)
|
|
425
|
+
if other_compiled_package.nil?
|
|
426
|
+
tgz = File.join(release_dir, 'compiled_packages', "#{package.name}.tgz")
|
|
427
|
+
validate_tgz(tgz, "#{package.name}.tgz")
|
|
412
428
|
|
|
413
|
-
|
|
429
|
+
blobstore_id = BlobUtil.create_blob(tgz)
|
|
430
|
+
sha1 = Digest::SHA1.file(tgz).hexdigest
|
|
431
|
+
else
|
|
432
|
+
blobstore_id = BlobUtil.copy_blob(other_compiled_package.blobstore_id)
|
|
433
|
+
sha1 = other_compiled_package.sha1
|
|
434
|
+
end
|
|
414
435
|
|
|
415
|
-
compiled_package
|
|
416
|
-
compiled_package.
|
|
436
|
+
compiled_package = Models::CompiledPackage.new
|
|
437
|
+
compiled_package.blobstore_id = blobstore_id
|
|
438
|
+
compiled_package.sha1 = sha1
|
|
417
439
|
|
|
418
440
|
transitive_dependencies = @release_version_model.transitive_dependencies(package)
|
|
419
441
|
compiled_package.dependency_key = Models::CompiledPackage.create_dependency_key(transitive_dependencies)
|
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.
|
|
4
|
+
version: 1.3115.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-10-
|
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bosh_common
|
|
@@ -16,98 +16,98 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.
|
|
19
|
+
version: 1.3115.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: 1.
|
|
26
|
+
version: 1.3115.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
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.
|
|
33
|
+
version: 1.3115.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.
|
|
40
|
+
version: 1.3115.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
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.
|
|
47
|
+
version: 1.3115.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.
|
|
54
|
+
version: 1.3115.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
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.
|
|
61
|
+
version: 1.3115.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.
|
|
68
|
+
version: 1.3115.0
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
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.
|
|
75
|
+
version: 1.3115.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.
|
|
82
|
+
version: 1.3115.0
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
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.
|
|
89
|
+
version: 1.3115.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.
|
|
96
|
+
version: 1.3115.0
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
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.
|
|
103
|
+
version: 1.3115.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.
|
|
110
|
+
version: 1.3115.0
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: bosh_openstack_cpi
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|