bosh-director 1.3215.4.0 → 1.3232.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bosh-director-console +1 -1
- data/bin/bosh-director-drain-workers +8 -2
- data/bin/bosh-director-worker +34 -53
- data/db/migrations/director/20110617211923_add_deployments_release_versions.rb +2 -2
- data/db/migrations/director/20120524175805_add_task_type.rb +23 -23
- data/db/migrations/director/20130531172604_add_director_attributes.rb +1 -2
- data/db/migrations/director/20140116002324_pivot_director_attributes.rb +1 -2
- data/db/migrations/director/20160210201838_denormalize_compiled_package_stemcell_id_to_stemcell_name_and_version.rb +7 -9
- data/db/migrations/director/20160211174110_add_events.rb +22 -0
- data/db/migrations/director/20160324181932_create_delayed_jobs.rb +22 -0
- data/db/migrations/director/20160324182211_add_locks.rb +15 -0
- data/db/migrations/director/20160329201256_set_instances_with_nil_serial_to_false.rb +15 -0
- data/db/migrations/director/20160331225404_backfill_stemcell_os.rb +9 -0
- data/db/migrations/director/20160411104407_add_task_started_at.rb +9 -0
- data/lib/bosh/director.rb +9 -2
- data/lib/bosh/director/agent_client.rb +22 -9
- data/lib/bosh/director/api.rb +0 -1
- data/lib/bosh/director/api/api_helper.rb +1 -1
- data/lib/bosh/director/api/controllers/base_controller.rb +5 -1
- data/lib/bosh/director/api/controllers/cloud_configs_controller.rb +18 -2
- data/lib/bosh/director/api/controllers/deployments_controller.rb +16 -9
- data/lib/bosh/director/api/controllers/events_controller.rb +37 -0
- data/lib/bosh/director/api/controllers/locks_controller.rb +7 -11
- data/lib/bosh/director/api/controllers/packages_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/runtime_configs_controller.rb +18 -2
- data/lib/bosh/director/api/controllers/tasks_controller.rb +7 -2
- data/lib/bosh/director/api/deployment_lookup.rb +1 -1
- data/lib/bosh/director/api/deployment_manager.rb +1 -1
- data/lib/bosh/director/api/event_manager.rb +68 -0
- data/lib/bosh/director/api/extensions/scoping.rb +2 -2
- data/lib/bosh/director/api/extensions/syslog_request_logger.rb +75 -0
- data/lib/bosh/director/api/instance_lookup.rb +2 -2
- data/lib/bosh/director/api/instance_manager.rb +2 -2
- data/lib/bosh/director/api/local_identity_provider.rb +8 -0
- data/lib/bosh/director/api/property_manager.rb +6 -5
- data/lib/bosh/director/api/release_manager.rb +3 -3
- data/lib/bosh/director/api/resource_manager.rb +2 -2
- data/lib/bosh/director/api/resurrector_manager.rb +1 -1
- data/lib/bosh/director/api/route_configuration.rb +1 -0
- data/lib/bosh/director/api/stemcell_manager.rb +5 -5
- data/lib/bosh/director/api/task_manager.rb +1 -0
- data/lib/bosh/director/api/task_remover.rb +1 -1
- data/lib/bosh/director/api/uaa_identity_provider.rb +9 -1
- data/lib/bosh/director/api/user/database_user_manager.rb +1 -1
- data/lib/bosh/director/app.rb +1 -1
- data/lib/bosh/director/arp_flusher.rb +23 -0
- data/lib/bosh/director/cloudcheck_helper.rb +4 -3
- data/lib/bosh/director/compile_task.rb +6 -6
- data/lib/bosh/director/compile_task_generator.rb +6 -6
- data/lib/bosh/director/compiled_release_downloader.rb +4 -4
- data/lib/bosh/director/config.rb +29 -87
- data/lib/bosh/director/deployment_deleter.rb +6 -6
- data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +2 -2
- data/lib/bosh/director/deployment_plan/assembler.rb +1 -1
- data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +26 -1
- data/lib/bosh/director/deployment_plan/deployment_repo.rb +1 -1
- data/lib/bosh/director/deployment_plan/disk_type.rb +1 -1
- data/lib/bosh/director/deployment_plan/instance.rb +2 -2
- data/lib/bosh/director/deployment_plan/instance_plan.rb +2 -2
- data/lib/bosh/director/deployment_plan/instance_spec.rb +2 -0
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +7 -3
- data/lib/bosh/director/deployment_plan/job.rb +12 -10
- data/lib/bosh/director/deployment_plan/job_spec_parser.rb +4 -4
- data/lib/bosh/director/deployment_plan/links/link.rb +1 -0
- data/lib/bosh/director/deployment_plan/links/link_path.rb +18 -19
- data/lib/bosh/director/deployment_plan/links/links_resolver.rb +2 -0
- data/lib/bosh/director/deployment_plan/links/template_link.rb +1 -1
- data/lib/bosh/director/deployment_plan/manual_network.rb +1 -1
- data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +6 -6
- data/lib/bosh/director/deployment_plan/planner.rb +3 -3
- data/lib/bosh/director/deployment_plan/planner_factory.rb +38 -40
- data/lib/bosh/director/deployment_plan/release_version.rb +5 -5
- data/lib/bosh/director/deployment_plan/runtime_manifest_parser.rb +22 -18
- data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +14 -16
- data/lib/bosh/director/deployment_plan/steps/update_step.rb +5 -5
- data/lib/bosh/director/deployment_plan/template.rb +61 -1
- data/lib/bosh/director/deployment_plan/update_config.rb +1 -1
- data/lib/bosh/director/disk_manager.rb +49 -40
- data/lib/bosh/director/dns/canonicalizer.rb +2 -2
- data/lib/bosh/director/dns/dns_manager.rb +2 -2
- data/lib/bosh/director/dns/powerdns.rb +2 -2
- data/lib/bosh/director/download_helper.rb +5 -5
- data/lib/bosh/director/errand/job_manager.rb +5 -6
- data/lib/bosh/director/errand/result.rb +1 -1
- data/lib/bosh/director/errand/runner.rb +2 -3
- data/lib/bosh/director/event_log.rb +1 -7
- data/lib/bosh/director/ext.rb +0 -6
- data/lib/bosh/director/instance_deleter.rb +23 -2
- data/lib/bosh/director/instance_updater.rb +62 -6
- data/lib/bosh/director/instance_updater/state_applier.rb +2 -2
- data/lib/bosh/director/job_queue.rb +4 -2
- data/lib/bosh/director/job_runner.rb +3 -8
- data/lib/bosh/director/jobs/backup.rb +1 -1
- data/lib/bosh/director/jobs/base_job.rb +10 -6
- data/lib/bosh/director/jobs/cleanup_artifacts.rb +6 -6
- data/lib/bosh/director/jobs/db_job.rb +87 -0
- data/lib/bosh/director/jobs/delete_deployment.rb +23 -2
- data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
- data/lib/bosh/director/jobs/delete_orphan_disks.rb +2 -2
- data/lib/bosh/director/jobs/delete_release.rb +2 -2
- data/lib/bosh/director/jobs/delete_stemcell.rb +1 -1
- data/lib/bosh/director/jobs/export_release.rb +4 -2
- data/lib/bosh/director/jobs/fetch_logs.rb +1 -1
- data/lib/bosh/director/jobs/helpers/blob_deleter.rb +1 -1
- data/lib/bosh/director/jobs/helpers/name_version_release_deleter.rb +3 -3
- data/lib/bosh/director/jobs/helpers/release_version_deleter.rb +1 -1
- data/lib/bosh/director/jobs/helpers/stemcell_deleter.rb +2 -12
- data/lib/bosh/director/jobs/release/release_job.rb +13 -28
- data/lib/bosh/director/jobs/run_errand.rb +6 -6
- data/lib/bosh/director/jobs/scheduled_backup.rb +1 -1
- data/lib/bosh/director/jobs/scheduled_events_cleanup.rb +31 -0
- data/lib/bosh/director/jobs/scheduled_orphan_cleanup.rb +1 -1
- data/lib/bosh/director/jobs/snapshot_deployment.rb +4 -1
- data/lib/bosh/director/jobs/ssh.rb +36 -14
- data/lib/bosh/director/jobs/update_deployment.rb +28 -6
- data/lib/bosh/director/jobs/update_release.rb +31 -41
- data/lib/bosh/director/jobs/update_stemcell.rb +4 -4
- data/lib/bosh/director/jobs/vm_state.rb +1 -2
- data/lib/bosh/director/lock.rb +30 -55
- data/lib/bosh/director/logs_fetcher.rb +2 -3
- data/lib/bosh/director/manifest/changeset.rb +88 -42
- data/lib/bosh/director/manifest/manifest.rb +1 -1
- data/lib/bosh/director/models.rb +3 -0
- data/lib/bosh/director/models/event.rb +18 -0
- data/lib/bosh/director/models/lock.rb +9 -0
- data/lib/bosh/director/models/release_version.rb +3 -1
- data/lib/bosh/director/problem_handlers/base.rb +3 -3
- data/lib/bosh/director/problem_handlers/inactive_disk.rb +4 -4
- data/lib/bosh/director/problem_handlers/missing_disk.rb +3 -3
- data/lib/bosh/director/problem_handlers/missing_vm.rb +1 -1
- data/lib/bosh/director/problem_handlers/mount_info_mismatch.rb +3 -3
- data/lib/bosh/director/problem_handlers/unresponsive_agent.rb +2 -2
- data/lib/bosh/director/problem_resolver.rb +5 -5
- data/lib/bosh/director/problem_scanner/problem_register.rb +1 -1
- data/lib/bosh/director/problem_scanner/scanner.rb +3 -2
- data/lib/bosh/director/scheduler.rb +3 -3
- data/lib/bosh/director/sequel.rb +1 -3
- data/lib/bosh/director/stopper.rb +1 -1
- data/lib/bosh/director/validation_helper.rb +60 -37
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director/vm_creator.rb +39 -7
- data/lib/bosh/director/vm_deleter.rb +29 -2
- data/lib/bosh/director/vm_metadata_updater.rb +4 -0
- data/lib/bosh/director/worker.rb +52 -0
- metadata +47 -61
- data/lib/bosh/director/manifest/redactor.rb +0 -44
@@ -18,7 +18,7 @@ module Bosh::Director
|
|
18
18
|
instance = Models::Instance.find(deployment: deployment, job: job_name, index: job_index)
|
19
19
|
if instance.nil?
|
20
20
|
raise InstanceNotFound,
|
21
|
-
"
|
21
|
+
"'#{deployment.name}/#{job_name}/#{job_index}' doesn't exist"
|
22
22
|
end
|
23
23
|
instance
|
24
24
|
end
|
@@ -27,7 +27,7 @@ module Bosh::Director
|
|
27
27
|
instance = Models::Instance.find(deployment: deployment, job: job_name, uuid: uuid)
|
28
28
|
if instance.nil?
|
29
29
|
raise InstanceNotFound,
|
30
|
-
"
|
30
|
+
"'#{deployment.name}/#{job_name}/#{uuid}' doesn't exist"
|
31
31
|
end
|
32
32
|
instance
|
33
33
|
end
|
@@ -38,11 +38,11 @@ module Bosh::Director
|
|
38
38
|
def agent_client_for(instance)
|
39
39
|
unless instance.vm_cid
|
40
40
|
raise InstanceVmMissing,
|
41
|
-
"
|
41
|
+
"'#{instance}' doesn't reference a VM"
|
42
42
|
end
|
43
43
|
|
44
44
|
unless instance.agent_id
|
45
|
-
raise VmAgentIdMissing, "VM
|
45
|
+
raise VmAgentIdMissing, "VM '#{instance.vm_cid}' doesn't have an agent id"
|
46
46
|
end
|
47
47
|
|
48
48
|
AgentClient.with_vm_credentials_and_agent_id(instance.credentials, instance.agent_id)
|
@@ -12,10 +12,11 @@ module Bosh::Director
|
|
12
12
|
property.save
|
13
13
|
|
14
14
|
rescue Sequel::ValidationFailed => e
|
15
|
-
|
15
|
+
|
16
|
+
if e.errors[[:name, :deployment_id]] && e.errors[[:name, :deployment_id]].include?(:unique)
|
16
17
|
raise PropertyAlreadyExists,
|
17
|
-
"Property
|
18
|
-
"for deployment
|
18
|
+
"Property '#{property_name}' already exists " +
|
19
|
+
"for deployment '#{deployment.name}'"
|
19
20
|
end
|
20
21
|
invalid_property(e.errors)
|
21
22
|
end
|
@@ -38,8 +39,8 @@ module Bosh::Director
|
|
38
39
|
property = Models::DeploymentProperty.find(filters)
|
39
40
|
if property.nil?
|
40
41
|
raise PropertyNotFound,
|
41
|
-
"Property
|
42
|
-
"for deployment
|
42
|
+
"Property '#{property_name}' not found " +
|
43
|
+
"for deployment '#{deployment.name}'"
|
43
44
|
end
|
44
45
|
property
|
45
46
|
end
|
@@ -4,7 +4,7 @@ module Bosh::Director
|
|
4
4
|
include ApiHelper
|
5
5
|
|
6
6
|
def get_all_releases
|
7
|
-
releases = Models::Release.order_by(:name
|
7
|
+
releases = Models::Release.order_by(Sequel.asc(:name)).map do |release|
|
8
8
|
release_versions = sorted_release_versions(release)
|
9
9
|
{
|
10
10
|
'name' => release.name,
|
@@ -39,7 +39,7 @@ module Bosh::Director
|
|
39
39
|
def find_by_name(name)
|
40
40
|
release = Models::Release[:name => name]
|
41
41
|
if release.nil?
|
42
|
-
raise ReleaseNotFound, "Release
|
42
|
+
raise ReleaseNotFound, "Release '#{name}' doesn't exist"
|
43
43
|
end
|
44
44
|
release
|
45
45
|
end
|
@@ -64,7 +64,7 @@ module Bosh::Director
|
|
64
64
|
end
|
65
65
|
if release_version.nil?
|
66
66
|
raise ReleaseVersionNotFound,
|
67
|
-
"Release version
|
67
|
+
"Release version '#{release.name}/#{version}' doesn't exist"
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -76,9 +76,9 @@ module Bosh::Director
|
|
76
76
|
def blobstore_resource(id)
|
77
77
|
yield @blobstore_client
|
78
78
|
rescue Bosh::Blobstore::NotFound
|
79
|
-
raise ResourceNotFound, "Resource
|
79
|
+
raise ResourceNotFound, "Resource '#{id}' not found in the blobstore"
|
80
80
|
rescue Bosh::Blobstore::BlobstoreError => e
|
81
|
-
raise ResourceError, "Blobstore error accessing resource
|
81
|
+
raise ResourceError, "Blobstore error accessing resource '#{id}': #{e}"
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -30,6 +30,7 @@ module Bosh
|
|
30
30
|
controllers['/task'] = Bosh::Director::Api::Controllers::TaskController.new(@config)
|
31
31
|
controllers['/tasks'] = Bosh::Director::Api::Controllers::TasksController.new(@config)
|
32
32
|
controllers['/users'] = Bosh::Director::Api::Controllers::UsersController.new(@config)
|
33
|
+
controllers['/events'] = Bosh::Director::Api::Controllers::EventsController.new(@config)
|
33
34
|
controllers
|
34
35
|
end
|
35
36
|
end
|
@@ -10,13 +10,13 @@ module Bosh::Director
|
|
10
10
|
stemcell = Models::Stemcell[:name => name, :version => version]
|
11
11
|
if stemcell.nil?
|
12
12
|
raise StemcellNotFound,
|
13
|
-
"Stemcell
|
13
|
+
"Stemcell '#{name}/#{version}' doesn't exist"
|
14
14
|
end
|
15
15
|
stemcell
|
16
16
|
end
|
17
17
|
|
18
18
|
def find_all_stemcells
|
19
|
-
Models::Stemcell.order_by(:name
|
19
|
+
Models::Stemcell.order_by(Sequel.asc(:name)).map do |stemcell|
|
20
20
|
{
|
21
21
|
'name' => stemcell.name,
|
22
22
|
'operating_system' => stemcell.operating_system,
|
@@ -32,7 +32,7 @@ module Bosh::Director
|
|
32
32
|
|
33
33
|
if stemcells.nil? || stemcells.empty?
|
34
34
|
raise StemcellNotFound,
|
35
|
-
"Stemcell with Operating System
|
35
|
+
"Stemcell with Operating System '#{os}' doesn't exist"
|
36
36
|
end
|
37
37
|
|
38
38
|
find_latest(stemcells)
|
@@ -43,7 +43,7 @@ module Bosh::Director
|
|
43
43
|
|
44
44
|
if stemcells.nil? || stemcells.empty?
|
45
45
|
raise StemcellNotFound,
|
46
|
-
"Stemcell
|
46
|
+
"Stemcell '#{name}' doesn't exist"
|
47
47
|
end
|
48
48
|
|
49
49
|
find_latest(stemcells)
|
@@ -54,7 +54,7 @@ module Bosh::Director
|
|
54
54
|
dataset.order(:name)[:operating_system => os, :version => version]
|
55
55
|
if stemcell.nil?
|
56
56
|
raise StemcellNotFound,
|
57
|
-
"Stemcell version
|
57
|
+
"Stemcell version '#{version}' for OS '#{os}' doesn't exist"
|
58
58
|
end
|
59
59
|
stemcell
|
60
60
|
end
|
@@ -24,6 +24,7 @@ module Bosh::Director
|
|
24
24
|
"state" => task.state,
|
25
25
|
"description" => task.description,
|
26
26
|
"timestamp" => task.timestamp.to_i,
|
27
|
+
"started_at" => task.started_at ? task.started_at.to_i: nil,
|
27
28
|
"result" => task.result,
|
28
29
|
"user" => task.username || "admin",
|
29
30
|
"deployment" => task.deployment_name
|
@@ -14,7 +14,7 @@ module Bosh::Director::Api
|
|
14
14
|
private
|
15
15
|
def removal_candidates_dataset(type)
|
16
16
|
Bosh::Director::Models::Task.filter("state NOT IN ('processing', 'queued') and type='#{type}'").
|
17
|
-
order{
|
17
|
+
order{Sequel.desc(:id)}.limit(2, @max_tasks)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -52,10 +52,18 @@ module Bosh
|
|
52
52
|
@token = token
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
55
|
+
def username_or_client
|
56
56
|
@token['user_name'] || @token['client_id']
|
57
57
|
end
|
58
58
|
|
59
|
+
def client
|
60
|
+
@token['client_id']
|
61
|
+
end
|
62
|
+
|
63
|
+
def username
|
64
|
+
@token['user_name']
|
65
|
+
end
|
66
|
+
|
59
67
|
def scopes
|
60
68
|
@token['scope']
|
61
69
|
end
|
data/lib/bosh/director/app.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Bosh::Director
|
2
|
+
class ArpFlusher
|
3
|
+
def delete_arp_entries(vm_cid_to_exclude, ip_addresses)
|
4
|
+
filtered_instances = filter_instances(vm_cid_to_exclude)
|
5
|
+
|
6
|
+
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
7
|
+
filtered_instances.each do |instance|
|
8
|
+
pool.process do
|
9
|
+
agent = AgentClient.with_vm_credentials_and_agent_id(instance.credentials, instance.agent_id)
|
10
|
+
agent.delete_arp_entries(ips: ip_addresses)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def filter_instances(vm_cid_to_exclude)
|
17
|
+
Models::Instance
|
18
|
+
.exclude(vm_cid: nil)
|
19
|
+
.exclude(vm_cid: vm_cid_to_exclude)
|
20
|
+
.exclude(compilation: true).all
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -51,7 +51,7 @@ module Bosh::Director
|
|
51
51
|
# One situation where this handler is actually useful is when
|
52
52
|
# VM has already been deleted but something failed after that
|
53
53
|
# and it is still referenced in DB. In that case it makes sense
|
54
|
-
# to ignore "VM not found" errors in `delete_vm
|
54
|
+
# to ignore "VM not found" errors in `delete_vm` and let the method
|
55
55
|
# proceed creating a new VM. Other errors are not forgiven.
|
56
56
|
|
57
57
|
@logger.warn("VM '#{instance_model.vm_cid}' might have already been deleted from the cloud")
|
@@ -148,7 +148,7 @@ module Bosh::Director
|
|
148
148
|
def agent_timeout_guard(vm_cid, vm_credentials, agent_id, &block)
|
149
149
|
yield agent_client(vm_credentials, agent_id)
|
150
150
|
rescue Bosh::Director::RpcTimeout
|
151
|
-
handler_error("VM
|
151
|
+
handler_error("VM '#{vm_cid}' is not responding")
|
152
152
|
end
|
153
153
|
|
154
154
|
def vm_deleter
|
@@ -157,8 +157,9 @@ module Bosh::Director
|
|
157
157
|
|
158
158
|
def vm_creator
|
159
159
|
disk_manager = DiskManager.new(cloud, @logger)
|
160
|
+
arp_flusher = ArpFlusher.new
|
160
161
|
job_renderer = JobRenderer.create
|
161
|
-
@vm_creator ||= VmCreator.new(cloud, @logger, vm_deleter, disk_manager, job_renderer)
|
162
|
+
@vm_creator ||= VmCreator.new(cloud, @logger, vm_deleter, disk_manager, job_renderer, arp_flusher)
|
162
163
|
end
|
163
164
|
|
164
165
|
def validate_spec(spec)
|
@@ -114,8 +114,8 @@ module Bosh::Director
|
|
114
114
|
unless dep_task.compiled?
|
115
115
|
raise DirectorError,
|
116
116
|
"Cannot generate package dependency spec " +
|
117
|
-
"for
|
118
|
-
"
|
117
|
+
"for '#{@package.name}', " +
|
118
|
+
"'#{dep_task.package.name}' hasn't been compiled yet"
|
119
119
|
end
|
120
120
|
|
121
121
|
compiled_package = dep_task.compiled_package
|
@@ -133,7 +133,7 @@ module Bosh::Director
|
|
133
133
|
|
134
134
|
# @param [CompileTask] task
|
135
135
|
# @return [Models::CompiledPackage]
|
136
|
-
def find_compiled_package(logger,
|
136
|
+
def find_compiled_package(logger, event_log_stage)
|
137
137
|
# if `package` has source associated with it (blobstore_id and sha1)
|
138
138
|
# then we need an exact match in find_compiled_package
|
139
139
|
|
@@ -153,7 +153,7 @@ module Bosh::Director
|
|
153
153
|
if compiled_package
|
154
154
|
logger.info("Found compiled version of package '#{package.desc}' for stemcell '#{stemcell.desc}'")
|
155
155
|
else
|
156
|
-
compiled_package = fetch_from_global_cache(logger,
|
156
|
+
compiled_package = fetch_from_global_cache(logger, event_log_stage)
|
157
157
|
end
|
158
158
|
|
159
159
|
logger.info("Package '#{package.desc}' needs to be compiled on '#{stemcell.desc}'") if compiled_package.nil?
|
@@ -184,9 +184,9 @@ module Bosh::Director
|
|
184
184
|
compiled_package
|
185
185
|
end
|
186
186
|
|
187
|
-
def fetch_from_global_cache(logger,
|
187
|
+
def fetch_from_global_cache(logger, event_log_stage)
|
188
188
|
if Config.use_compiled_package_cache? && BlobUtil.exists_in_global_cache?(package, cache_key)
|
189
|
-
|
189
|
+
event_log_stage.advance_and_track("Downloading '#{package.desc}' from global cache") do
|
190
190
|
# has side effect of putting CompiledPackage model in db
|
191
191
|
logger.info("Found compiled version of package '#{package.desc}' for stemcell '#{stemcell.desc}' in global cache")
|
192
192
|
return BlobUtil.fetch_from_global_cache(package, stemcell.model, cache_key, dependency_key)
|
@@ -2,9 +2,9 @@ require 'bosh/director'
|
|
2
2
|
|
3
3
|
module Bosh::Director
|
4
4
|
class CompileTaskGenerator
|
5
|
-
def initialize(logger,
|
5
|
+
def initialize(logger, event_log_stage)
|
6
6
|
@logger = logger
|
7
|
-
@
|
7
|
+
@event_log_stage = event_log_stage
|
8
8
|
end
|
9
9
|
|
10
10
|
# The compile_tasks hash passed in by the caller will be populated with CompileTasks objects
|
@@ -13,7 +13,7 @@ module Bosh::Director
|
|
13
13
|
# has no cycles: this is being enforced on release upload.
|
14
14
|
# Other than that it's a vanilla Depth-First Search (DFS).
|
15
15
|
|
16
|
-
@logger.info("Checking whether package
|
16
|
+
@logger.info("Checking whether package '#{package.desc}' needs to be compiled for stemcell '#{stemcell.model.desc}'")
|
17
17
|
task_key = [package.id, stemcell.id]
|
18
18
|
task = compile_tasks[task_key]
|
19
19
|
|
@@ -30,15 +30,15 @@ module Bosh::Director
|
|
30
30
|
|
31
31
|
task = CompileTask.new(package, stemcell, job, package_dependency_key, package_cache_key)
|
32
32
|
|
33
|
-
compiled_package = task.find_compiled_package(@logger, @
|
33
|
+
compiled_package = task.find_compiled_package(@logger, @event_log_stage)
|
34
34
|
if compiled_package
|
35
35
|
task.use_compiled_package(compiled_package)
|
36
36
|
end
|
37
37
|
|
38
|
-
@logger.info("Processing package
|
38
|
+
@logger.info("Processing package '#{package.desc}' dependencies")
|
39
39
|
dependencies = package_dependency_manager.dependencies(package)
|
40
40
|
dependencies.each do |dependency|
|
41
|
-
@logger.info("Package
|
41
|
+
@logger.info("Package '#{package.desc}' depends on package '#{dependency.desc}'")
|
42
42
|
dependency_task = generate!(compile_tasks, job, template, dependency, stemcell)
|
43
43
|
task.add_dependency(dependency_task)
|
44
44
|
end
|
@@ -17,11 +17,11 @@ module Bosh::Director
|
|
17
17
|
FileUtils.mkpath(path)
|
18
18
|
|
19
19
|
compiled_packages = @compiled_packages_group.compiled_packages
|
20
|
-
event_log.begin_stage("copying packages", compiled_packages.count)
|
20
|
+
event_log_stage = event_log.begin_stage("copying packages", compiled_packages.count)
|
21
21
|
|
22
22
|
compiled_packages.each do |compiled_package|
|
23
23
|
desc = "#{compiled_package.package.name}/#{compiled_package.package.version}"
|
24
|
-
|
24
|
+
event_log_stage.advance_and_track(desc) do
|
25
25
|
blobstore_id = compiled_package.blobstore_id
|
26
26
|
File.open(File.join(path, "#{compiled_package.package.name}.tgz"), 'w') do |f|
|
27
27
|
@blobstore_client.get(blobstore_id, f, sha1: compiled_package.sha1)
|
@@ -32,10 +32,10 @@ module Bosh::Director
|
|
32
32
|
path = File.join(@download_dir, 'jobs')
|
33
33
|
FileUtils.mkpath(path)
|
34
34
|
|
35
|
-
event_log.begin_stage("copying jobs", @templates.count)
|
35
|
+
event_log_stage = event_log.begin_stage("copying jobs", @templates.count)
|
36
36
|
@templates.each do |template|
|
37
37
|
desc = "#{template.name}/#{template.version}"
|
38
|
-
|
38
|
+
event_log_stage.advance_and_track(desc) do
|
39
39
|
blobstore_id = template.blobstore_id
|
40
40
|
File.open(File.join(path, "#{template.name}.tgz"), 'w') do |f|
|
41
41
|
@blobstore_client.get(blobstore_id, f, sha1: template.sha1)
|
data/lib/bosh/director/config.rb
CHANGED
@@ -31,6 +31,7 @@ module Bosh::Director
|
|
31
31
|
:fix_stateful_nodes,
|
32
32
|
:enable_snapshots,
|
33
33
|
:max_vm_create_tries,
|
34
|
+
:flush_arp,
|
34
35
|
:nats_uri,
|
35
36
|
:default_ssh_options,
|
36
37
|
:keep_unreachable_vms,
|
@@ -41,8 +42,8 @@ module Bosh::Director
|
|
41
42
|
|
42
43
|
attr_reader(
|
43
44
|
:db_config,
|
44
|
-
:
|
45
|
-
:
|
45
|
+
:ignore_missing_gateway,
|
46
|
+
:record_events,
|
46
47
|
)
|
47
48
|
|
48
49
|
def clear
|
@@ -67,6 +68,7 @@ module Bosh::Director
|
|
67
68
|
|
68
69
|
def configure(config)
|
69
70
|
@max_vm_create_tries = Integer(config.fetch('max_vm_create_tries', 5))
|
71
|
+
@flush_arp = config.fetch('flush_arp', false)
|
70
72
|
|
71
73
|
@base_dir = config['dir']
|
72
74
|
FileUtils.mkdir_p(@base_dir)
|
@@ -94,13 +96,6 @@ module Bosh::Director
|
|
94
96
|
@logger.add_appenders(shared_appender)
|
95
97
|
@logger.level = Logging.levelify(logging_config.fetch('level', 'debug'))
|
96
98
|
|
97
|
-
# use a separate logger with the same appender to avoid multiple file writers
|
98
|
-
redis_logger = Logging::Logger.new('DirectorRedis')
|
99
|
-
redis_logger.add_appenders(shared_appender)
|
100
|
-
logging_config = config.fetch('redis', {}).fetch('logging', {})
|
101
|
-
@redis_logger_level = Logging.levelify(logging_config.fetch('level', 'info'))
|
102
|
-
redis_logger.level = @redis_logger_level
|
103
|
-
|
104
99
|
# Event logger supposed to be overridden per task,
|
105
100
|
# the default one does nothing
|
106
101
|
@event_log = EventLog::Log.new
|
@@ -110,13 +105,6 @@ module Bosh::Director
|
|
110
105
|
|
111
106
|
@max_threads = config.fetch('max_threads', 32).to_i
|
112
107
|
|
113
|
-
self.redis_options = {
|
114
|
-
:host => config['redis']['host'],
|
115
|
-
:port => config['redis']['port'],
|
116
|
-
:password => config['redis']['password'],
|
117
|
-
:logger => redis_logger
|
118
|
-
}
|
119
|
-
|
120
108
|
@revision = get_revision
|
121
109
|
|
122
110
|
@logger.info("Starting BOSH Director: #{VERSION} (#{@revision})")
|
@@ -169,6 +157,7 @@ module Bosh::Director
|
|
169
157
|
@enable_post_deploy = config.fetch('enable_post_deploy', false)
|
170
158
|
@generate_vm_passwords = config.fetch('generate_vm_passwords', false)
|
171
159
|
@remove_dev_tools = config['remove_dev_tools']
|
160
|
+
@record_events = config.fetch('record_events', false)
|
172
161
|
|
173
162
|
Bosh::Clouds::Config.configure(self)
|
174
163
|
|
@@ -192,13 +181,13 @@ module Bosh::Director
|
|
192
181
|
end
|
193
182
|
|
194
183
|
def configure_db(db_config)
|
195
|
-
|
184
|
+
connection_config = db_config.dup
|
185
|
+
connection_options = connection_config.delete('connection_options') {{}}
|
186
|
+
connection_config.delete_if { |_, v| v.to_s.empty? }
|
187
|
+
connection_config = connection_config.merge(connection_options)
|
196
188
|
|
197
|
-
|
198
|
-
|
199
|
-
db_config = db_config.merge(connection_options)
|
200
|
-
|
201
|
-
db = Sequel.connect(db_config)
|
189
|
+
Sequel.default_timezone = :utc
|
190
|
+
db = Sequel.connect(connection_config)
|
202
191
|
|
203
192
|
Bosh::Common.retryable(sleep: 0.5, tries: 20, on: [Exception]) do
|
204
193
|
db.extension :connection_validator
|
@@ -254,18 +243,6 @@ module Bosh::Director
|
|
254
243
|
|
255
244
|
alias_method :task_checkpoint, :job_cancelled?
|
256
245
|
|
257
|
-
def redis_options
|
258
|
-
@redis_options ||= {}
|
259
|
-
end
|
260
|
-
|
261
|
-
def redis_logger_level
|
262
|
-
@redis_logger_level || Logger::INFO
|
263
|
-
end
|
264
|
-
|
265
|
-
def redis_options=(options)
|
266
|
-
@redis_options = options
|
267
|
-
end
|
268
|
-
|
269
246
|
def cloud_options=(options)
|
270
247
|
@lock.synchronize do
|
271
248
|
@cloud_options = options
|
@@ -285,22 +262,6 @@ module Bosh::Director
|
|
285
262
|
@nats_rpc
|
286
263
|
end
|
287
264
|
|
288
|
-
def redis
|
289
|
-
threaded[:redis] ||= Redis.new(redis_options)
|
290
|
-
end
|
291
|
-
|
292
|
-
def redis_logger=(logger)
|
293
|
-
if redis?
|
294
|
-
redis.client.logger = logger
|
295
|
-
else
|
296
|
-
redis_options[:logger] = logger
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
def redis?
|
301
|
-
!threaded[:redis].nil?
|
302
|
-
end
|
303
|
-
|
304
265
|
def encryption?
|
305
266
|
@encryption
|
306
267
|
end
|
@@ -328,38 +289,6 @@ module Bosh::Director
|
|
328
289
|
temp_dir
|
329
290
|
end
|
330
291
|
|
331
|
-
def patch_sqlite
|
332
|
-
return if @patched_sqlite
|
333
|
-
@patched_sqlite = true
|
334
|
-
|
335
|
-
require 'sequel'
|
336
|
-
require 'sequel/adapters/sqlite'
|
337
|
-
|
338
|
-
Sequel::SQLite::Database.class_eval do
|
339
|
-
def connect(server)
|
340
|
-
opts = server_opts(server)
|
341
|
-
opts[:database] = ':memory:' if blank_object?(opts[:database])
|
342
|
-
db = ::SQLite3::Database.new(opts[:database])
|
343
|
-
db.busy_handler do |retries|
|
344
|
-
Bosh::Director::Config.logger.debug "SQLITE BUSY, retry ##{retries}"
|
345
|
-
sleep(0.1)
|
346
|
-
retries < 20
|
347
|
-
end
|
348
|
-
|
349
|
-
connection_pragmas.each { |s| log_yield(s) { db.execute_batch(s) } }
|
350
|
-
|
351
|
-
class << db
|
352
|
-
attr_reader :prepared_statements
|
353
|
-
end
|
354
|
-
db.instance_variable_set(:@prepared_statements, {})
|
355
|
-
|
356
|
-
db
|
357
|
-
end
|
358
|
-
end
|
359
|
-
end
|
360
|
-
|
361
|
-
# Migrates director UUID to database
|
362
|
-
# Currently used by integration tests to set director UUID
|
363
292
|
def override_uuid
|
364
293
|
new_uuid = nil
|
365
294
|
state_file = File.join(base_dir, 'state.json')
|
@@ -440,18 +369,23 @@ module Bosh::Director
|
|
440
369
|
end
|
441
370
|
end
|
442
371
|
|
443
|
-
def
|
372
|
+
def worker_logger
|
444
373
|
logger = Logging::Logger.new('DirectorWorker')
|
445
|
-
|
446
|
-
|
447
|
-
|
374
|
+
logging_config = hash.fetch('logging', {})
|
375
|
+
worker_logging = hash.fetch('delayed_job', {}).fetch('logging', {})
|
376
|
+
if worker_logging.has_key?('file')
|
377
|
+
logger.add_appenders(Logging.appenders.file('DirectorWorkerFile', filename: worker_logging.fetch('file'), layout: ThreadFormatter.layout))
|
448
378
|
else
|
449
379
|
logger.add_appenders(Logging.appenders.stdout('DirectorWorkerIO', layout: ThreadFormatter.layout))
|
450
380
|
end
|
451
|
-
logger.level = Logging.levelify(
|
381
|
+
logger.level = Logging.levelify(logging_config.fetch('level', 'debug'))
|
452
382
|
logger
|
453
383
|
end
|
454
384
|
|
385
|
+
def db
|
386
|
+
Config.configure_db(hash['db'])
|
387
|
+
end
|
388
|
+
|
455
389
|
def blobstore_config
|
456
390
|
hash.fetch('blobstore')
|
457
391
|
end
|
@@ -460,6 +394,10 @@ module Bosh::Director
|
|
460
394
|
hash['backup_destination']
|
461
395
|
end
|
462
396
|
|
397
|
+
def log_access_events_to_syslog
|
398
|
+
hash['log_access_events_to_syslog']
|
399
|
+
end
|
400
|
+
|
463
401
|
def configure_evil_config_singleton!
|
464
402
|
Config.configure(hash)
|
465
403
|
end
|
@@ -468,6 +406,10 @@ module Bosh::Director
|
|
468
406
|
Bosh::Director::Api::DirectorUUIDProvider.new(Config)
|
469
407
|
end
|
470
408
|
|
409
|
+
def record_events
|
410
|
+
hash.fetch('record_events', false)
|
411
|
+
end
|
412
|
+
|
471
413
|
private
|
472
414
|
|
473
415
|
attr_reader :hash
|