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