bosh-director 1.3173.0 → 1.3177.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/db/migrations/director/20151229184742_add_vm_attributes_to_instance.rb +25 -0
- data/db/migrations/director/20160108191637_drop_vm_env_json_from_instance.rb +7 -0
- data/lib/bosh/director/api/controllers/base_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/deployments_controller.rb +1 -1
- data/lib/bosh/director/api/deployment_manager.rb +10 -12
- data/lib/bosh/director/api/instance_manager.rb +5 -6
- data/lib/bosh/director/api/snapshot_manager.rb +1 -2
- data/lib/bosh/director/cloudcheck_helper.rb +30 -52
- data/lib/bosh/director/config.rb +2 -1
- data/lib/bosh/director/deployment_deleter.rb +0 -21
- data/lib/bosh/director/deployment_plan.rb +1 -1
- data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +7 -19
- data/lib/bosh/director/deployment_plan/assembler.rb +6 -30
- data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +2 -4
- data/lib/bosh/director/deployment_plan/dynamic_network.rb +1 -1
- data/lib/bosh/director/deployment_plan/instance.rb +6 -46
- data/lib/bosh/director/deployment_plan/instance_network_reservations.rb +13 -13
- data/lib/bosh/director/deployment_plan/instance_plan.rb +3 -3
- data/lib/bosh/director/deployment_plan/instance_plan_factory.rb +12 -4
- data/lib/bosh/director/deployment_plan/instance_planner.rb +5 -4
- data/lib/bosh/director/deployment_plan/instance_repository.rb +7 -14
- data/lib/bosh/director/deployment_plan/instance_spec.rb +2 -2
- data/lib/bosh/director/deployment_plan/ip_provider/database_ip_repo.rb +7 -7
- data/lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb +6 -3
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +4 -4
- data/lib/bosh/director/deployment_plan/job.rb +0 -7
- data/lib/bosh/director/deployment_plan/job_migrator.rb +3 -2
- data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +1 -1
- data/lib/bosh/director/deployment_plan/network_planner/planner.rb +2 -2
- data/lib/bosh/director/deployment_plan/network_reservation_repository.rb +20 -0
- data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +2 -1
- data/lib/bosh/director/deployment_plan/planner.rb +2 -17
- data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +1 -1
- data/lib/bosh/director/deployment_plan/steps/update_step.rb +1 -21
- data/lib/bosh/director/disk_manager.rb +8 -8
- data/lib/bosh/director/dns/dns_manager.rb +76 -20
- data/lib/bosh/director/errand/job_manager.rb +1 -1
- data/lib/bosh/director/instance_deleter.rb +1 -3
- data/lib/bosh/director/instance_updater.rb +4 -3
- data/lib/bosh/director/job_updater.rb +10 -2
- data/lib/bosh/director/jobs/base_job.rb +1 -1
- data/lib/bosh/director/jobs/cloud_check/scan_and_fix.rb +3 -3
- data/lib/bosh/director/jobs/create_snapshot.rb +1 -1
- data/lib/bosh/director/jobs/delete_deployment.rb +1 -1
- data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
- data/lib/bosh/director/jobs/snapshot_deployment.rb +2 -2
- data/lib/bosh/director/jobs/vm_state.rb +16 -17
- data/lib/bosh/director/models.rb +0 -1
- data/lib/bosh/director/models/deployment.rb +0 -3
- data/lib/bosh/director/models/instance.rb +17 -10
- data/lib/bosh/director/network_reservation.rb +15 -16
- data/lib/bosh/director/problem_handlers/inactive_disk.rb +4 -6
- data/lib/bosh/director/problem_handlers/missing_disk.rb +3 -5
- data/lib/bosh/director/problem_handlers/missing_vm.rb +8 -10
- data/lib/bosh/director/problem_handlers/mount_info_mismatch.rb +8 -3
- data/lib/bosh/director/problem_handlers/unresponsive_agent.rb +14 -29
- data/lib/bosh/director/problem_scanner/disk_scan_stage.rb +1 -4
- data/lib/bosh/director/problem_scanner/problem_register.rb +2 -4
- data/lib/bosh/director/problem_scanner/scanner.rb +1 -1
- data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +17 -35
- data/lib/bosh/director/stopper.rb +2 -2
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director/vm_creator.rb +15 -33
- data/lib/bosh/director/vm_deleter.rb +6 -8
- data/lib/bosh/director/vm_metadata_updater.rb +5 -7
- data/lib/bosh/director/vm_recreator.rb +3 -2
- metadata +19 -18
- data/lib/bosh/director/deployment_plan/vm.rb +0 -22
- data/lib/bosh/director/models/vm.rb +0 -38
@@ -23,7 +23,7 @@ module Bosh::Director
|
|
23
23
|
instances += migrated_from_instances
|
24
24
|
end
|
25
25
|
|
26
|
-
instances
|
26
|
+
instances.uniq
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -33,7 +33,8 @@ module Bosh::Director
|
|
33
33
|
migrated_from_instances = []
|
34
34
|
|
35
35
|
migrated_from_jobs.each do |migrated_from_job|
|
36
|
-
|
36
|
+
existing_job = @deployment_plan.job(migrated_from_job.name)
|
37
|
+
if existing_job && existing_job.name != desired_job.name
|
37
38
|
raise DeploymentInvalidMigratedFromJob,
|
38
39
|
"Failed to migrate job '#{migrated_from_job.name}' to '#{desired_job_name}'. " +
|
39
40
|
'A deployment can not migrate a job and also specify it. ' +
|
@@ -42,7 +42,7 @@ module Bosh::Director
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
dns_manager =
|
45
|
+
dns_manager = DnsManagerProvider.create
|
46
46
|
dns_spec = safe_property(subnet_spec, 'dns', :class => Array, :optional => true)
|
47
47
|
dns = dns_manager.dns_servers(network_name, dns_spec)
|
48
48
|
|
@@ -6,13 +6,13 @@ module Bosh::Director::DeploymentPlan
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def network_plan_with_dynamic_reservation(instance_plan, job_network)
|
9
|
-
reservation = Bosh::Director::DesiredNetworkReservation.new_dynamic(instance_plan.instance, job_network.deployment_network)
|
9
|
+
reservation = Bosh::Director::DesiredNetworkReservation.new_dynamic(instance_plan.instance.model, job_network.deployment_network)
|
10
10
|
@logger.debug("Creating new dynamic reservation #{reservation} for instance '#{instance_plan.instance}'")
|
11
11
|
Plan.new(reservation: reservation)
|
12
12
|
end
|
13
13
|
|
14
14
|
def network_plan_with_static_reservation(instance_plan, job_network, static_ip)
|
15
|
-
reservation = Bosh::Director::DesiredNetworkReservation.new_static(instance_plan.instance, job_network.deployment_network, static_ip)
|
15
|
+
reservation = Bosh::Director::DesiredNetworkReservation.new_static(instance_plan.instance.model, job_network.deployment_network, static_ip)
|
16
16
|
@logger.debug("Creating new static reservation #{reservation} for instance '#{instance_plan.instance}'")
|
17
17
|
Plan.new(reservation: reservation)
|
18
18
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Bosh::Director::DeploymentPlan
|
2
|
+
class NetworkReservationRepository
|
3
|
+
def initialize(deployment_plan, logger)
|
4
|
+
@deployment_plan = deployment_plan
|
5
|
+
@logger = logger
|
6
|
+
end
|
7
|
+
|
8
|
+
def fetch_network_reservations(existing_instance_model, existing_instance_state)
|
9
|
+
if existing_instance_model.ip_addresses.any?
|
10
|
+
InstanceNetworkReservations.create_from_db(existing_instance_model, @deployment_plan, @logger)
|
11
|
+
elsif existing_instance_state
|
12
|
+
# This is for backwards compatibility when we did not store
|
13
|
+
# network reservations in DB and constructed them from instance state
|
14
|
+
InstanceNetworkReservations.create_from_state(existing_instance_model, existing_instance_state, @deployment_plan, @logger)
|
15
|
+
else
|
16
|
+
InstanceNetworkReservations.new(@logger)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb
CHANGED
@@ -202,7 +202,8 @@ module Bosh
|
|
202
202
|
|
203
203
|
def create_existing_instance_plan(desired_instance, existing_instance_model)
|
204
204
|
if desired_instance.nil?
|
205
|
-
|
205
|
+
# potentially a code path that never happens. It had been sending 2 for 1 which should have EXPLODED!!!
|
206
|
+
@instance_plan_factory.obsolete_instance_plan(existing_instance_model)
|
206
207
|
else
|
207
208
|
@instance_plan_factory.desired_existing_instance_plan(existing_instance_model, desired_instance)
|
208
209
|
end
|
@@ -43,9 +43,6 @@ module Bosh::Director
|
|
43
43
|
# Job instances from the old manifest that are not in the new manifest
|
44
44
|
attr_reader :unneeded_instances
|
45
45
|
|
46
|
-
# VMs from the old manifest that are not in the new manifest
|
47
|
-
attr_accessor :unneeded_vms
|
48
|
-
|
49
46
|
# @return [Boolean] Indicates whether VMs should be recreated
|
50
47
|
attr_reader :recreate
|
51
48
|
|
@@ -103,7 +100,7 @@ module Bosh::Director
|
|
103
100
|
|
104
101
|
def bind_models
|
105
102
|
stemcell_manager = Api::StemcellManager.new
|
106
|
-
dns_manager =
|
103
|
+
dns_manager = DnsManagerProvider.create
|
107
104
|
assembler = DeploymentPlan::Assembler.new(
|
108
105
|
self,
|
109
106
|
stemcell_manager,
|
@@ -123,7 +120,7 @@ module Bosh::Director
|
|
123
120
|
disk_manager = DiskManager.new(cloud, @logger)
|
124
121
|
job_renderer = JobRenderer.create
|
125
122
|
vm_creator = Bosh::Director::VmCreator.new(cloud, @logger, vm_deleter, disk_manager, job_renderer)
|
126
|
-
dns_manager =
|
123
|
+
dns_manager = DnsManagerProvider.create
|
127
124
|
instance_deleter = Bosh::Director::InstanceDeleter.new(ip_provider, dns_manager, disk_manager)
|
128
125
|
compilation_instance_pool = CompilationInstancePool.new(InstanceReuser.new, vm_creator, self, @logger, instance_deleter)
|
129
126
|
package_compile_step = DeploymentPlan::Steps::PackageCompileStep.new(
|
@@ -157,12 +154,6 @@ module Bosh::Director
|
|
157
154
|
end
|
158
155
|
end
|
159
156
|
|
160
|
-
# Returns a list of Vms in the deployment (according to DB)
|
161
|
-
# @return [Array<Models::Vm>]
|
162
|
-
def vm_models
|
163
|
-
@model.vms
|
164
|
-
end
|
165
|
-
|
166
157
|
def skip_drain_for_job?(name)
|
167
158
|
@skip_drain.nil? ? false : @skip_drain.for_job(name)
|
168
159
|
end
|
@@ -197,12 +188,6 @@ module Bosh::Director
|
|
197
188
|
@releases[name]
|
198
189
|
end
|
199
190
|
|
200
|
-
# Adds a VM to deletion queue
|
201
|
-
# @param [Bosh::Director::Models::Vm] vm VM DB model
|
202
|
-
def mark_vm_for_deletion(vm)
|
203
|
-
@unneeded_vms << vm
|
204
|
-
end
|
205
|
-
|
206
191
|
def instance_plans_with_missing_vms
|
207
192
|
jobs_starting_on_deploy.collect_concat do |job|
|
208
193
|
job.instance_plans_with_missing_vms
|
@@ -67,7 +67,7 @@ module Bosh::Director
|
|
67
67
|
task_result = nil
|
68
68
|
|
69
69
|
prepare_vm(stemcell) do |instance|
|
70
|
-
vm_metadata_updater.update(instance.
|
70
|
+
vm_metadata_updater.update(instance.model, :compiling => package.name)
|
71
71
|
agent_task =
|
72
72
|
instance.agent_client.compile_package(
|
73
73
|
package.blobstore_id,
|
@@ -31,9 +31,6 @@ module Bosh::Director
|
|
31
31
|
private
|
32
32
|
|
33
33
|
def assemble
|
34
|
-
@logger.info('Deleting no longer needed VMs')
|
35
|
-
delete_unneeded_vms
|
36
|
-
|
37
34
|
@logger.info('Deleting no longer needed instances')
|
38
35
|
delete_unneeded_instances
|
39
36
|
|
@@ -53,23 +50,6 @@ module Bosh::Director
|
|
53
50
|
)
|
54
51
|
end
|
55
52
|
|
56
|
-
def delete_unneeded_vms
|
57
|
-
unneeded_vms = @deployment_plan.unneeded_vms
|
58
|
-
return @logger.info('No unneeded vms to delete') if unneeded_vms.empty?
|
59
|
-
|
60
|
-
@event_log.begin_stage('Deleting unneeded VMs', unneeded_vms.size)
|
61
|
-
ThreadPool.new(max_threads: Config.max_threads, logger: @logger).wrap do |pool|
|
62
|
-
unneeded_vms.each do |vm_model|
|
63
|
-
pool.process do
|
64
|
-
@event_log.track(vm_model.cid) do
|
65
|
-
@logger.info("Delete unneeded VM #{vm_model.cid}")
|
66
|
-
@vm_deleter.delete_vm(vm_model)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
53
|
def delete_unneeded_instances
|
74
54
|
unneeded_instances = @deployment_plan.unneeded_instances
|
75
55
|
if unneeded_instances.empty?
|
@@ -77,7 +57,7 @@ module Bosh::Director
|
|
77
57
|
return
|
78
58
|
end
|
79
59
|
event_log_stage = @event_log.begin_stage('Deleting unneeded instances', unneeded_instances.size)
|
80
|
-
dns_manager =
|
60
|
+
dns_manager = DnsManagerProvider.create
|
81
61
|
instance_deleter = InstanceDeleter.new(@deployment_plan.ip_provider, dns_manager, @disk_manager)
|
82
62
|
unneeded_instance_plans = unneeded_instances.map do |instance|
|
83
63
|
DeploymentPlan::InstancePlan.new(
|
@@ -39,10 +39,10 @@ module Bosh::Director
|
|
39
39
|
instance = instance_plan.instance
|
40
40
|
disk_cid = instance.model.persistent_disk_cid
|
41
41
|
return @logger.info('Skipping disk attaching') if disk_cid.nil?
|
42
|
-
|
42
|
+
instance_model = instance.model
|
43
43
|
begin
|
44
|
-
@cloud.attach_disk(
|
45
|
-
AgentClient.with_vm_credentials_and_agent_id(
|
44
|
+
@cloud.attach_disk(instance_model.vm_cid, disk_cid)
|
45
|
+
AgentClient.with_vm_credentials_and_agent_id(instance_model.credentials, instance_model.agent_id).mount_disk(disk_cid)
|
46
46
|
rescue => e
|
47
47
|
@logger.warn("Failed to attach disk to new VM: #{e.inspect}")
|
48
48
|
raise e
|
@@ -156,7 +156,7 @@ module Bosh::Director
|
|
156
156
|
|
157
157
|
begin
|
158
158
|
@logger.info("Detaching disk #{disk_cid}")
|
159
|
-
@cloud.detach_disk(instance.model.
|
159
|
+
@cloud.detach_disk(instance.model.vm_cid, disk_cid)
|
160
160
|
rescue Bosh::Clouds::DiskNotAttached
|
161
161
|
if disk.active
|
162
162
|
raise CloudDiskNotAttached,
|
@@ -212,13 +212,13 @@ module Bosh::Director
|
|
212
212
|
end
|
213
213
|
|
214
214
|
def agent(instance)
|
215
|
-
AgentClient.with_vm_credentials_and_agent_id(instance.
|
215
|
+
AgentClient.with_vm_credentials_and_agent_id(instance.model.credentials, instance.model.agent_id)
|
216
216
|
end
|
217
217
|
|
218
218
|
def create_and_attach_disk(instance_plan, vm_recreator)
|
219
219
|
instance = instance_plan.instance
|
220
220
|
disk = create_disk(instance_plan)
|
221
|
-
@cloud.attach_disk(instance.model.
|
221
|
+
@cloud.attach_disk(instance.model.vm_cid, disk.disk_cid)
|
222
222
|
return disk
|
223
223
|
rescue Bosh::Clouds::NoDiskSpace => e
|
224
224
|
if e.ok_to_retry
|
@@ -227,7 +227,7 @@ module Bosh::Director
|
|
227
227
|
unmount_disk_for(instance_plan)
|
228
228
|
vm_recreator.recreate_vm(instance_plan, disk.disk_cid)
|
229
229
|
begin
|
230
|
-
@cloud.attach_disk(instance.model.
|
230
|
+
@cloud.attach_disk(instance.model.vm_cid, disk.disk_cid)
|
231
231
|
rescue
|
232
232
|
orphan_disk(disk)
|
233
233
|
raise
|
@@ -255,7 +255,7 @@ module Bosh::Director
|
|
255
255
|
disk_size = job.persistent_disk_type.disk_size
|
256
256
|
cloud_properties = job.persistent_disk_type.cloud_properties
|
257
257
|
|
258
|
-
disk_cid = @cloud.create_disk(disk_size, cloud_properties, instance_model.
|
258
|
+
disk_cid = @cloud.create_disk(disk_size, cloud_properties, instance_model.vm_cid)
|
259
259
|
Models::PersistentDisk.create(
|
260
260
|
disk_cid: disk_cid,
|
261
261
|
active: false,
|
@@ -1,22 +1,76 @@
|
|
1
1
|
module Bosh::Director
|
2
|
-
class
|
3
|
-
attr_reader :dns_domain_name
|
4
|
-
|
2
|
+
class DnsManagerProvider
|
5
3
|
def self.create
|
6
|
-
dns_config = Config.dns || {}
|
7
4
|
dns_enabled = !!Config.dns_db # to be consistent with current behavior
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
if dns_enabled
|
6
|
+
dns_config = Config.dns || {}
|
7
|
+
logger = Config.logger
|
8
|
+
local_dns_repo = LocalDnsRepo.new(logger)
|
9
|
+
dns_domain_name = Canonicalizer.canonicalize(dns_config.fetch('domain_name', 'bosh'), :allow_dots => true)
|
10
|
+
dns_provider = PowerDns.new(dns_domain_name, logger)
|
11
|
+
|
12
|
+
EnabledDnsManager.new(dns_domain_name, dns_config, dns_provider, local_dns_repo, logger)
|
13
|
+
else
|
14
|
+
DisabledDnsManager.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
class DnsManager
|
22
|
+
def configure_nameserver ; end
|
23
|
+
|
24
|
+
def delete_dns_for_instance(instance_model) ; end
|
25
|
+
|
26
|
+
def dns_record_name(hostname, job_name, network_name, deployment_name) ; end
|
27
|
+
|
28
|
+
# build a list of dns servers to use
|
29
|
+
def dns_servers(network, dns_spec, add_default_dns = true)
|
30
|
+
servers = nil
|
31
|
+
|
32
|
+
if dns_spec
|
33
|
+
servers = []
|
34
|
+
dns_spec.each do |dns|
|
35
|
+
dns = NetAddr::CIDR.create(dns)
|
36
|
+
unless dns.size == 1
|
37
|
+
raise NetworkInvalidDns,
|
38
|
+
"Invalid DNS for network `#{network}': must be a single IP"
|
39
|
+
end
|
40
|
+
|
41
|
+
servers << dns.ip
|
42
|
+
end
|
43
|
+
end
|
12
44
|
|
13
|
-
|
45
|
+
return servers unless add_default_dns
|
46
|
+
add_default_dns_server(servers)
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_dns_record(dns_record_name, ip_address) ; end
|
50
|
+
|
51
|
+
def find_dns_record_names_by_instance(instance_model) ; end
|
52
|
+
|
53
|
+
def flush_dns_cache ; end
|
54
|
+
|
55
|
+
def migrate_legacy_records(instance_model) ; end
|
56
|
+
|
57
|
+
def update_dns_record_for_instance(instance_model, dns_names_to_ip) ; end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def add_default_dns_server(servers)
|
62
|
+
servers
|
14
63
|
end
|
64
|
+
end
|
15
65
|
|
16
|
-
|
66
|
+
public
|
67
|
+
|
68
|
+
class EnabledDnsManager < DnsManager
|
69
|
+
attr_reader :dns_domain_name
|
70
|
+
|
71
|
+
def initialize(dns_domain_name, dns_config, dns_provider, local_dns_repo, logger)
|
17
72
|
@dns_domain_name = dns_domain_name
|
18
73
|
@dns_provider = dns_provider
|
19
|
-
@dns_enabled = dns_enabled
|
20
74
|
@default_server = dns_config['server']
|
21
75
|
@flush_command = dns_config['flush_command']
|
22
76
|
@ip_address = dns_config['address']
|
@@ -25,12 +79,10 @@ module Bosh::Director
|
|
25
79
|
end
|
26
80
|
|
27
81
|
def dns_enabled?
|
28
|
-
|
82
|
+
true
|
29
83
|
end
|
30
84
|
|
31
85
|
def configure_nameserver
|
32
|
-
return unless dns_enabled?
|
33
|
-
|
34
86
|
@dns_provider.create_or_update_nameserver(@ip_address)
|
35
87
|
end
|
36
88
|
|
@@ -55,8 +107,6 @@ module Bosh::Director
|
|
55
107
|
end
|
56
108
|
|
57
109
|
def migrate_legacy_records(instance_model)
|
58
|
-
return unless dns_enabled?
|
59
|
-
|
60
110
|
return if @local_dns_repo.find(instance_model).any?
|
61
111
|
|
62
112
|
index_pattern_for_all_networks = dns_record_name(
|
@@ -81,8 +131,6 @@ module Bosh::Director
|
|
81
131
|
end
|
82
132
|
|
83
133
|
def delete_dns_for_instance(instance_model)
|
84
|
-
return unless dns_enabled?
|
85
|
-
|
86
134
|
current_dns_records = @local_dns_repo.find(instance_model)
|
87
135
|
if current_dns_records.empty?
|
88
136
|
# for backwards compatibility when old instances
|
@@ -150,8 +198,6 @@ module Bosh::Director
|
|
150
198
|
|
151
199
|
# add default dns server to an array of dns servers
|
152
200
|
def add_default_dns_server(servers)
|
153
|
-
return servers unless dns_enabled?
|
154
|
-
|
155
201
|
unless @default_server.to_s.empty? || @default_server == '127.0.0.1'
|
156
202
|
(servers ||= []) << @default_server
|
157
203
|
servers.uniq!
|
@@ -160,4 +206,14 @@ module Bosh::Director
|
|
160
206
|
servers
|
161
207
|
end
|
162
208
|
end
|
209
|
+
|
210
|
+
class DisabledDnsManager < DnsManager
|
211
|
+
def dns_domain_name
|
212
|
+
nil
|
213
|
+
end
|
214
|
+
|
215
|
+
def dns_enabled?
|
216
|
+
false
|
217
|
+
end
|
218
|
+
end
|
163
219
|
end
|
@@ -39,7 +39,7 @@ module Bosh::Director
|
|
39
39
|
|
40
40
|
@logger.info('Deleting errand instances')
|
41
41
|
event_log_stage = @event_log.begin_stage('Deleting errand instances', instance_plans.size, [@job.name])
|
42
|
-
dns_manager =
|
42
|
+
dns_manager = DnsManagerProvider.create
|
43
43
|
instance_deleter = InstanceDeleter.new(@deployment.ip_provider, dns_manager, @disk_manager)
|
44
44
|
instance_deleter.delete_instance_plans(instance_plans, event_log_stage)
|
45
45
|
end
|
@@ -16,15 +16,13 @@ module Bosh::Director
|
|
16
16
|
def delete_instance_plan(instance_plan, event_log_stage)
|
17
17
|
instance_model = instance_plan.new? ? instance_plan.instance.model : instance_plan.existing_instance
|
18
18
|
|
19
|
-
@logger.info("Deleting instance '#{instance_model}'")
|
20
|
-
|
21
19
|
event_log_stage.advance_and_track(instance_model.to_s) do
|
22
20
|
|
23
21
|
error_ignorer.with_force_check do
|
24
22
|
stop(instance_plan)
|
25
23
|
end
|
26
24
|
|
27
|
-
vm_deleter.
|
25
|
+
vm_deleter.delete_for_instance(instance_model)
|
28
26
|
|
29
27
|
unless instance_model.compilation
|
30
28
|
error_ignorer.with_force_check do
|
@@ -12,7 +12,7 @@ module Bosh::Director
|
|
12
12
|
job_renderer = JobRenderer.create
|
13
13
|
vm_creator = VmCreator.new(cloud, logger, vm_deleter, disk_manager, job_renderer)
|
14
14
|
vm_recreator = VmRecreator.new(vm_creator, vm_deleter)
|
15
|
-
dns_manager =
|
15
|
+
dns_manager = DnsManagerProvider.create
|
16
16
|
new(
|
17
17
|
cloud,
|
18
18
|
logger,
|
@@ -63,7 +63,8 @@ module Bosh::Director
|
|
63
63
|
@logger.info("Detaching instance #{instance}")
|
64
64
|
unless instance_plan.currently_detached?
|
65
65
|
@disk_manager.unmount_disk_for(instance_plan)
|
66
|
-
|
66
|
+
instance_model = instance_plan.new? ? instance_plan.instance.model : instance_plan.existing_instance
|
67
|
+
@vm_deleter.delete_for_instance(instance_model)
|
67
68
|
end
|
68
69
|
release_obsolete_ips(instance_plan)
|
69
70
|
instance.update_state
|
@@ -169,7 +170,7 @@ module Bosh::Director
|
|
169
170
|
end
|
170
171
|
|
171
172
|
def agent(instance)
|
172
|
-
AgentClient.with_vm_credentials_and_agent_id(instance.model.
|
173
|
+
AgentClient.with_vm_credentials_and_agent_id(instance.model.credentials, instance.model.agent_id)
|
173
174
|
end
|
174
175
|
end
|
175
176
|
end
|
@@ -41,10 +41,18 @@ module Bosh::Director
|
|
41
41
|
@logger.info("Found #{instance_plans.size} instances to update")
|
42
42
|
event_log_stage = @event_log.begin_stage('Updating job', instance_plans.size, [ @job.name ])
|
43
43
|
|
44
|
+
ordered_azs = []
|
45
|
+
instance_plans.each do | instance_plan |
|
46
|
+
unless ordered_azs.include?(instance_plan.instance.availability_zone)
|
47
|
+
ordered_azs.push(instance_plan.instance.availability_zone)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
44
51
|
instance_plans_by_az = instance_plans.group_by{ |instance_plan| instance_plan.instance.availability_zone }
|
45
52
|
canaries_done = false
|
46
53
|
|
47
|
-
|
54
|
+
ordered_azs.each do | az |
|
55
|
+
az_instance_plans = instance_plans_by_az[az]
|
48
56
|
@logger.info("Starting to update az '#{az}'")
|
49
57
|
ThreadPool.new(:max_threads => @job.update.max_in_flight).wrap do |pool|
|
50
58
|
unless canaries_done
|
@@ -76,7 +84,7 @@ module Bosh::Director
|
|
76
84
|
return if unneeded_instances.empty?
|
77
85
|
|
78
86
|
event_log_stage = @event_log.begin_stage('Deleting unneeded instances', unneeded_instances.size, [@job.name])
|
79
|
-
dns_manager =
|
87
|
+
dns_manager = DnsManagerProvider.create
|
80
88
|
deleter = InstanceDeleter.new(@deployment_plan.ip_provider, dns_manager, @disk_manager)
|
81
89
|
deleter.delete_instance_plans(unneeded_instance_plans, event_log_stage, max_threads: @job.update.max_in_flight)
|
82
90
|
|