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
@@ -42,7 +42,7 @@ module Bosh::Director
|
|
42
42
|
process['name'] if process['state'] != 'running'
|
43
43
|
end.compact
|
44
44
|
|
45
|
-
error_message = "
|
45
|
+
error_message = "'#{@instance}' is not running after update."
|
46
46
|
error_message += " Review logs for failed jobs: #{failing_jobs.join(", ")}" if !failing_jobs.empty?
|
47
47
|
|
48
48
|
raise AgentJobNotRunning, error_message
|
@@ -53,7 +53,7 @@ module Bosh::Director
|
|
53
53
|
end
|
54
54
|
|
55
55
|
if @instance.state == 'stopped' && current_state['job_state'] == 'running'
|
56
|
-
raise AgentJobNotStopped, "
|
56
|
+
raise AgentJobNotStopped, "'#{@instance}' is still running despite the stop command"
|
57
57
|
end
|
58
58
|
|
59
59
|
@instance.update_state
|
@@ -2,13 +2,15 @@ require 'bosh/director/api/task_helper'
|
|
2
2
|
|
3
3
|
module Bosh::Director
|
4
4
|
|
5
|
-
# Abstracts the
|
5
|
+
# Abstracts the delayed jobs system.
|
6
6
|
|
7
7
|
class JobQueue
|
8
8
|
def enqueue(username, job_class, description, params, deployment_name = nil)
|
9
9
|
task = Api::TaskHelper.new.create_task(username, job_class.job_type, description, deployment_name)
|
10
10
|
|
11
|
-
|
11
|
+
Delayed::Worker.backend = :sequel
|
12
|
+
db_job = Bosh::Director::Jobs::DBJob.new(job_class, task.id, params)
|
13
|
+
Delayed::Job.enqueue db_job
|
12
14
|
|
13
15
|
task
|
14
16
|
end
|
@@ -8,7 +8,7 @@ module Bosh::Director
|
|
8
8
|
def initialize(job_class, task_id)
|
9
9
|
unless job_class.kind_of?(Class) &&
|
10
10
|
job_class <= Jobs::BaseJob
|
11
|
-
raise DirectorError, "Invalid director job class
|
11
|
+
raise DirectorError, "Invalid director job class '#{job_class}'"
|
12
12
|
end
|
13
13
|
|
14
14
|
@task_id = task_id
|
@@ -60,12 +60,6 @@ module Bosh::Director
|
|
60
60
|
Config.result = TaskResultFile.new(result_log)
|
61
61
|
Config.logger = @task_logger
|
62
62
|
|
63
|
-
# use a separate logger with the same appender to avoid multiple file writers
|
64
|
-
redis_task_logger = Logging::Logger.new('DirectorJobRunnerRedis')
|
65
|
-
redis_task_logger.add_appenders(shared_appender)
|
66
|
-
redis_task_logger.level = Config.redis_logger_level
|
67
|
-
Config.redis_logger = redis_task_logger
|
68
|
-
|
69
63
|
Config.db.logger = @task_logger
|
70
64
|
Config.dns_db.logger = @task_logger if Config.dns_db
|
71
65
|
|
@@ -93,6 +87,7 @@ module Bosh::Director
|
|
93
87
|
|
94
88
|
@task.state = :processing
|
95
89
|
@task.timestamp = Time.now
|
90
|
+
@task.started_at = Time.now
|
96
91
|
@task.checkpoint_time = Time.now
|
97
92
|
@task.save
|
98
93
|
|
@@ -113,7 +108,7 @@ module Bosh::Director
|
|
113
108
|
|
114
109
|
# Spawns a thread that periodically updates task checkpoint time.
|
115
110
|
# There is no need to kill this thread as job execution lifetime is the
|
116
|
-
# same as
|
111
|
+
# same as worker process lifetime.
|
117
112
|
# @return [Thread] Checkpoint thread
|
118
113
|
def run_checkpointing
|
119
114
|
# task check pointer is scoped to separate class to avoid
|
@@ -19,7 +19,7 @@ module Bosh::Director
|
|
19
19
|
|
20
20
|
def perform
|
21
21
|
Dir.mktmpdir do |tmp_output_dir|
|
22
|
-
|
22
|
+
begin_stage('Backing up director', 4)
|
23
23
|
backup_database("#{tmp_output_dir}/director_db.sql")
|
24
24
|
@tar_gzipper.compress(tmp_output_dir, 'director_db.sql', @backup_file)
|
25
25
|
"Backup created at #{@backup_file}"
|
@@ -20,10 +20,6 @@ module Bosh::Director
|
|
20
20
|
@logger ||= Config.logger
|
21
21
|
end
|
22
22
|
|
23
|
-
def event_log
|
24
|
-
@event_log ||= Config.event_log
|
25
|
-
end
|
26
|
-
|
27
23
|
def result_file
|
28
24
|
@result_file ||= Config.result
|
29
25
|
end
|
@@ -46,12 +42,12 @@ module Bosh::Director
|
|
46
42
|
end
|
47
43
|
|
48
44
|
def begin_stage(stage_name, n_steps)
|
49
|
-
event_log.begin_stage(stage_name, n_steps)
|
45
|
+
@event_log_stage = Config.event_log.begin_stage(stage_name, n_steps)
|
50
46
|
logger.info(stage_name)
|
51
47
|
end
|
52
48
|
|
53
49
|
def track_and_log(task, log = true)
|
54
|
-
|
50
|
+
@event_log_stage.advance_and_track(task) do |ticker|
|
55
51
|
logger.info(task) if log
|
56
52
|
yield ticker if block_given?
|
57
53
|
end
|
@@ -62,6 +58,14 @@ module Bosh::Director
|
|
62
58
|
track_and_log(stage_name, false) { yield }
|
63
59
|
end
|
64
60
|
|
61
|
+
def username
|
62
|
+
@user ||= task_manager.find_task(task_id).username
|
63
|
+
end
|
64
|
+
|
65
|
+
def event_manager
|
66
|
+
@event_manager ||= Api::EventManager.new(Config.record_events)
|
67
|
+
end
|
68
|
+
|
65
69
|
private
|
66
70
|
|
67
71
|
def task_manager
|
@@ -23,14 +23,14 @@ module Bosh::Director
|
|
23
23
|
cloud = Config.cloud
|
24
24
|
blob_deleter = Jobs::Helpers::BlobDeleter.new(blobstore, logger)
|
25
25
|
compiled_package_deleter = Jobs::Helpers::CompiledPackageDeleter.new(blob_deleter, logger)
|
26
|
-
@stemcell_deleter = Jobs::Helpers::StemcellDeleter.new(cloud, compiled_package_deleter, logger
|
26
|
+
@stemcell_deleter = Jobs::Helpers::StemcellDeleter.new(cloud, compiled_package_deleter, logger)
|
27
27
|
@releases_to_delete_picker = Jobs::Helpers::ReleasesToDeletePicker.new(release_manager)
|
28
28
|
@stemcells_to_delete_picker = Jobs::Helpers::StemcellsToDeletePicker.new(@stemcell_manager)
|
29
29
|
package_deleter = Helpers::PackageDeleter.new(compiled_package_deleter, blob_deleter, logger)
|
30
30
|
template_deleter = Helpers::TemplateDeleter.new(blob_deleter, logger)
|
31
|
-
release_deleter = Helpers::ReleaseDeleter.new(package_deleter, template_deleter, event_log, logger)
|
31
|
+
release_deleter = Helpers::ReleaseDeleter.new(package_deleter, template_deleter, Config.event_log, logger)
|
32
32
|
release_version_deleter =
|
33
|
-
Helpers::ReleaseVersionDeleter.new(release_deleter, package_deleter, template_deleter, logger, event_log)
|
33
|
+
Helpers::ReleaseVersionDeleter.new(release_deleter, package_deleter, template_deleter, logger, Config.event_log)
|
34
34
|
@name_version_release_deleter =
|
35
35
|
Helpers::NameVersionReleaseDeleter.new(release_deleter, release_manager, release_version_deleter, logger)
|
36
36
|
end
|
@@ -43,7 +43,7 @@ module Bosh::Director
|
|
43
43
|
end
|
44
44
|
|
45
45
|
unused_release_name_and_version = @releases_to_delete_picker.pick(releases_to_keep)
|
46
|
-
release_stage = event_log.begin_stage('Deleting releases', unused_release_name_and_version.count)
|
46
|
+
release_stage = Config.event_log.begin_stage('Deleting releases', unused_release_name_and_version.count)
|
47
47
|
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
48
48
|
unused_release_name_and_version.each do |name_and_version|
|
49
49
|
pool.process do
|
@@ -59,7 +59,7 @@ module Bosh::Director
|
|
59
59
|
end
|
60
60
|
|
61
61
|
stemcells_to_delete = @stemcells_to_delete_picker.pick(stemcells_to_keep)
|
62
|
-
stemcell_stage = event_log.begin_stage('Deleting stemcells', stemcells_to_delete.count)
|
62
|
+
stemcell_stage = Config.event_log.begin_stage('Deleting stemcells', stemcells_to_delete.count)
|
63
63
|
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
64
64
|
stemcells_to_delete.each do |stemcell|
|
65
65
|
pool.process do
|
@@ -74,7 +74,7 @@ module Bosh::Director
|
|
74
74
|
orphan_disks = []
|
75
75
|
if @config['remove_all']
|
76
76
|
orphan_disks = Models::OrphanDisk.all
|
77
|
-
orphan_disk_stage = event_log.begin_stage('Deleting orphaned disks', orphan_disks.count)
|
77
|
+
orphan_disk_stage = Config.event_log.begin_stage('Deleting orphaned disks', orphan_disks.count)
|
78
78
|
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
79
79
|
orphan_disks.each do |orphan_disk|
|
80
80
|
pool.process do
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Bosh::Director
|
2
|
+
module Jobs
|
3
|
+
class DBJob
|
4
|
+
attr_reader :job_class, :task_id
|
5
|
+
|
6
|
+
def initialize(job_class, task_id, args)
|
7
|
+
unless job_class.kind_of?(Class) &&
|
8
|
+
job_class <= Jobs::BaseJob
|
9
|
+
raise DirectorError, "Invalid director job class `#{job_class}'"
|
10
|
+
end
|
11
|
+
raise DirectorError, "Invalid director job class `#{job_class}'. It should have `perform' method." unless job_class.instance_methods(false).include?(:perform)
|
12
|
+
@job_class = job_class
|
13
|
+
@task_id = task_id
|
14
|
+
@args = args
|
15
|
+
raise DirectorError, "Invalid director job class `#{job_class}'. It should specify queue value." unless queue_name
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform
|
19
|
+
if Models::Task.first(id: @task_id, state: 'queued').nil?
|
20
|
+
raise DirectorError, "Cannot perform job for task #{@task_id} (not in 'queued' state)"
|
21
|
+
end
|
22
|
+
|
23
|
+
process_status = ForkedProcess.run do
|
24
|
+
@job_class.perform(@task_id, *decode(encode(@args)))
|
25
|
+
end
|
26
|
+
|
27
|
+
if process_status.signaled?
|
28
|
+
puts "Task #{@task_id} was terminated, marking as failed"
|
29
|
+
fail_task
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def queue_name
|
34
|
+
@job_class.instance_variable_get(:@queue) ||
|
35
|
+
(@job_class.respond_to?(:queue) and @job_class.queue)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def fail_task
|
41
|
+
Models::Task.first(id: @task_id).update(state: 'error')
|
42
|
+
end
|
43
|
+
|
44
|
+
def encode(object)
|
45
|
+
if MultiJson.respond_to?(:dump) && MultiJson.respond_to?(:load)
|
46
|
+
MultiJson.dump object
|
47
|
+
else
|
48
|
+
MultiJson.encode object
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Given a string, returns a Ruby object.
|
53
|
+
def decode(object)
|
54
|
+
return unless object
|
55
|
+
|
56
|
+
begin
|
57
|
+
if MultiJson.respond_to?(:dump) && MultiJson.respond_to?(:load)
|
58
|
+
MultiJson.load object
|
59
|
+
else
|
60
|
+
MultiJson.decode object
|
61
|
+
end
|
62
|
+
rescue ::MultiJson::DecodeError => e
|
63
|
+
raise DecodeException, e.message, e.backtrace
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class ForkedProcess
|
70
|
+
def self.run
|
71
|
+
pid = Process.fork do
|
72
|
+
EM.run do
|
73
|
+
EM.defer do
|
74
|
+
begin
|
75
|
+
yield
|
76
|
+
ensure
|
77
|
+
EM.stop
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
Process.waitpid(pid)
|
83
|
+
|
84
|
+
$?
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -19,7 +19,7 @@ module Bosh::Director
|
|
19
19
|
|
20
20
|
def perform
|
21
21
|
logger.info("Deleting: #{@deployment_name}")
|
22
|
-
|
22
|
+
parent_id = add_event
|
23
23
|
with_deployment_lock(@deployment_name) do
|
24
24
|
deployment_model = @deployment_manager.find_by_name(@deployment_name)
|
25
25
|
|
@@ -28,13 +28,34 @@ module Bosh::Director
|
|
28
28
|
dns_manager = DnsManagerProvider.create
|
29
29
|
disk_manager = DiskManager.new(@cloud, logger)
|
30
30
|
instance_deleter = InstanceDeleter.new(ip_provider, dns_manager, disk_manager, force: @force)
|
31
|
-
deployment_deleter = DeploymentDeleter.new(event_log, logger, dns_manager, Config.max_threads)
|
31
|
+
deployment_deleter = DeploymentDeleter.new(Config.event_log, logger, dns_manager, Config.max_threads)
|
32
32
|
|
33
33
|
vm_deleter = Bosh::Director::VmDeleter.new(@cloud, logger, force: @force)
|
34
34
|
deployment_deleter.delete(deployment_model, instance_deleter, vm_deleter)
|
35
|
+
add_event(parent_id)
|
35
36
|
|
36
37
|
"/deployments/#{@deployment_name}"
|
37
38
|
end
|
39
|
+
rescue Exception => e
|
40
|
+
add_event(parent_id, e)
|
41
|
+
raise e
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def add_event(parent_id = nil, error = nil)
|
47
|
+
event = event_manager.create_event(
|
48
|
+
{
|
49
|
+
parent_id: parent_id,
|
50
|
+
user: username,
|
51
|
+
action: "delete",
|
52
|
+
object_type: "deployment",
|
53
|
+
object_name: @deployment_name,
|
54
|
+
deployment: @deployment_name,
|
55
|
+
task: task_id,
|
56
|
+
error: error
|
57
|
+
})
|
58
|
+
event.id
|
38
59
|
end
|
39
60
|
end
|
40
61
|
end
|
@@ -25,12 +25,12 @@ module Bosh::Director
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def perform
|
28
|
-
event_log.begin_stage('Deleting orphaned disks', @orphan_disk_cids.count)
|
28
|
+
event_log_stage = Config.event_log.begin_stage('Deleting orphaned disks', @orphan_disk_cids.count)
|
29
29
|
|
30
30
|
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
31
31
|
@orphan_disk_cids.each do |orphan_disk_cid|
|
32
32
|
pool.process do
|
33
|
-
|
33
|
+
event_log_stage.advance_and_track("Deleting orphaned disk #{orphan_disk_cid}") do
|
34
34
|
@disk_manager.delete_orphan_disk_by_disk_cid(orphan_disk_cid)
|
35
35
|
end
|
36
36
|
end
|
@@ -19,9 +19,9 @@ module Bosh::Director
|
|
19
19
|
compiled_package_deleter = Helpers::CompiledPackageDeleter.new(blob_deleter, logger)
|
20
20
|
package_deleter = Helpers::PackageDeleter.new(compiled_package_deleter, blob_deleter, logger)
|
21
21
|
template_deleter = Helpers::TemplateDeleter.new(blob_deleter, logger)
|
22
|
-
release_deleter = Helpers::ReleaseDeleter.new(package_deleter, template_deleter, event_log, logger)
|
22
|
+
release_deleter = Helpers::ReleaseDeleter.new(package_deleter, template_deleter, Config.event_log, logger)
|
23
23
|
release_version_deleter =
|
24
|
-
Helpers::ReleaseVersionDeleter.new(release_deleter, package_deleter, template_deleter, logger, event_log)
|
24
|
+
Helpers::ReleaseVersionDeleter.new(release_deleter, package_deleter, template_deleter, logger, Config.event_log)
|
25
25
|
release_manager = Api::ReleaseManager.new
|
26
26
|
@name_version_release_deleter = Helpers::NameVersionReleaseDeleter.new(release_deleter, release_manager, release_version_deleter, logger)
|
27
27
|
end
|
@@ -17,7 +17,7 @@ module Bosh::Director
|
|
17
17
|
blobstore = options.fetch(:blobstore) { App.instance.blobstores.blobstore }
|
18
18
|
blob_deleter = Helpers::BlobDeleter.new(blobstore, logger)
|
19
19
|
compiled_package_deleter = Helpers::CompiledPackageDeleter.new(blob_deleter, logger)
|
20
|
-
@stemcell_deleter = Helpers::StemcellDeleter.new(@cloud, compiled_package_deleter, logger
|
20
|
+
@stemcell_deleter = Helpers::StemcellDeleter.new(@cloud, compiled_package_deleter, logger)
|
21
21
|
end
|
22
22
|
|
23
23
|
def perform
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'securerandom'
|
2
|
+
require 'common/release/release_directory'
|
2
3
|
require 'common/version/release_version'
|
3
4
|
require 'bosh/director/compiled_release_downloader'
|
4
5
|
require 'bosh/director/compiled_release_manifest'
|
@@ -40,7 +41,7 @@ module Bosh::Director
|
|
40
41
|
release_version_model = release_manager.find_version(release, @release_version)
|
41
42
|
|
42
43
|
unless deployment_manifest_has_release?(targeted_deployment.manifest)
|
43
|
-
raise ReleaseNotMatchingManifest, "Release version
|
44
|
+
raise ReleaseNotMatchingManifest, "Release version '#{@release_name}/#{@release_version}' not found in deployment '#{@deployment_name}' manifest"
|
44
45
|
end
|
45
46
|
|
46
47
|
planner_factory = DeploymentPlan::PlannerFactory.create(logger)
|
@@ -98,7 +99,8 @@ module Bosh::Director
|
|
98
99
|
output_path = File.join(download_dir, "compiled_release_#{Time.now.to_f}.tar.gz")
|
99
100
|
archiver = Core::TarGzipper.new
|
100
101
|
|
101
|
-
|
102
|
+
release_directory = Bosh::Common::Release::ReleaseDirectory.new(download_dir)
|
103
|
+
archiver.compress(download_dir, release_directory.ordered_release_files, output_path)
|
102
104
|
tarball_file = File.open(output_path, 'r')
|
103
105
|
|
104
106
|
oid = blobstore_client.create(tarball_file)
|
@@ -17,7 +17,7 @@ module Bosh::Director
|
|
17
17
|
|
18
18
|
blobstore = options.fetch(:blobstore) { App.instance.blobstores.blobstore }
|
19
19
|
log_bundles_cleaner = LogBundlesCleaner.new(blobstore, 60 * 60 * 24 * 10, logger) # 10 days
|
20
|
-
@logs_fetcher = LogsFetcher.new(
|
20
|
+
@logs_fetcher = LogsFetcher.new(@instance_manager, log_bundles_cleaner, logger)
|
21
21
|
end
|
22
22
|
|
23
23
|
def perform
|
@@ -12,7 +12,7 @@ module Bosh::Director::Jobs
|
|
12
12
|
@blobstore.delete(blobstore_id)
|
13
13
|
return true
|
14
14
|
rescue Exception => e
|
15
|
-
@logger.warn("Could not delete blob with id
|
15
|
+
@logger.warn("Could not delete blob with id '#{blobstore_id}' from blobstore: #{e}\n " + e.backtrace.join("\n"))
|
16
16
|
errors << e
|
17
17
|
end
|
18
18
|
|
@@ -31,16 +31,16 @@ module Bosh::Director::Jobs
|
|
31
31
|
unless deployments.empty?
|
32
32
|
names = deployments.map { |d| d.name }.join(', ')
|
33
33
|
raise Bosh::Director::ReleaseInUse,
|
34
|
-
"Release
|
34
|
+
"Release '#{release.name}' is still in use by: #{names}"
|
35
35
|
end
|
36
36
|
@release_deleter.delete(release, force)
|
37
37
|
end
|
38
38
|
|
39
39
|
def delete_release_version(release, version, force)
|
40
|
-
@logger.info("Looking up release version
|
40
|
+
@logger.info("Looking up release version '#{release.name}/#{version}'")
|
41
41
|
release_version = @release_manager.find_version(release, version)
|
42
42
|
# found version may be different than the requested version, due to version formatting
|
43
|
-
@logger.info("Found release version:
|
43
|
+
@logger.info("Found release version: '#{release.name}/#{release_version.version}'")
|
44
44
|
@release_version_deleter.delete(release_version, release, force)
|
45
45
|
end
|
46
46
|
end
|
@@ -19,7 +19,7 @@ module Bosh::Director::Jobs
|
|
19
19
|
unless deployments.empty?
|
20
20
|
names = deployments.map { |d| d.name }.join(', ')
|
21
21
|
raise Bosh::Director::ReleaseVersionInUse,
|
22
|
-
"ReleaseVersion
|
22
|
+
"ReleaseVersion '#{release.name}/#{release_version.version}' is still in use by: #{names}"
|
23
23
|
end
|
24
24
|
|
25
25
|
delete_release_version(release_version, force)
|
@@ -3,11 +3,10 @@ module Bosh::Director::Jobs
|
|
3
3
|
class StemcellDeleter
|
4
4
|
include Bosh::Director::LockHelper
|
5
5
|
|
6
|
-
def initialize(cloud, compiled_package_deleter, logger
|
6
|
+
def initialize(cloud, compiled_package_deleter, logger)
|
7
7
|
@cloud = cloud
|
8
8
|
@compiled_package_deleter = compiled_package_deleter
|
9
9
|
@logger = logger
|
10
|
-
@event_log = event_log
|
11
10
|
end
|
12
11
|
|
13
12
|
def delete(stemcell, options = {})
|
@@ -17,7 +16,7 @@ module Bosh::Director::Jobs
|
|
17
16
|
unless deployments.empty?
|
18
17
|
names = deployments.map { |d| d.name }.join(', ')
|
19
18
|
raise Bosh::Director::StemcellInUse,
|
20
|
-
"Stemcell
|
19
|
+
"Stemcell '#{stemcell.name}/#{stemcell.version}' is still in use by: #{names}"
|
21
20
|
end
|
22
21
|
|
23
22
|
begin
|
@@ -31,15 +30,6 @@ module Bosh::Director::Jobs
|
|
31
30
|
stemcell.destroy
|
32
31
|
end
|
33
32
|
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def track_and_log(stage, task, log = true)
|
38
|
-
stage.advance_and_track(task) do |ticker|
|
39
|
-
@logger.info(task) if log
|
40
|
-
yield ticker if block_given?
|
41
|
-
end
|
42
|
-
end
|
43
33
|
end
|
44
34
|
end
|
45
35
|
end
|