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
@@ -0,0 +1,46 @@
|
|
1
|
+
module Bosh::Director
|
2
|
+
module Jobs
|
3
|
+
class ScheduledOrphanCleanup < BaseJob
|
4
|
+
@queue = :normal
|
5
|
+
|
6
|
+
def self.job_type
|
7
|
+
:scheduled_orphan_cleanup
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.has_work(params)
|
11
|
+
time = time_days_ago(params.first['max_orphaned_age_in_days'])
|
12
|
+
Models::OrphanDisk.where('created_at < ?', time).any?
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.time_days_ago(days)
|
16
|
+
Time.now - (days * 24 * 60 * 60)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.schedule_message
|
20
|
+
"clean up orphan disks"
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(params = {})
|
24
|
+
logger.debug("ScheduledOrphanCleanup initialized with params: #{params.inspect}")
|
25
|
+
@max_orphaned_age_in_days = params['max_orphaned_age_in_days']
|
26
|
+
cloud = params.fetch(:cloud) { Config.cloud }
|
27
|
+
@disk_manager = DiskManager.new(cloud, logger)
|
28
|
+
end
|
29
|
+
|
30
|
+
def perform
|
31
|
+
time = self.class.time_days_ago(@max_orphaned_age_in_days)
|
32
|
+
logger.info("Started cleanup of orphan disks and orphan snapshots older than #{time}")
|
33
|
+
|
34
|
+
old_orphans = Models::OrphanDisk.where('created_at < ?', time)
|
35
|
+
old_orphans_count = old_orphans.count
|
36
|
+
stage = event_log.begin_stage('Deleting orphan disks', old_orphans_count)
|
37
|
+
old_orphans.each do |old_orphan|
|
38
|
+
stage.advance_and_track("#{old_orphan.disk_cid}") do
|
39
|
+
@disk_manager.delete_orphan_disk(old_orphan)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
"Deleted #{old_orphans_count} orphaned disk(s) older than #{time}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Director
|
4
2
|
module Jobs
|
5
3
|
class Ssh < BaseJob
|
@@ -13,7 +11,7 @@ module Bosh::Director
|
|
13
11
|
|
14
12
|
def initialize(deployment_id, options = {})
|
15
13
|
@deployment_id = deployment_id
|
16
|
-
@
|
14
|
+
@target_payload = options["target"]
|
17
15
|
@command = options["command"]
|
18
16
|
@params = options["params"]
|
19
17
|
@blobstore = options.fetch(:blobstore) { App.instance.blobstores.blobstore }
|
@@ -21,29 +19,25 @@ module Bosh::Director
|
|
21
19
|
end
|
22
20
|
|
23
21
|
def perform
|
24
|
-
|
25
|
-
indexes = @target["indexes"]
|
26
|
-
|
27
|
-
filter = {
|
28
|
-
:deployment_id => @deployment_id
|
29
|
-
}
|
22
|
+
target = Target.new(@target_payload)
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
24
|
+
filter = { deployment_id: @deployment_id }
|
25
|
+
filter[:job] = target.job if target.job
|
34
26
|
|
35
|
-
|
36
|
-
filter[:job] = job
|
37
|
-
end
|
27
|
+
filter.merge!(target.id_filter)
|
38
28
|
|
39
29
|
instances = @instance_manager.filter_by(filter)
|
40
30
|
|
41
31
|
ssh_info = instances.map do |instance|
|
42
32
|
agent = @instance_manager.agent_client_for(instance)
|
43
33
|
|
44
|
-
logger.info("ssh #{@command} `#{instance.job}/#{instance.
|
34
|
+
logger.info("ssh #{@command} `#{instance.job}/#{instance.uuid}'")
|
45
35
|
result = agent.ssh(@command, @params)
|
46
|
-
|
36
|
+
if target.ids_provided?
|
37
|
+
result["id"] = instance.uuid
|
38
|
+
else
|
39
|
+
result["index"] = instance.index
|
40
|
+
end
|
47
41
|
|
48
42
|
if Config.default_ssh_options
|
49
43
|
result["gateway_host"] = Config.default_ssh_options["gateway_host"]
|
@@ -59,6 +53,45 @@ module Bosh::Director
|
|
59
53
|
# task result
|
60
54
|
nil
|
61
55
|
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
class Target
|
60
|
+
attr_reader :job, :indexes, :ids
|
61
|
+
|
62
|
+
def initialize(target_payload)
|
63
|
+
@job = target_payload['job']
|
64
|
+
@ids = target_payload['ids']
|
65
|
+
@indexes = target_payload['indexes']
|
66
|
+
end
|
67
|
+
|
68
|
+
def ids_provided?
|
69
|
+
@ids && @ids.size > 0
|
70
|
+
end
|
71
|
+
|
72
|
+
def indexes_provided?
|
73
|
+
@indexes && @indexes.size > 0
|
74
|
+
end
|
75
|
+
|
76
|
+
def id_filter
|
77
|
+
if !ids_provided? && indexes_provided?
|
78
|
+
# for backwards compatibility with old cli
|
79
|
+
return {index: @indexes}
|
80
|
+
end
|
81
|
+
|
82
|
+
filter = Hash.new { |h,k| h[k] = [] }
|
83
|
+
|
84
|
+
@ids.each do |id|
|
85
|
+
if id.to_s =~ /^\d+$/
|
86
|
+
filter[:index] << id.to_i
|
87
|
+
else
|
88
|
+
filter[:uuid] << id
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
filter
|
93
|
+
end
|
94
|
+
end
|
62
95
|
end
|
63
96
|
end
|
64
97
|
end
|
@@ -18,18 +18,35 @@ module Bosh::Director
|
|
18
18
|
|
19
19
|
def perform
|
20
20
|
logger.info('Reading deployment manifest')
|
21
|
+
|
21
22
|
manifest_text = File.read(@manifest_file_path)
|
22
23
|
logger.debug("Manifest:\n#{manifest_text}")
|
23
24
|
deployment_manifest_hash = Psych.load(manifest_text)
|
25
|
+
|
26
|
+
cloud_config_model = Bosh::Director::Models::CloudConfig[@cloud_config_id]
|
27
|
+
if cloud_config_model.nil?
|
28
|
+
logger.debug("No cloud config uploaded yet.")
|
29
|
+
else
|
30
|
+
logger.debug("Cloud config:\n#{cloud_config_model.manifest}")
|
31
|
+
end
|
32
|
+
|
24
33
|
deployment_name = deployment_manifest_hash['name']
|
25
34
|
with_deployment_lock(deployment_name) do
|
26
35
|
@notifier = DeploymentPlan::Notifier.new(deployment_name, Config.nats_rpc, logger)
|
27
36
|
@notifier.send_start_event
|
28
37
|
|
29
|
-
|
30
|
-
|
31
|
-
|
38
|
+
deployment_plan = nil
|
39
|
+
|
40
|
+
event_log.begin_stage('Preparing deployment', 1)
|
41
|
+
event_log.track('Preparing deployment') do
|
42
|
+
planner_factory = DeploymentPlan::PlannerFactory.create(logger)
|
43
|
+
deployment_plan = planner_factory.create_from_manifest(deployment_manifest_hash, cloud_config_model, @options)
|
44
|
+
deployment_plan.bind_models
|
45
|
+
end
|
32
46
|
|
47
|
+
deployment_plan.compile_packages
|
48
|
+
|
49
|
+
render_job_templates(deployment_plan.jobs_starting_on_deploy)
|
33
50
|
update_step(deployment_plan).perform
|
34
51
|
@notifier.send_end_event
|
35
52
|
logger.info('Finished updating deployment')
|
@@ -53,18 +70,12 @@ module Bosh::Director
|
|
53
70
|
# Job tasks
|
54
71
|
|
55
72
|
def update_step(deployment_plan)
|
56
|
-
resource_pool_updaters = deployment_plan.resource_pools.map do |resource_pool|
|
57
|
-
ResourcePoolUpdater.new(resource_pool)
|
58
|
-
end
|
59
|
-
resource_pools = DeploymentPlan::ResourcePools.new(event_log, resource_pool_updaters)
|
60
73
|
DeploymentPlan::Steps::UpdateStep.new(
|
61
74
|
self,
|
62
75
|
event_log,
|
63
|
-
resource_pools,
|
64
76
|
deployment_plan,
|
65
77
|
multi_job_updater,
|
66
|
-
Config.cloud
|
67
|
-
App.instance.blobstores.blobstore
|
78
|
+
Config.cloud
|
68
79
|
)
|
69
80
|
end
|
70
81
|
|
@@ -72,7 +83,14 @@ module Bosh::Director
|
|
72
83
|
|
73
84
|
def multi_job_updater
|
74
85
|
@multi_job_updater ||= begin
|
75
|
-
DeploymentPlan::BatchMultiJobUpdater.new(JobUpdaterFactory.new(
|
86
|
+
DeploymentPlan::BatchMultiJobUpdater.new(JobUpdaterFactory.new(Config.cloud, logger))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def render_job_templates(jobs)
|
91
|
+
job_renderer = JobRenderer.create
|
92
|
+
jobs.each do |job|
|
93
|
+
job_renderer.render_job_instances(job.needed_instance_plans)
|
76
94
|
end
|
77
95
|
end
|
78
96
|
end
|
@@ -383,6 +383,7 @@ module Bosh::Director
|
|
383
383
|
all_compiled_packages.each do |compiled_package_spec|
|
384
384
|
package = compiled_package_spec[:package]
|
385
385
|
stemcell = compiled_package_spec[:stemcell]
|
386
|
+
compiled_pkg_tgz = File.join(release_dir, 'compiled_packages', "#{package.name}.tgz")
|
386
387
|
|
387
388
|
existing_compiled_package = Models::CompiledPackage.where(:package_id => package.id, :stemcell_id => stemcell.id)
|
388
389
|
if existing_compiled_package.empty?
|
@@ -390,9 +391,14 @@ module Bosh::Director
|
|
390
391
|
package_desc = "#{package.name}/#{package.version} for #{stemcell.name}/#{stemcell.version}"
|
391
392
|
event_log.track(package_desc) do
|
392
393
|
other_compiled_package = get_other_compiled_package(package, packages_existing_from_other_releases, stemcell)
|
394
|
+
if @fix && !other_compiled_package.nil?
|
395
|
+
fix_compiled_package(other_compiled_package, compiled_pkg_tgz)
|
396
|
+
end
|
393
397
|
create_compiled_package(package, stemcell, release_dir, other_compiled_package)
|
394
398
|
had_effect = true
|
395
399
|
end
|
400
|
+
elsif @fix
|
401
|
+
fix_compiled_package(existing_compiled_package.first, compiled_pkg_tgz)
|
396
402
|
end
|
397
403
|
end
|
398
404
|
|
@@ -437,7 +443,6 @@ module Bosh::Director
|
|
437
443
|
if other_compiled_package.nil?
|
438
444
|
tgz = File.join(release_dir, 'compiled_packages', "#{package.name}.tgz")
|
439
445
|
validate_tgz(tgz, "#{package.name}.tgz")
|
440
|
-
|
441
446
|
blobstore_id = BlobUtil.create_blob(tgz)
|
442
447
|
sha1 = Digest::SHA1.file(tgz).hexdigest
|
443
448
|
else
|
@@ -493,7 +498,7 @@ module Bosh::Director
|
|
493
498
|
package.sha1 = package_meta['sha1']
|
494
499
|
|
495
500
|
if package.blobstore_id != nil
|
496
|
-
|
501
|
+
delete_compiled_packages package
|
497
502
|
validate_tgz(package_tgz, desc)
|
498
503
|
fix_package(package, package_tgz)
|
499
504
|
return true
|
@@ -501,7 +506,7 @@ module Bosh::Director
|
|
501
506
|
|
502
507
|
if existing_blob
|
503
508
|
pkg = Models::Package.where(blobstore_id: existing_blob).first
|
504
|
-
|
509
|
+
delete_compiled_packages package
|
505
510
|
fix_package(pkg, package_tgz)
|
506
511
|
package.blobstore_id = BlobUtil.copy_blob(pkg.blobstore_id)
|
507
512
|
return true
|
@@ -647,9 +652,10 @@ module Bosh::Director
|
|
647
652
|
package.blobstore_id = BlobUtil.create_blob(package_tgz)
|
648
653
|
logger.info("Re-created package '#{package.name}/#{package.version}' \
|
649
654
|
with blobstore_id '#{package.blobstore_id}'")
|
655
|
+
package.save
|
650
656
|
end
|
651
657
|
|
652
|
-
def
|
658
|
+
def delete_compiled_packages(package)
|
653
659
|
package.compiled_packages.each do |compiled_pkg|
|
654
660
|
unless BlobUtil.verify_blob(compiled_pkg.blobstore_id, compiled_pkg.sha1)
|
655
661
|
logger.info("Deleting compiled package '#{compiled_pkg.name}' \
|
@@ -665,6 +671,21 @@ for '#{compiled_pkg.stemcell.name}/#{compiled_pkg.stemcell.version}' with blobst
|
|
665
671
|
end
|
666
672
|
end
|
667
673
|
end
|
674
|
+
|
675
|
+
def fix_compiled_package(compiled_pkg, compiled_pkg_tgz)
|
676
|
+
begin
|
677
|
+
logger.info("Deleting compiled package '#{compiled_pkg.name}/#{compiled_pkg.version}' \
|
678
|
+
for '#{compiled_pkg.stemcell.name}/#{compiled_pkg.stemcell.version}' with blobstore_id '#{compiled_pkg.blobstore_id}'")
|
679
|
+
BlobUtil.delete_blob compiled_pkg.blobstore_id
|
680
|
+
rescue Bosh::Blobstore::BlobstoreError => e
|
681
|
+
logger.info("Error deleting compiled package '#{compiled_pkg.name}' \
|
682
|
+
with blobstore_id '#{compiled_pkg.blobstore_id}' #{e.inspect}")
|
683
|
+
end
|
684
|
+
compiled_pkg.blobstore_id = BlobUtil.create_blob(compiled_pkg_tgz)
|
685
|
+
logger.info("Re-created compiled package '#{compiled_pkg.name}/#{compiled_pkg.version}' \
|
686
|
+
with blobstore_id '#{compiled_pkg.blobstore_id}'")
|
687
|
+
compiled_pkg.save
|
688
|
+
end
|
668
689
|
end
|
669
690
|
end
|
670
691
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Director
|
4
2
|
module Jobs
|
5
3
|
class VmState < BaseJob
|
@@ -11,15 +9,12 @@ module Bosh::Director
|
|
11
9
|
:vms
|
12
10
|
end
|
13
11
|
|
14
|
-
# @param [Integer] deployment_id Deployment id
|
15
12
|
def initialize(deployment_id, format)
|
16
13
|
@deployment_id = deployment_id
|
17
14
|
@format = format
|
18
15
|
end
|
19
16
|
|
20
17
|
def perform
|
21
|
-
@domain = Models::Dns::Domain.find(name: Config.dns_domain_name, type: "NATIVE") if Config.dns_enabled?
|
22
|
-
|
23
18
|
vms = Models::Vm.filter(:deployment_id => @deployment_id)
|
24
19
|
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
25
20
|
vms.each do |vm|
|
@@ -37,62 +32,58 @@ module Bosh::Director
|
|
37
32
|
def process_vm(vm)
|
38
33
|
ips = []
|
39
34
|
dns_records = []
|
40
|
-
job_name = nil
|
41
35
|
job_state = nil
|
42
|
-
resource_pool = nil
|
43
36
|
job_vitals = nil
|
44
|
-
job_index = nil
|
45
37
|
processes = []
|
46
38
|
|
47
39
|
begin
|
48
40
|
agent = AgentClient.with_vm(vm, :timeout => TIMEOUT)
|
49
41
|
agent_state = agent.get_state(@format)
|
50
|
-
agent_state[
|
51
|
-
ips << network[
|
42
|
+
agent_state['networks'].each_value do |network|
|
43
|
+
ips << network['ip']
|
52
44
|
end
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
job_state = agent_state["job_state"]
|
58
|
-
if agent_state["resource_pool"]
|
59
|
-
resource_pool = agent_state["resource_pool"]["name"]
|
46
|
+
job_state = agent_state['job_state']
|
47
|
+
if agent_state['vitals']
|
48
|
+
job_vitals = agent_state['vitals']
|
60
49
|
end
|
61
|
-
if agent_state[
|
62
|
-
job_vitals = agent_state["vitals"]
|
63
|
-
end
|
64
|
-
processes = agent_state["processes"] if agent_state["processes"]
|
50
|
+
processes = agent_state['processes'] if agent_state['processes']
|
65
51
|
rescue Bosh::Director::RpcTimeout
|
66
|
-
job_state =
|
52
|
+
job_state = 'unresponsive agent'
|
67
53
|
end
|
68
54
|
|
69
|
-
if
|
70
|
-
|
71
|
-
|
72
|
-
dns_records << records.collect { |record| record.name } unless records.empty?
|
73
|
-
end
|
55
|
+
if dns_manager.dns_enabled?
|
56
|
+
dns_records = dns_manager.find_dns_record_names_by_instance(vm.instance)
|
57
|
+
dns_records.sort_by! { |name| -(name.split('.').first.length) }
|
74
58
|
end
|
75
59
|
|
60
|
+
vm_apply_spec = vm.instance ? vm.instance.spec : {}
|
61
|
+
vm_type_name = vm_apply_spec && vm_apply_spec['vm_type'] ? vm_apply_spec['vm_type']['name'] : nil
|
62
|
+
|
76
63
|
{
|
77
64
|
:vm_cid => vm.cid,
|
78
65
|
:disk_cid => vm.instance ? vm.instance.persistent_disk_cid : nil,
|
79
66
|
:ips => ips,
|
80
|
-
:dns => dns_records
|
67
|
+
:dns => dns_records,
|
81
68
|
:agent_id => vm.agent_id,
|
82
|
-
:job_name =>
|
83
|
-
:index =>
|
69
|
+
:job_name => vm.instance ? vm.instance.job : nil,
|
70
|
+
:index => vm.instance ? vm.instance.index : nil,
|
84
71
|
:job_state => job_state,
|
85
|
-
:resource_pool =>
|
72
|
+
:resource_pool => vm_type_name,
|
73
|
+
:vm_type => vm_type_name,
|
86
74
|
:vitals => job_vitals,
|
87
75
|
:processes => processes,
|
88
|
-
:resurrection_paused => vm.instance ? vm.instance.resurrection_paused
|
76
|
+
:resurrection_paused => vm.instance ? vm.instance.resurrection_paused : nil,
|
77
|
+
:az => vm.instance ? vm.instance.availability_zone : nil,
|
78
|
+
:id => vm.instance ? vm.instance.uuid : nil,
|
79
|
+
:bootstrap => vm.instance ? vm.instance.bootstrap : false
|
89
80
|
}
|
90
81
|
end
|
91
82
|
|
92
83
|
private
|
93
84
|
|
94
85
|
def get_index(agent_state)
|
95
|
-
index = agent_state[
|
86
|
+
index = agent_state['index']
|
96
87
|
|
97
88
|
# Postgres cannot coerce an empty string to integer, and fails on Models::Instance.find
|
98
89
|
index = nil if index.is_a?(String) && index.empty?
|
data/lib/bosh/director/lock.rb
CHANGED
@@ -93,7 +93,7 @@ module Bosh::Director
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
raise TimeoutError if Time.now - started > @timeout
|
96
|
+
raise TimeoutError, "Redis lock #{@name} is acquired by another thread" if Time.now - started > @timeout
|
97
97
|
|
98
98
|
sleep(0.5)
|
99
99
|
|
@@ -110,15 +110,20 @@ module Bosh::Director
|
|
110
110
|
|
111
111
|
redis.watch(@name)
|
112
112
|
existing_lock = redis.get(@name)
|
113
|
-
|
114
|
-
|
115
|
-
redis.multi do
|
116
|
-
redis.del(@name)
|
117
|
-
end
|
118
|
-
else
|
113
|
+
if existing_lock.nil?
|
114
|
+
@logger.debug("Lost lock #@name")
|
119
115
|
redis.unwatch
|
116
|
+
else
|
117
|
+
lock_id = existing_lock.split(":")[1]
|
118
|
+
if lock_id == @id
|
119
|
+
redis.multi do
|
120
|
+
redis.del(@name)
|
121
|
+
end
|
122
|
+
else
|
123
|
+
redis.unwatch
|
124
|
+
end
|
125
|
+
@logger.debug("Deleted lock: #@name")
|
120
126
|
end
|
121
|
-
@logger.debug("Deleted lock: #@name")
|
122
127
|
end
|
123
128
|
|
124
129
|
def lock_expired?(lock)
|
@@ -21,7 +21,7 @@ module Bosh::Director
|
|
21
21
|
agent = @instance_manager.agent_client_for(instance)
|
22
22
|
blobstore_id = nil
|
23
23
|
|
24
|
-
stage = @event_log.begin_stage("Fetching logs for #{instance.job}/#{instance.index}", 1)
|
24
|
+
stage = @event_log.begin_stage("Fetching logs for #{instance.job}/#{instance.uuid} (#{instance.index})", 1)
|
25
25
|
stage.advance_and_track('Finding and packing log files') do
|
26
26
|
fetch_logs_result = agent.fetch_logs(log_type, filters)
|
27
27
|
blobstore_id = fetch_logs_result['blobstore_id']
|