bosh-director 1.3160.0 → 1.3163.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-worker +2 -14
- data/db/migrations/director/20150513225143_ip_addresses.rb +11 -0
- data/db/migrations/director/20150702004608_add_links.rb +8 -0
- data/db/migrations/director/20150708231924_add_link_spec.rb +7 -0
- data/db/migrations/director/20150724183256_add_debugging_to_ip_addresses.rb +8 -0
- data/db/migrations/director/20150730225029_add_uuid_to_instances.rb +16 -0
- data/db/migrations/director/20150803215805_add_availabililty_zone_and_cloud_properties_to_instances.rb +8 -0
- data/db/migrations/director/20150804211419_add_compilation_flag_to_instance.rb +7 -0
- data/db/migrations/director/20150918003455_add_bootstrap_node_to_instance.rb +7 -0
- data/db/migrations/director/20151008232214_add_dns_records.rb +7 -0
- data/db/migrations/director/20151015172551_add_orphan_disks_and_snapshots.rb +29 -0
- data/db/migrations/director/20151030222853_add_templates_to_instance.rb +10 -0
- data/db/migrations/director/20151031001039_add_spec_to_instance.rb +19 -0
- data/db/migrations/director/20151109190602_rename_orphan_columns.rb +13 -0
- data/lib/bosh/director.rb +19 -9
- data/lib/bosh/director/agent_client.rb +0 -17
- data/lib/bosh/director/api/cloud_config_manager.rb +7 -5
- data/lib/bosh/director/api/controllers/base_controller.rb +3 -2
- data/lib/bosh/director/api/controllers/cleanup_controller.rb +15 -0
- data/lib/bosh/director/api/controllers/deployments_controller.rb +38 -26
- data/lib/bosh/director/api/controllers/disks_controller.rb +20 -0
- data/lib/bosh/director/api/controllers/info_controller.rb +2 -2
- data/lib/bosh/director/api/controllers/releases_controller.rb +1 -16
- data/lib/bosh/director/api/controllers/stemcells_controller.rb +1 -9
- data/lib/bosh/director/api/deployment_manager.rb +2 -1
- data/lib/bosh/director/api/instance_lookup.rb +17 -0
- data/lib/bosh/director/api/instance_manager.rb +20 -10
- data/lib/bosh/director/api/release_manager.rb +28 -8
- data/lib/bosh/director/api/resurrector_manager.rb +9 -2
- data/lib/bosh/director/api/route_configuration.rb +2 -0
- data/lib/bosh/director/api/snapshot_manager.rb +9 -5
- data/lib/bosh/director/api/stemcell_manager.rb +50 -0
- data/lib/bosh/director/app.rb +1 -1
- data/lib/bosh/director/cloudcheck_helper.rb +119 -132
- data/lib/bosh/director/compile_task.rb +1 -1
- data/lib/bosh/director/compile_task_generator.rb +2 -2
- data/lib/bosh/director/config.rb +21 -12
- data/lib/bosh/director/deployment_deleter.rb +69 -0
- data/lib/bosh/director/deployment_plan.rb +35 -4
- data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +47 -0
- data/lib/bosh/director/deployment_plan/assembler.rb +115 -241
- data/lib/bosh/director/deployment_plan/availability_zone.rb +27 -0
- data/lib/bosh/director/deployment_plan/cloud_manifest_parser.rb +144 -35
- data/lib/bosh/director/deployment_plan/compilation_config.rb +21 -19
- data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +169 -0
- data/lib/bosh/director/deployment_plan/deployment_repo.rb +4 -8
- data/lib/bosh/director/deployment_plan/deployment_spec_parser.rb +13 -1
- data/lib/bosh/director/deployment_plan/deployment_validator.rb +17 -0
- data/lib/bosh/director/deployment_plan/desired_instance.rb +15 -0
- data/lib/bosh/director/deployment_plan/{disk_pool.rb → disk_type.rb} +14 -19
- data/lib/bosh/director/deployment_plan/dynamic_network.rb +105 -53
- data/lib/bosh/director/deployment_plan/dynamic_network_subnet.rb +13 -0
- data/lib/bosh/director/deployment_plan/env.rb +18 -0
- data/lib/bosh/director/deployment_plan/global_network_resolver.rb +77 -0
- data/lib/bosh/director/deployment_plan/instance.rb +222 -390
- data/lib/bosh/director/deployment_plan/instance_network_reservations.rb +71 -0
- data/lib/bosh/director/deployment_plan/instance_plan.rb +336 -0
- data/lib/bosh/director/deployment_plan/instance_plan_factory.rb +54 -0
- data/lib/bosh/director/deployment_plan/instance_plan_sorter.rb +61 -0
- data/lib/bosh/director/deployment_plan/instance_planner.rb +101 -0
- data/lib/bosh/director/deployment_plan/instance_repository.rb +36 -0
- data/lib/bosh/director/deployment_plan/instance_spec.rb +154 -0
- data/lib/bosh/director/deployment_plan/ip_provider/database_ip_repo.rb +136 -0
- data/lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb +81 -0
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +153 -0
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider_factory.rb +22 -0
- data/lib/bosh/director/deployment_plan/job.rb +116 -53
- data/lib/bosh/director/deployment_plan/job_availability_zone_parser.rb +49 -0
- data/lib/bosh/director/deployment_plan/job_migrator.rb +90 -0
- data/lib/bosh/director/deployment_plan/job_network.rb +42 -0
- data/lib/bosh/director/deployment_plan/job_network_parser.rb +118 -0
- data/lib/bosh/director/deployment_plan/job_spec_parser.rb +123 -126
- data/lib/bosh/director/deployment_plan/links/link.rb +30 -0
- data/lib/bosh/director/deployment_plan/links/link_lookup.rb +66 -0
- data/lib/bosh/director/deployment_plan/links/link_path.rb +27 -0
- data/lib/bosh/director/deployment_plan/links/links_resolver.rb +70 -0
- data/lib/bosh/director/deployment_plan/links/template_link.rb +21 -0
- data/lib/bosh/director/deployment_plan/manifest_migrator.rb +3 -17
- data/lib/bosh/director/deployment_plan/manifest_validator.rb +46 -0
- data/lib/bosh/director/deployment_plan/manual_network.rb +70 -97
- data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +148 -0
- data/lib/bosh/director/deployment_plan/network.rb +50 -39
- data/lib/bosh/director/deployment_plan/network_planner.rb +4 -0
- data/lib/bosh/director/deployment_plan/network_planner/plan.rb +26 -0
- data/lib/bosh/director/deployment_plan/network_planner/planner.rb +21 -0
- data/lib/bosh/director/deployment_plan/network_planner/reservation_reconciler.rb +81 -0
- data/lib/bosh/director/deployment_plan/network_planner/vip_static_ips_planner.rb +50 -0
- data/lib/bosh/director/deployment_plan/network_settings.rb +65 -0
- data/lib/bosh/director/deployment_plan/options/skip_drain.rb +7 -0
- data/lib/bosh/director/deployment_plan/package_validator.rb +79 -0
- data/lib/bosh/director/deployment_plan/placement_planner.rb +8 -0
- data/lib/bosh/director/deployment_plan/placement_planner/availability_zone_picker.rb +90 -0
- data/lib/bosh/director/deployment_plan/placement_planner/bruteforce_ip_allocation.rb +124 -0
- data/lib/bosh/director/deployment_plan/placement_planner/index_assigner.rb +32 -0
- data/lib/bosh/director/deployment_plan/placement_planner/networks_to_static_ips.rb +125 -0
- data/lib/bosh/director/deployment_plan/placement_planner/placed_desired_instances.rb +40 -0
- data/lib/bosh/director/deployment_plan/placement_planner/plan.rb +42 -0
- data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +237 -0
- data/lib/bosh/director/deployment_plan/placement_planner/unplaced_existing_instances.rb +53 -0
- data/lib/bosh/director/deployment_plan/planner.rb +186 -74
- data/lib/bosh/director/deployment_plan/planner_factory.rb +30 -147
- data/lib/bosh/director/deployment_plan/release_version.rb +3 -3
- data/lib/bosh/director/deployment_plan/resource_pool.rb +2 -174
- data/lib/bosh/director/deployment_plan/stemcell.rb +57 -14
- data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +28 -135
- data/lib/bosh/director/deployment_plan/steps/update_step.rb +23 -44
- data/lib/bosh/director/deployment_plan/template.rb +15 -4
- data/lib/bosh/director/deployment_plan/vip_network.rb +14 -42
- data/lib/bosh/director/deployment_plan/vm.rb +1 -99
- data/lib/bosh/director/deployment_plan/vm_type.rb +27 -0
- data/lib/bosh/director/disk_manager.rb +268 -0
- data/lib/bosh/director/dns/canonicalizer.rb +28 -0
- data/lib/bosh/director/dns/dns_manager.rb +163 -0
- data/lib/bosh/director/dns/local_dns_repo.rb +20 -0
- data/lib/bosh/director/dns/powerdns.rb +170 -0
- data/lib/bosh/director/errand/job_manager.rb +18 -29
- data/lib/bosh/director/error_ignorer.rb +16 -0
- data/lib/bosh/director/errors.rb +51 -20
- data/lib/bosh/director/event_log.rb +6 -0
- data/lib/bosh/director/instance_deleter.rb +53 -81
- data/lib/bosh/director/instance_reuser.rb +89 -0
- data/lib/bosh/director/instance_updater.rb +139 -281
- data/lib/bosh/director/instance_updater/preparer.rb +8 -5
- data/lib/bosh/director/instance_updater/state_applier.rb +21 -0
- data/lib/bosh/director/ip_util.rb +46 -26
- data/lib/bosh/director/job_renderer.rb +22 -10
- data/lib/bosh/director/job_runner.rb +1 -4
- data/lib/bosh/director/job_updater.rb +47 -35
- data/lib/bosh/director/job_updater_factory.rb +5 -4
- data/lib/bosh/director/jobs/base_job.rb +8 -0
- data/lib/bosh/director/jobs/cleanup_artifacts.rb +93 -0
- data/lib/bosh/director/jobs/delete_deployment.rb +10 -154
- data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
- data/lib/bosh/director/jobs/delete_orphan_disks.rb +44 -0
- data/lib/bosh/director/jobs/delete_release.rb +19 -196
- data/lib/bosh/director/jobs/delete_stemcell.rb +10 -76
- data/lib/bosh/director/jobs/export_release.rb +41 -121
- data/lib/bosh/director/jobs/fetch_logs.rb +0 -6
- data/lib/bosh/director/jobs/helpers.rb +10 -0
- data/lib/bosh/director/jobs/helpers/blob_deleter.rb +24 -0
- data/lib/bosh/director/jobs/helpers/compiled_package_deleter.rb +24 -0
- data/lib/bosh/director/jobs/helpers/name_version_release_deleter.rb +48 -0
- data/lib/bosh/director/jobs/helpers/package_deleter.rb +33 -0
- data/lib/bosh/director/jobs/helpers/release_deleter.rb +52 -0
- data/lib/bosh/director/jobs/helpers/release_version_deleter.rb +115 -0
- data/lib/bosh/director/jobs/helpers/releases_to_delete_picker.rb +31 -0
- data/lib/bosh/director/jobs/helpers/stemcell_deleter.rb +61 -0
- data/lib/bosh/director/jobs/helpers/stemcells_to_delete_picker.rb +30 -0
- data/lib/bosh/director/jobs/helpers/template_deleter.rb +20 -0
- data/lib/bosh/director/jobs/release/release_job.rb +18 -7
- data/lib/bosh/director/jobs/run_errand.rb +57 -36
- data/lib/bosh/director/jobs/scheduled_orphan_cleanup.rb +46 -0
- data/lib/bosh/director/jobs/ssh.rb +50 -17
- data/lib/bosh/director/jobs/update_deployment.rb +29 -11
- data/lib/bosh/director/jobs/update_release.rb +25 -4
- data/lib/bosh/director/jobs/vm_state.rb +23 -32
- data/lib/bosh/director/lock.rb +13 -8
- data/lib/bosh/director/logs_fetcher.rb +1 -1
- data/lib/bosh/director/models.rb +3 -0
- data/lib/bosh/director/models/compiled_package.rb +3 -3
- data/lib/bosh/director/models/deployment.rb +10 -0
- data/lib/bosh/director/models/instance.rb +77 -1
- data/lib/bosh/director/models/ip_address.rb +26 -0
- data/lib/bosh/director/models/orphan_disk.rb +23 -0
- data/lib/bosh/director/models/orphan_snapshot.rb +14 -0
- data/lib/bosh/director/models/template.rb +32 -9
- data/lib/bosh/director/models/vm.rb +5 -8
- data/lib/bosh/director/network_reservation.rb +69 -99
- data/lib/bosh/director/problem_handlers/inactive_disk.rb +5 -20
- data/lib/bosh/director/problem_handlers/missing_disk.rb +2 -13
- data/lib/bosh/director/problem_resolver.rb +2 -2
- data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +2 -21
- data/lib/bosh/director/scheduler.rb +23 -6
- data/lib/bosh/director/{instance_updater/stopper.rb → stopper.rb} +24 -18
- data/lib/bosh/director/tagged_logger.rb +30 -0
- data/lib/bosh/director/transactor.rb +9 -0
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director/vm_creator.rb +91 -19
- data/lib/bosh/director/vm_deleter.rb +25 -0
- data/lib/bosh/director/vm_recreator.rb +15 -0
- data/lib/cloud/dummy.rb +381 -94
- metadata +110 -30
- data/lib/bosh/director/deployment_plan/dns_binder.rb +0 -45
- data/lib/bosh/director/deployment_plan/instance_vm_binder.rb +0 -37
- data/lib/bosh/director/deployment_plan/network_subnet.rb +0 -166
- data/lib/bosh/director/deployment_plan/resource_pools.rb +0 -68
- data/lib/bosh/director/dns_helper.rb +0 -223
- data/lib/bosh/director/instance_updater/network_updater.rb +0 -110
- data/lib/bosh/director/instance_updater/vm_updater.rb +0 -189
- data/lib/bosh/director/problem_handlers/out_of_sync_vm.rb +0 -64
- data/lib/bosh/director/problem_handlers/unbound_instance_vm.rb +0 -85
- data/lib/bosh/director/resource_pool_updater.rb +0 -174
- data/lib/bosh/director/vm_data.rb +0 -63
- data/lib/bosh/director/vm_reuser.rb +0 -63
@@ -1,64 +0,0 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
|
-
module Bosh::Director
|
4
|
-
module ProblemHandlers
|
5
|
-
class OutOfSyncVm < Base
|
6
|
-
|
7
|
-
register_as :out_of_sync_vm
|
8
|
-
auto_resolution :ignore
|
9
|
-
|
10
|
-
def initialize(vm_id, data)
|
11
|
-
super
|
12
|
-
@vm = Models::Vm[vm_id]
|
13
|
-
@data = data
|
14
|
-
|
15
|
-
if @vm.nil?
|
16
|
-
handler_error("VM `#{vm_id}' is no longer in the database")
|
17
|
-
end
|
18
|
-
|
19
|
-
@deployment = @vm.deployment
|
20
|
-
@instance = @vm.instance
|
21
|
-
|
22
|
-
if @deployment.nil?
|
23
|
-
handler_error("VM `#{@vm.cid}' doesn't belong to any deployment")
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
def description
|
29
|
-
actual_deployment = @data["deployment"] || "unknown deployment"
|
30
|
-
actual_job = @data["job"] || "unknown job"
|
31
|
-
actual_index = @data["index"] || "unknown index"
|
32
|
-
|
33
|
-
expected = "#{@deployment.name}: #{instance_name(@vm)}"
|
34
|
-
actual = "#{actual_deployment}: #{actual_job}/#{actual_index}"
|
35
|
-
|
36
|
-
"VM `#{@vm.cid}' is out of sync: expected `#{expected}', got `#{actual}'"
|
37
|
-
end
|
38
|
-
|
39
|
-
resolution :ignore do
|
40
|
-
plan { "Skip for now" }
|
41
|
-
action { }
|
42
|
-
end
|
43
|
-
|
44
|
-
resolution :delete_vm do
|
45
|
-
plan { "Delete VM (unless it has persistent disk)"}
|
46
|
-
action { validate; delete_vm(@vm) }
|
47
|
-
end
|
48
|
-
|
49
|
-
def validate
|
50
|
-
state = agent_timeout_guard(@vm) { |agent | agent.get_state }
|
51
|
-
return if state["deployment"] != @deployment.name
|
52
|
-
|
53
|
-
# VM is no longer out of sync if no instance is referencing it,
|
54
|
-
# as this situation can actually be handled by regular deployment
|
55
|
-
if @instance.nil? ||
|
56
|
-
state["job"] && state["job"]["name"] == @instance.job &&
|
57
|
-
state["index"] == @instance.index
|
58
|
-
handler_error("VM is now back in sync")
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
|
-
module Bosh::Director
|
4
|
-
module ProblemHandlers
|
5
|
-
class UnboundInstanceVm < Base
|
6
|
-
|
7
|
-
register_as :unbound_instance_vm
|
8
|
-
auto_resolution :reassociate_vm
|
9
|
-
|
10
|
-
def initialize(vm_id, data)
|
11
|
-
super
|
12
|
-
|
13
|
-
@vm = Models::Vm[vm_id]
|
14
|
-
@data = data
|
15
|
-
|
16
|
-
if @vm.nil?
|
17
|
-
handler_error("VM `#{vm_id}' is no longer in the database")
|
18
|
-
end
|
19
|
-
|
20
|
-
if @vm.agent_id.nil?
|
21
|
-
handler_error("VM `#{vm_id}' doesn't have an agent id")
|
22
|
-
end
|
23
|
-
|
24
|
-
if @vm.cid.nil?
|
25
|
-
handler_error("VM `#{vm_id}' doesn't have a cloud id")
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def description
|
31
|
-
job = @data["job"] || "unknown job"
|
32
|
-
index = @data["index"] || "unknown index"
|
33
|
-
"VM `#{@vm.cid}' reports itself as `#{job}/#{index}' but does not have a bound instance"
|
34
|
-
end
|
35
|
-
|
36
|
-
resolution :ignore do
|
37
|
-
plan { "Skip for now" }
|
38
|
-
action { }
|
39
|
-
end
|
40
|
-
|
41
|
-
resolution :delete_vm do
|
42
|
-
plan { "Delete VM (unless it has persistent disk)" }
|
43
|
-
action { validate; delete_vm(@vm) }
|
44
|
-
end
|
45
|
-
|
46
|
-
resolution :reassociate_vm do
|
47
|
-
plan { "Reassociate VM with corresponding instance" }
|
48
|
-
action { validate; reassociate_vm }
|
49
|
-
end
|
50
|
-
|
51
|
-
def validate
|
52
|
-
unless @vm.instance.nil?
|
53
|
-
handler_error("Instance is now bound to VM")
|
54
|
-
end
|
55
|
-
|
56
|
-
state = agent_timeout_guard(@vm) { |agent| agent.get_state }
|
57
|
-
if state["job"].nil?
|
58
|
-
handler_error("VM now properly reports no job")
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def reassociate_vm
|
63
|
-
instances = Models::Instance.
|
64
|
-
filter(:deployment_id => @vm.deployment_id,
|
65
|
-
:job => @data["job"], :index => @data["index"]).all
|
66
|
-
|
67
|
-
if instances.size > 1
|
68
|
-
handler_error("More than one instance in DB matches this VM")
|
69
|
-
end
|
70
|
-
|
71
|
-
if instances.empty?
|
72
|
-
handler_error("No instances in DB match this VM")
|
73
|
-
end
|
74
|
-
|
75
|
-
instance = instances[0]
|
76
|
-
|
77
|
-
if instance.vm
|
78
|
-
handler_error("The corresponding instance is associated with another VM")
|
79
|
-
end
|
80
|
-
|
81
|
-
instance.update(:vm => @vm)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,174 +0,0 @@
|
|
1
|
-
module Bosh::Director
|
2
|
-
class ResourcePoolUpdater
|
3
|
-
def initialize(resource_pool)
|
4
|
-
@resource_pool = resource_pool
|
5
|
-
@cloud = Config.cloud
|
6
|
-
@logger = Config.logger
|
7
|
-
@event_log = Config.event_log
|
8
|
-
end
|
9
|
-
|
10
|
-
##
|
11
|
-
# Creates VMs that are considered missing from the deployment
|
12
|
-
#
|
13
|
-
# @param [ThreadPool] thread_pool Thread pool that will be used to
|
14
|
-
# parallelize the operation
|
15
|
-
# @yield [VirtualMachine] filter for which missing VMs to create
|
16
|
-
def create_missing_vms(thread_pool)
|
17
|
-
counter = 0
|
18
|
-
vms_to_process = []
|
19
|
-
|
20
|
-
@resource_pool.vms.each do |vm|
|
21
|
-
next if vm.model
|
22
|
-
if !block_given? || yield(vm)
|
23
|
-
counter += 1
|
24
|
-
vms_to_process << vm
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
@logger.info("Creating #{counter} missing VMs")
|
29
|
-
vms_to_process.each_with_index do |vm, index|
|
30
|
-
thread_pool.process do
|
31
|
-
@event_log.track("#{@resource_pool.name}/#{index}") do
|
32
|
-
with_thread_name("create_missing_vm(#{@resource_pool.name}, #{index}/#{counter})") do
|
33
|
-
@logger.info("Creating missing VM")
|
34
|
-
create_missing_vm(vm)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# Creates missing VMs that have bound instances
|
42
|
-
# (as opposed to missing resource pool VMs)
|
43
|
-
def create_bound_missing_vms(thread_pool)
|
44
|
-
create_missing_vms(thread_pool) { |vm| !vm.bound_instance.nil? }
|
45
|
-
end
|
46
|
-
|
47
|
-
def create_missing_vm(vm)
|
48
|
-
deployment = @resource_pool.deployment_plan.model
|
49
|
-
stemcell = @resource_pool.stemcell.model
|
50
|
-
|
51
|
-
vm_model = VmCreator.new.create(deployment, stemcell, @resource_pool.cloud_properties,
|
52
|
-
vm.network_settings, nil, @resource_pool.env)
|
53
|
-
agent = AgentClient.with_defaults(vm_model.agent_id)
|
54
|
-
agent.wait_until_ready
|
55
|
-
agent.update_settings(Config.trusted_certs)
|
56
|
-
vm_model.update(:trusted_certs_sha1 => Digest::SHA1.hexdigest(Config.trusted_certs))
|
57
|
-
|
58
|
-
update_state(agent, vm_model, vm)
|
59
|
-
|
60
|
-
vm.model = vm_model
|
61
|
-
vm.current_state = agent.get_state
|
62
|
-
rescue Exception => e
|
63
|
-
@logger.info("Cleaning up the created VM due to an error: #{e}")
|
64
|
-
begin
|
65
|
-
@cloud.delete_vm(vm_model.cid) if vm_model && vm_model.cid
|
66
|
-
vm_model.destroy if vm_model && vm_model.id
|
67
|
-
rescue Exception
|
68
|
-
@logger.info("Could not cleanup VM: #{vm_model.cid}") if vm_model
|
69
|
-
end
|
70
|
-
raise e
|
71
|
-
end
|
72
|
-
|
73
|
-
def update_state(agent, vm_model, vm)
|
74
|
-
state = {
|
75
|
-
"deployment" => @resource_pool.deployment_plan.name,
|
76
|
-
"resource_pool" => @resource_pool.spec,
|
77
|
-
"networks" => vm.network_settings
|
78
|
-
}
|
79
|
-
|
80
|
-
vm_model.update(:apply_spec => state)
|
81
|
-
agent.apply(state)
|
82
|
-
end
|
83
|
-
|
84
|
-
# Deletes extra VMs in a resource pool
|
85
|
-
# @param thread_pool Thread pool used to parallelize delete operations
|
86
|
-
def delete_extra_vms(thread_pool)
|
87
|
-
count = @resource_pool.extra_vm_count
|
88
|
-
@logger.info("Deleting #{count} extra VMs")
|
89
|
-
|
90
|
-
count.times do
|
91
|
-
vm = @resource_pool.idle_vms.shift
|
92
|
-
vm_cid = vm.model.cid
|
93
|
-
|
94
|
-
thread_pool.process do
|
95
|
-
@event_log.track("#{@resource_pool.name}/#{vm_cid}") do
|
96
|
-
@logger.info("Deleting extra VM: #{vm_cid}")
|
97
|
-
@cloud.delete_vm(vm_cid)
|
98
|
-
vm.model.destroy
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
def delete_outdated_idle_vms(thread_pool)
|
105
|
-
count = outdated_idle_vm_count
|
106
|
-
index = 0
|
107
|
-
index_lock = Mutex.new
|
108
|
-
|
109
|
-
@logger.info("Deleting #{count} outdated idle VMs")
|
110
|
-
|
111
|
-
@resource_pool.idle_vms.each do |vm|
|
112
|
-
next unless vm.model && vm.changed?
|
113
|
-
vm_cid = vm.model.cid
|
114
|
-
|
115
|
-
thread_pool.process do
|
116
|
-
@event_log.track("#{@resource_pool.name}/#{vm_cid}") do
|
117
|
-
index_lock.synchronize { index += 1 }
|
118
|
-
|
119
|
-
with_thread_name("delete_outdated_vm(#{@resource_pool.name}, #{index - 1}/#{count})") do
|
120
|
-
@logger.info("Deleting outdated VM: #{vm_cid}")
|
121
|
-
@cloud.delete_vm(vm_cid)
|
122
|
-
vm_model = vm.model
|
123
|
-
vm.clean_vm
|
124
|
-
vm_model.destroy
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# Attempts to allocate a dynamic IP address for all idle VMs
|
132
|
-
# (unless they already have one). This allows us to fail earlier
|
133
|
-
# in case any of resource pools is not big enough to accommodate
|
134
|
-
# those VMs.
|
135
|
-
def reserve_networks
|
136
|
-
@resource_pool.reserve_dynamic_networks
|
137
|
-
end
|
138
|
-
|
139
|
-
def generate_agent_id
|
140
|
-
SecureRandom.uuid
|
141
|
-
end
|
142
|
-
|
143
|
-
def extra_vm_count
|
144
|
-
@resource_pool.extra_vm_count
|
145
|
-
end
|
146
|
-
|
147
|
-
def outdated_idle_vm_count
|
148
|
-
counter = 0
|
149
|
-
@resource_pool.idle_vms.each do |vm|
|
150
|
-
counter += 1 if vm.model && vm.changed?
|
151
|
-
end
|
152
|
-
counter
|
153
|
-
end
|
154
|
-
|
155
|
-
def missing_vm_count
|
156
|
-
counter = 0
|
157
|
-
@resource_pool.vms.each do |vm|
|
158
|
-
next if vm.model
|
159
|
-
counter += 1
|
160
|
-
end
|
161
|
-
counter
|
162
|
-
end
|
163
|
-
|
164
|
-
def bound_missing_vm_count
|
165
|
-
counter = 0
|
166
|
-
@resource_pool.vms.each do |vm|
|
167
|
-
next if vm.model
|
168
|
-
next if vm.bound_instance.nil?
|
169
|
-
counter += 1
|
170
|
-
end
|
171
|
-
counter
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module Bosh::Director
|
2
|
-
# A class for storing VMs and their associated data so that they can be
|
3
|
-
# accessed and deleted easily.
|
4
|
-
class VmData
|
5
|
-
|
6
|
-
# @attr [NetworkReservation] The network reservation for this VM.
|
7
|
-
attr_reader :reservation
|
8
|
-
|
9
|
-
# @attr [Models::Vm] The VM.
|
10
|
-
attr_reader :vm
|
11
|
-
|
12
|
-
# @attr[Models::Stemcell] The Stemcell this VM is running.
|
13
|
-
attr_reader :stemcell
|
14
|
-
|
15
|
-
# @attr [Hash] A hash containing the network reservation.
|
16
|
-
attr_reader :network_settings
|
17
|
-
|
18
|
-
# @attr [Integer] The agent ID running on this VM.
|
19
|
-
attr_reader :agent_id
|
20
|
-
|
21
|
-
# @attr [AgentClient] The agent running on this VM.
|
22
|
-
attr_accessor :agent
|
23
|
-
|
24
|
-
# Initializes a VmData.
|
25
|
-
# @param [NetworkReservation] reservation The network reservation for this VM.
|
26
|
-
# @param [Models::Vm] vm The VM to be reused.
|
27
|
-
# @param [Models::Stemcell] stemcell The Stemcell to make the VM on.
|
28
|
-
# @param [Hash] network_settings A hash containing the network reservation.
|
29
|
-
def initialize(reservation, vm, stemcell, network_settings)
|
30
|
-
@reservation = reservation
|
31
|
-
@vm = vm
|
32
|
-
@stemcell = stemcell
|
33
|
-
@network_settings = network_settings
|
34
|
-
@agent_id = vm.agent_id
|
35
|
-
@being_used = false
|
36
|
-
@being_used_mutex = Mutex.new
|
37
|
-
end
|
38
|
-
|
39
|
-
# Marks that this VM is being used.
|
40
|
-
# @return [Boolean] Returns whether it could successfully mark this VM as in use.
|
41
|
-
def mark_in_use
|
42
|
-
@being_used_mutex.synchronize do
|
43
|
-
if @being_used
|
44
|
-
return false
|
45
|
-
else
|
46
|
-
@being_used = true
|
47
|
-
return true
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Releases the current VM to be reused.
|
53
|
-
def release
|
54
|
-
@being_used_mutex.synchronize do
|
55
|
-
@being_used = false
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def in_use?
|
60
|
-
@being_used
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module Bosh::Director
|
2
|
-
# A class for maintaining VmData objects, making reusing VMs easier.
|
3
|
-
class VmReuser
|
4
|
-
def initialize
|
5
|
-
@stemcells_to_vms = {}
|
6
|
-
end
|
7
|
-
|
8
|
-
# Adds a VM's information to the pool of VMs that can be reused.
|
9
|
-
# @param [NetworkReservation] reservation The network reservation for this VM.
|
10
|
-
# @param [Models::Vm] vm The VM to be reused.
|
11
|
-
# @param [Models::Stemcell] stemcell The Stemcell to make the VM on.
|
12
|
-
# @param [Hash] network_settings A hash containing the network reservation.
|
13
|
-
# @return [VmData] The VmData instance for the new VM.
|
14
|
-
def add_vm(reservation, vm, stemcell, network_settings)
|
15
|
-
vm_d = VmData.new(reservation, vm, stemcell, network_settings)
|
16
|
-
@stemcells_to_vms[stemcell] ||= []
|
17
|
-
@stemcells_to_vms[stemcell] << vm_d
|
18
|
-
vm_d.mark_in_use
|
19
|
-
vm_d
|
20
|
-
end
|
21
|
-
|
22
|
-
# Returns the VmData instance of a VM that is not in use and can be reused.
|
23
|
-
# @param [Models::Stemcell] stemcell The stemcell that the VM must be running.
|
24
|
-
# @return [VmData?] The VmData instance for an existing unused VM, if one exists. Otherwise, nil.
|
25
|
-
def get_vm(stemcell)
|
26
|
-
unless @stemcells_to_vms[stemcell].nil?
|
27
|
-
@stemcells_to_vms[stemcell].each do |vm_data|
|
28
|
-
if vm_data.mark_in_use
|
29
|
-
return vm_data
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
|
36
|
-
def remove_vm(vm)
|
37
|
-
@stemcells_to_vms.each_value do |vms|
|
38
|
-
vms.each do |vm_data|
|
39
|
-
vms.delete(vm_data) if vm_data.vm == vm
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Gets the total number of compilation VMs created with a given stemcell.
|
45
|
-
# @param [Models::Stemcell] stemcell The stemcell the VMs are running.
|
46
|
-
# @return [Integer] The number of VMs running a given stemcell.
|
47
|
-
def get_num_vms(stemcell)
|
48
|
-
@stemcells_to_vms[stemcell].nil? ? 0 : @stemcells_to_vms[stemcell].size
|
49
|
-
end
|
50
|
-
|
51
|
-
# An iterator for all compilation VMs on all stemcells.
|
52
|
-
# @yield [VmData] Yields each VM in VmReuser.
|
53
|
-
def each
|
54
|
-
@stemcells_to_vms.each do |stemcell, vms|
|
55
|
-
vms.each do |vm|
|
56
|
-
yield vm
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|