bosh-director 1.3048.0 → 1.3050.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 +19 -1
- data/lib/bosh/director/api/controllers/releases_controller.rb +1 -2
- data/lib/bosh/director/api/route_configuration.rb +0 -4
- data/lib/bosh/director/api.rb +0 -1
- data/lib/bosh/director/deployment_plan/planner_factory.rb +41 -27
- data/lib/bosh/director/errors.rb +1 -0
- data/lib/bosh/director/jobs/delete_release.rb +4 -4
- data/lib/bosh/director/jobs/export_release.rb +53 -5
- data/lib/bosh/director/jobs/update_release.rb +132 -82
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director.rb +0 -1
- data/lib/cloud/dummy.rb +39 -3
- metadata +23 -31
- data/lib/bosh/director/api/compiled_package_group_manager.rb +0 -17
- data/lib/bosh/director/api/controllers/compiled_packages_controller.rb +0 -63
- data/lib/bosh/director/compiled_package/compiled_package_inserter.rb +0 -45
- data/lib/bosh/director/compiled_package/compiled_packages_export.rb +0 -35
- data/lib/bosh/director/compiled_package_downloader.rb +0 -33
- data/lib/bosh/director/compiled_package_manifest.rb +0 -31
- data/lib/bosh/director/compiled_packages_exporter.rb +0 -24
- data/lib/bosh/director/jobs/import_compiled_packages.rb +0 -44
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 21b3597db4028e01b8fe540f0a551c60f2b0e06f
|
|
4
|
+
data.tar.gz: 5069ad495cd05d71565b6b31cf6a9f68219a8e6e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 560901cbd41cc4b0b9a56322797301f7a6e5b1c892a78e763c60fd2df739be8984a076eaf677daeaaaf6f7a27bc4c1100af98e84cd09bc1ea2363f7c28d99218
|
|
7
|
+
data.tar.gz: 2e1da9546ec0ad35a8d7e33c60638498e882959d8d9626861adbd290b9402a8f820ec379e772f5c1e89eb9a7a797f8fd663a97903a666947e1cc5f10c70ec2e8
|
|
@@ -16,7 +16,25 @@ module Bosh::Director
|
|
|
16
16
|
fingerprint_list << package['fingerprint'] if package['fingerprint']
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
matching_packages = Models::Package.where(fingerprint: fingerprint_list).all
|
|
19
|
+
matching_packages = Models::Package.where(fingerprint: fingerprint_list, ~:sha1 => nil, ~:blobstore_id => nil).all
|
|
20
|
+
|
|
21
|
+
json_encode(matching_packages.map(&:fingerprint).compact.uniq)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
post '/matches_compiled', :consumes => :yaml do
|
|
25
|
+
manifest = Psych.load(request.body)
|
|
26
|
+
|
|
27
|
+
unless manifest.is_a?(Hash) && manifest['compiled_packages'].is_a?(Array)
|
|
28
|
+
raise BadManifest, "Manifest doesn't have a usable packages section"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
fingerprint_list = []
|
|
32
|
+
|
|
33
|
+
manifest['compiled_packages'].each do |package|
|
|
34
|
+
fingerprint_list << package['fingerprint'] if package['fingerprint']
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
matching_packages = Models::Package.join(Models::CompiledPackage, :package_id=>:id).where(fingerprint: fingerprint_list).all
|
|
20
38
|
|
|
21
39
|
json_encode(matching_packages.map(&:fingerprint).compact.uniq)
|
|
22
40
|
end
|
|
@@ -7,7 +7,6 @@ module Bosh::Director
|
|
|
7
7
|
payload = json_decode(request.body)
|
|
8
8
|
options = {
|
|
9
9
|
rebase: params['rebase'] == 'true',
|
|
10
|
-
skip_if_exists: params['skip_if_exists'] == 'true',
|
|
11
10
|
}
|
|
12
11
|
task = @release_manager.create_release_from_url(current_user, payload['location'], options)
|
|
13
12
|
redirect "/tasks/#{task.id}"
|
|
@@ -129,7 +128,7 @@ module Bosh::Director
|
|
|
129
128
|
'blobstore_id' => package.blobstore_id,
|
|
130
129
|
'sha1' => package.sha1,
|
|
131
130
|
'fingerprint' => package.fingerprint.to_s,
|
|
132
|
-
'compiled_packages' => package.compiled_packages.sort_by { |cp| cp.stemcell }.map do |compiled|
|
|
131
|
+
'compiled_packages' => package.compiled_packages.sort_by { |cp| [cp.stemcell.name, cp.stemcell.version] }.map do |compiled|
|
|
133
132
|
{
|
|
134
133
|
'stemcell' => "#{compiled.stemcell.name}/#{compiled.stemcell.version}",
|
|
135
134
|
'sha1' => compiled.sha1,
|
|
@@ -12,10 +12,6 @@ module Bosh
|
|
|
12
12
|
controllers = {}
|
|
13
13
|
controllers['/backups'] = Bosh::Director::Api::Controllers::BackupsController.new(@config)
|
|
14
14
|
controllers['/cloud_configs'] = Bosh::Director::Api::Controllers::CloudConfigsController.new(@config)
|
|
15
|
-
controllers['/compiled_package_groups'] = Bosh::Director::Api::Controllers::CompiledPackagesController.new(
|
|
16
|
-
@config,
|
|
17
|
-
Bosh::Director::Api::CompiledPackageGroupManager.new
|
|
18
|
-
)
|
|
19
15
|
controllers['/deployments'] = Bosh::Director::Api::Controllers::DeploymentsController.new(@config)
|
|
20
16
|
controllers['/info'] = Bosh::Director::Api::Controllers::InfoController.new(@config)
|
|
21
17
|
controllers['/locks'] = Bosh::Director::Api::Controllers::LocksController.new(@config)
|
data/lib/bosh/director/api.rb
CHANGED
|
@@ -19,7 +19,6 @@ require 'bosh/director/api/release_manager'
|
|
|
19
19
|
require 'bosh/director/api/resource_manager'
|
|
20
20
|
require 'bosh/director/api/snapshot_manager'
|
|
21
21
|
require 'bosh/director/api/stemcell_manager'
|
|
22
|
-
require 'bosh/director/api/compiled_package_group_manager'
|
|
23
22
|
require 'bosh/director/api/task_manager'
|
|
24
23
|
require 'bosh/director/api/user/config_user_manager'
|
|
25
24
|
require 'bosh/director/api/user/database_user_manager'
|
|
@@ -56,32 +56,6 @@ 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
|
-
|
|
85
59
|
private
|
|
86
60
|
|
|
87
61
|
def deployment_name(manifest_hash)
|
|
@@ -121,7 +95,7 @@ module Bosh
|
|
|
121
95
|
|
|
122
96
|
run_prepare_step(assembler)
|
|
123
97
|
|
|
124
|
-
|
|
98
|
+
validate_packages(planner)
|
|
125
99
|
|
|
126
100
|
DeploymentPlan::Steps::PackageCompileStep.new(
|
|
127
101
|
planner,
|
|
@@ -138,6 +112,46 @@ module Bosh
|
|
|
138
112
|
planner
|
|
139
113
|
end
|
|
140
114
|
|
|
115
|
+
def validate_packages(planner)
|
|
116
|
+
faults = {}
|
|
117
|
+
release_manager = Bosh::Director::Api::ReleaseManager.new
|
|
118
|
+
planner.jobs.each { |job|
|
|
119
|
+
job.templates.each{ |template|
|
|
120
|
+
release_model = release_manager.find_by_name(template.release.name)
|
|
121
|
+
template.package_models.each{ |package|
|
|
122
|
+
|
|
123
|
+
release_version_model = release_manager.find_version(release_model, template.release.version)
|
|
124
|
+
packages_list = release_version_model.transitive_dependencies(package)
|
|
125
|
+
packages_list << package
|
|
126
|
+
|
|
127
|
+
release_desc = "#{release_version_model.release.name}/#{release_version_model.version}"
|
|
128
|
+
|
|
129
|
+
packages_list.each { |needed_package|
|
|
130
|
+
if needed_package.sha1.nil? || needed_package.blobstore_id.nil?
|
|
131
|
+
compiled_packages_list = Bosh::Director::Models::CompiledPackage[:package_id => needed_package.id, :stemcell_id => job.resource_pool.stemcell.model.id]
|
|
132
|
+
if compiled_packages_list.nil?
|
|
133
|
+
(faults[release_desc] ||= []) << {:package => needed_package, :stemcell => job.resource_pool.stemcell.model}
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
handle_faults(faults) unless faults.empty?
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def handle_faults(faults)
|
|
144
|
+
msg = "\n"
|
|
145
|
+
faults.each { |release_desc, packages_and_stemcells_list|
|
|
146
|
+
msg += "\nCan't deploy release `#{release_desc}'. It references packages (see below) without source code and are not compiled against intended stemcells:\n"
|
|
147
|
+
sorted_packages_and_stemcells = packages_and_stemcells_list.sort_by { |p| p[:package].name }
|
|
148
|
+
sorted_packages_and_stemcells.each { |item|
|
|
149
|
+
msg += " - `#{item[:package].name}/#{item[:package].version}' against `#{item[:stemcell].desc}'\n"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
raise PackageMissingSourceCode, msg
|
|
153
|
+
end
|
|
154
|
+
|
|
141
155
|
def run_prepare_step(assembler)
|
|
142
156
|
@event_log.begin_stage('Preparing deployment', 9)
|
|
143
157
|
@logger.info('Preparing deployment')
|
data/lib/bosh/director/errors.rb
CHANGED
|
@@ -63,7 +63,7 @@ module Bosh::Director
|
|
|
63
63
|
package.remove_release_version(release_version)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
event_log.begin_stage("Deleting
|
|
66
|
+
event_log.begin_stage("Deleting jobs", templates_to_delete.count)
|
|
67
67
|
templates_to_delete.each do |template|
|
|
68
68
|
track_and_log("#{template.name}/#{template.version}") do
|
|
69
69
|
logger.info("Template #{template.name}/#{template.version} " +
|
|
@@ -74,7 +74,7 @@ module Bosh::Director
|
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
templates_to_keep.each do |template|
|
|
77
|
-
logger.info("Keeping
|
|
77
|
+
logger.info("Keeping job " +
|
|
78
78
|
"#{template.name}/#{template.version} as it is used " +
|
|
79
79
|
"by other release versions")
|
|
80
80
|
template.remove_release_version(release_version)
|
|
@@ -100,7 +100,7 @@ module Bosh::Director
|
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
event_log.begin_stage("Deleting
|
|
103
|
+
event_log.begin_stage("Deleting jobs", release.templates.count)
|
|
104
104
|
release.templates.each do |template|
|
|
105
105
|
track_and_log("#{template.name}/#{template.version}") do
|
|
106
106
|
delete_template(template)
|
|
@@ -145,7 +145,7 @@ module Bosh::Director
|
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
def delete_template(template)
|
|
148
|
-
logger.info("Deleting
|
|
148
|
+
logger.info("Deleting job: #{template.name}/#{template.version}")
|
|
149
149
|
|
|
150
150
|
if delete_blobstore_id(template.blobstore_id)
|
|
151
151
|
template.remove_all_release_versions
|
|
@@ -2,6 +2,7 @@ require 'securerandom'
|
|
|
2
2
|
require 'common/version/release_version'
|
|
3
3
|
require 'bosh/director/compiled_release_downloader'
|
|
4
4
|
require 'bosh/director/compiled_release_manifest'
|
|
5
|
+
require 'bosh/director/compiled_package_group'
|
|
5
6
|
|
|
6
7
|
module Bosh::Director
|
|
7
8
|
module Jobs
|
|
@@ -40,17 +41,18 @@ module Bosh::Director
|
|
|
40
41
|
@release_version_model = release_manager.find_version(release, @release_version)
|
|
41
42
|
|
|
42
43
|
unless deployment_manifest_has_release?
|
|
43
|
-
raise ReleaseNotMatchingManifest, "Release
|
|
44
|
+
raise ReleaseNotMatchingManifest, "Release version `#{@release_name}/#{@release_version}' not found in deployment `#{@deployment_name}' manifest"
|
|
44
45
|
end
|
|
45
46
|
|
|
47
|
+
validate_release_packages
|
|
48
|
+
|
|
46
49
|
lock_timeout = 15 * 60 # 15 minutes
|
|
47
50
|
|
|
48
51
|
with_deployment_lock(@deployment_name, :timeout => lock_timeout) do
|
|
49
52
|
with_release_lock(@release_name, :timeout => lock_timeout) do
|
|
50
53
|
with_stemcell_lock(@stemcell.name, @stemcell.version, :timeout => lock_timeout) do
|
|
51
54
|
|
|
52
|
-
planner = create_planner
|
|
53
|
-
DeploymentPlan::PlannerFactory.validate_packages(planner, {:context => 'export'})
|
|
55
|
+
planner = create_planner(stemcell_manager)
|
|
54
56
|
package_compile_step = DeploymentPlan::Steps::PackageCompileStep.new(
|
|
55
57
|
planner,
|
|
56
58
|
Config.cloud, # CPI
|
|
@@ -69,6 +71,8 @@ module Bosh::Director
|
|
|
69
71
|
"Exported release: #{@release_name}/#{@release_version} for #{@stemcell_os}/#{@stemcell_version}"
|
|
70
72
|
end
|
|
71
73
|
|
|
74
|
+
private
|
|
75
|
+
|
|
72
76
|
def deployment_manifest_has_release?
|
|
73
77
|
@deployment_manifest["releases"].each do |release|
|
|
74
78
|
if (release["name"] == @release_name) && (release["version"].to_s == @release_version.to_s)
|
|
@@ -78,7 +82,7 @@ module Bosh::Director
|
|
|
78
82
|
false
|
|
79
83
|
end
|
|
80
84
|
|
|
81
|
-
def create_planner
|
|
85
|
+
def create_planner(stemcell_manager)
|
|
82
86
|
cloud_config_model = @targeted_deployment.cloud_config
|
|
83
87
|
|
|
84
88
|
planner_factory = DeploymentPlan::PlannerFactory.create(Config.event_log, Config.logger)
|
|
@@ -102,6 +106,24 @@ module Bosh::Director
|
|
|
102
106
|
fake_job = create_fake_job(planner, fake_resource_pool_manifest, network_name)
|
|
103
107
|
planner.add_job(fake_job)
|
|
104
108
|
|
|
109
|
+
assembler = DeploymentPlan::Assembler.new(
|
|
110
|
+
planner,
|
|
111
|
+
stemcell_manager,
|
|
112
|
+
Config.cloud,
|
|
113
|
+
nil, # blobstore not used for this assembler purposes
|
|
114
|
+
@logger,
|
|
115
|
+
@event_log
|
|
116
|
+
)
|
|
117
|
+
@logger.info('Created deployment plan')
|
|
118
|
+
|
|
119
|
+
track_and_log('Binding existing deployment') do
|
|
120
|
+
assembler.bind_existing_deployment
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
track_and_log('Binding resource pools') do
|
|
124
|
+
assembler.bind_resource_pools
|
|
125
|
+
end
|
|
126
|
+
|
|
105
127
|
planner
|
|
106
128
|
end
|
|
107
129
|
|
|
@@ -154,7 +176,33 @@ module Bosh::Director
|
|
|
154
176
|
fake_job
|
|
155
177
|
end
|
|
156
178
|
|
|
179
|
+
def validate_release_packages
|
|
180
|
+
faults = Set.new
|
|
181
|
+
@release_version_model.packages.each do |package|
|
|
182
|
+
packages_list = @release_version_model.transitive_dependencies(package)
|
|
183
|
+
packages_list << package
|
|
184
|
+
|
|
185
|
+
packages_list.each { |needed_package|
|
|
186
|
+
if needed_package.sha1.nil? || needed_package.blobstore_id.nil?
|
|
187
|
+
compiled_packages_list = Bosh::Director::Models::CompiledPackage[:package_id => needed_package.id, :stemcell_id => @stemcell.id]
|
|
188
|
+
if compiled_packages_list.nil?
|
|
189
|
+
faults << needed_package
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
}
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
unless faults.empty?
|
|
196
|
+
sorted_faults = faults.to_a.sort_by { |p| p.name }
|
|
197
|
+
msg = "Can't export release `#{@release_name}/#{@release_version}'. It references packages without" +
|
|
198
|
+
" source code that are not compiled against `#{@stemcell.desc}':\n"
|
|
199
|
+
sorted_faults.each do |non_compiled_package|
|
|
200
|
+
msg += " - #{non_compiled_package.name}/#{non_compiled_package.version}\n"
|
|
201
|
+
end
|
|
202
|
+
raise PackageMissingSourceCode, msg
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
157
206
|
end
|
|
158
207
|
end
|
|
159
208
|
end
|
|
160
|
-
|