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.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bosh-director-worker +2 -14
  3. data/db/migrations/director/20150513225143_ip_addresses.rb +11 -0
  4. data/db/migrations/director/20150702004608_add_links.rb +8 -0
  5. data/db/migrations/director/20150708231924_add_link_spec.rb +7 -0
  6. data/db/migrations/director/20150724183256_add_debugging_to_ip_addresses.rb +8 -0
  7. data/db/migrations/director/20150730225029_add_uuid_to_instances.rb +16 -0
  8. data/db/migrations/director/20150803215805_add_availabililty_zone_and_cloud_properties_to_instances.rb +8 -0
  9. data/db/migrations/director/20150804211419_add_compilation_flag_to_instance.rb +7 -0
  10. data/db/migrations/director/20150918003455_add_bootstrap_node_to_instance.rb +7 -0
  11. data/db/migrations/director/20151008232214_add_dns_records.rb +7 -0
  12. data/db/migrations/director/20151015172551_add_orphan_disks_and_snapshots.rb +29 -0
  13. data/db/migrations/director/20151030222853_add_templates_to_instance.rb +10 -0
  14. data/db/migrations/director/20151031001039_add_spec_to_instance.rb +19 -0
  15. data/db/migrations/director/20151109190602_rename_orphan_columns.rb +13 -0
  16. data/lib/bosh/director.rb +19 -9
  17. data/lib/bosh/director/agent_client.rb +0 -17
  18. data/lib/bosh/director/api/cloud_config_manager.rb +7 -5
  19. data/lib/bosh/director/api/controllers/base_controller.rb +3 -2
  20. data/lib/bosh/director/api/controllers/cleanup_controller.rb +15 -0
  21. data/lib/bosh/director/api/controllers/deployments_controller.rb +38 -26
  22. data/lib/bosh/director/api/controllers/disks_controller.rb +20 -0
  23. data/lib/bosh/director/api/controllers/info_controller.rb +2 -2
  24. data/lib/bosh/director/api/controllers/releases_controller.rb +1 -16
  25. data/lib/bosh/director/api/controllers/stemcells_controller.rb +1 -9
  26. data/lib/bosh/director/api/deployment_manager.rb +2 -1
  27. data/lib/bosh/director/api/instance_lookup.rb +17 -0
  28. data/lib/bosh/director/api/instance_manager.rb +20 -10
  29. data/lib/bosh/director/api/release_manager.rb +28 -8
  30. data/lib/bosh/director/api/resurrector_manager.rb +9 -2
  31. data/lib/bosh/director/api/route_configuration.rb +2 -0
  32. data/lib/bosh/director/api/snapshot_manager.rb +9 -5
  33. data/lib/bosh/director/api/stemcell_manager.rb +50 -0
  34. data/lib/bosh/director/app.rb +1 -1
  35. data/lib/bosh/director/cloudcheck_helper.rb +119 -132
  36. data/lib/bosh/director/compile_task.rb +1 -1
  37. data/lib/bosh/director/compile_task_generator.rb +2 -2
  38. data/lib/bosh/director/config.rb +21 -12
  39. data/lib/bosh/director/deployment_deleter.rb +69 -0
  40. data/lib/bosh/director/deployment_plan.rb +35 -4
  41. data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +47 -0
  42. data/lib/bosh/director/deployment_plan/assembler.rb +115 -241
  43. data/lib/bosh/director/deployment_plan/availability_zone.rb +27 -0
  44. data/lib/bosh/director/deployment_plan/cloud_manifest_parser.rb +144 -35
  45. data/lib/bosh/director/deployment_plan/compilation_config.rb +21 -19
  46. data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +169 -0
  47. data/lib/bosh/director/deployment_plan/deployment_repo.rb +4 -8
  48. data/lib/bosh/director/deployment_plan/deployment_spec_parser.rb +13 -1
  49. data/lib/bosh/director/deployment_plan/deployment_validator.rb +17 -0
  50. data/lib/bosh/director/deployment_plan/desired_instance.rb +15 -0
  51. data/lib/bosh/director/deployment_plan/{disk_pool.rb → disk_type.rb} +14 -19
  52. data/lib/bosh/director/deployment_plan/dynamic_network.rb +105 -53
  53. data/lib/bosh/director/deployment_plan/dynamic_network_subnet.rb +13 -0
  54. data/lib/bosh/director/deployment_plan/env.rb +18 -0
  55. data/lib/bosh/director/deployment_plan/global_network_resolver.rb +77 -0
  56. data/lib/bosh/director/deployment_plan/instance.rb +222 -390
  57. data/lib/bosh/director/deployment_plan/instance_network_reservations.rb +71 -0
  58. data/lib/bosh/director/deployment_plan/instance_plan.rb +336 -0
  59. data/lib/bosh/director/deployment_plan/instance_plan_factory.rb +54 -0
  60. data/lib/bosh/director/deployment_plan/instance_plan_sorter.rb +61 -0
  61. data/lib/bosh/director/deployment_plan/instance_planner.rb +101 -0
  62. data/lib/bosh/director/deployment_plan/instance_repository.rb +36 -0
  63. data/lib/bosh/director/deployment_plan/instance_spec.rb +154 -0
  64. data/lib/bosh/director/deployment_plan/ip_provider/database_ip_repo.rb +136 -0
  65. data/lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb +81 -0
  66. data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +153 -0
  67. data/lib/bosh/director/deployment_plan/ip_provider/ip_provider_factory.rb +22 -0
  68. data/lib/bosh/director/deployment_plan/job.rb +116 -53
  69. data/lib/bosh/director/deployment_plan/job_availability_zone_parser.rb +49 -0
  70. data/lib/bosh/director/deployment_plan/job_migrator.rb +90 -0
  71. data/lib/bosh/director/deployment_plan/job_network.rb +42 -0
  72. data/lib/bosh/director/deployment_plan/job_network_parser.rb +118 -0
  73. data/lib/bosh/director/deployment_plan/job_spec_parser.rb +123 -126
  74. data/lib/bosh/director/deployment_plan/links/link.rb +30 -0
  75. data/lib/bosh/director/deployment_plan/links/link_lookup.rb +66 -0
  76. data/lib/bosh/director/deployment_plan/links/link_path.rb +27 -0
  77. data/lib/bosh/director/deployment_plan/links/links_resolver.rb +70 -0
  78. data/lib/bosh/director/deployment_plan/links/template_link.rb +21 -0
  79. data/lib/bosh/director/deployment_plan/manifest_migrator.rb +3 -17
  80. data/lib/bosh/director/deployment_plan/manifest_validator.rb +46 -0
  81. data/lib/bosh/director/deployment_plan/manual_network.rb +70 -97
  82. data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +148 -0
  83. data/lib/bosh/director/deployment_plan/network.rb +50 -39
  84. data/lib/bosh/director/deployment_plan/network_planner.rb +4 -0
  85. data/lib/bosh/director/deployment_plan/network_planner/plan.rb +26 -0
  86. data/lib/bosh/director/deployment_plan/network_planner/planner.rb +21 -0
  87. data/lib/bosh/director/deployment_plan/network_planner/reservation_reconciler.rb +81 -0
  88. data/lib/bosh/director/deployment_plan/network_planner/vip_static_ips_planner.rb +50 -0
  89. data/lib/bosh/director/deployment_plan/network_settings.rb +65 -0
  90. data/lib/bosh/director/deployment_plan/options/skip_drain.rb +7 -0
  91. data/lib/bosh/director/deployment_plan/package_validator.rb +79 -0
  92. data/lib/bosh/director/deployment_plan/placement_planner.rb +8 -0
  93. data/lib/bosh/director/deployment_plan/placement_planner/availability_zone_picker.rb +90 -0
  94. data/lib/bosh/director/deployment_plan/placement_planner/bruteforce_ip_allocation.rb +124 -0
  95. data/lib/bosh/director/deployment_plan/placement_planner/index_assigner.rb +32 -0
  96. data/lib/bosh/director/deployment_plan/placement_planner/networks_to_static_ips.rb +125 -0
  97. data/lib/bosh/director/deployment_plan/placement_planner/placed_desired_instances.rb +40 -0
  98. data/lib/bosh/director/deployment_plan/placement_planner/plan.rb +42 -0
  99. data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +237 -0
  100. data/lib/bosh/director/deployment_plan/placement_planner/unplaced_existing_instances.rb +53 -0
  101. data/lib/bosh/director/deployment_plan/planner.rb +186 -74
  102. data/lib/bosh/director/deployment_plan/planner_factory.rb +30 -147
  103. data/lib/bosh/director/deployment_plan/release_version.rb +3 -3
  104. data/lib/bosh/director/deployment_plan/resource_pool.rb +2 -174
  105. data/lib/bosh/director/deployment_plan/stemcell.rb +57 -14
  106. data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +28 -135
  107. data/lib/bosh/director/deployment_plan/steps/update_step.rb +23 -44
  108. data/lib/bosh/director/deployment_plan/template.rb +15 -4
  109. data/lib/bosh/director/deployment_plan/vip_network.rb +14 -42
  110. data/lib/bosh/director/deployment_plan/vm.rb +1 -99
  111. data/lib/bosh/director/deployment_plan/vm_type.rb +27 -0
  112. data/lib/bosh/director/disk_manager.rb +268 -0
  113. data/lib/bosh/director/dns/canonicalizer.rb +28 -0
  114. data/lib/bosh/director/dns/dns_manager.rb +163 -0
  115. data/lib/bosh/director/dns/local_dns_repo.rb +20 -0
  116. data/lib/bosh/director/dns/powerdns.rb +170 -0
  117. data/lib/bosh/director/errand/job_manager.rb +18 -29
  118. data/lib/bosh/director/error_ignorer.rb +16 -0
  119. data/lib/bosh/director/errors.rb +51 -20
  120. data/lib/bosh/director/event_log.rb +6 -0
  121. data/lib/bosh/director/instance_deleter.rb +53 -81
  122. data/lib/bosh/director/instance_reuser.rb +89 -0
  123. data/lib/bosh/director/instance_updater.rb +139 -281
  124. data/lib/bosh/director/instance_updater/preparer.rb +8 -5
  125. data/lib/bosh/director/instance_updater/state_applier.rb +21 -0
  126. data/lib/bosh/director/ip_util.rb +46 -26
  127. data/lib/bosh/director/job_renderer.rb +22 -10
  128. data/lib/bosh/director/job_runner.rb +1 -4
  129. data/lib/bosh/director/job_updater.rb +47 -35
  130. data/lib/bosh/director/job_updater_factory.rb +5 -4
  131. data/lib/bosh/director/jobs/base_job.rb +8 -0
  132. data/lib/bosh/director/jobs/cleanup_artifacts.rb +93 -0
  133. data/lib/bosh/director/jobs/delete_deployment.rb +10 -154
  134. data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
  135. data/lib/bosh/director/jobs/delete_orphan_disks.rb +44 -0
  136. data/lib/bosh/director/jobs/delete_release.rb +19 -196
  137. data/lib/bosh/director/jobs/delete_stemcell.rb +10 -76
  138. data/lib/bosh/director/jobs/export_release.rb +41 -121
  139. data/lib/bosh/director/jobs/fetch_logs.rb +0 -6
  140. data/lib/bosh/director/jobs/helpers.rb +10 -0
  141. data/lib/bosh/director/jobs/helpers/blob_deleter.rb +24 -0
  142. data/lib/bosh/director/jobs/helpers/compiled_package_deleter.rb +24 -0
  143. data/lib/bosh/director/jobs/helpers/name_version_release_deleter.rb +48 -0
  144. data/lib/bosh/director/jobs/helpers/package_deleter.rb +33 -0
  145. data/lib/bosh/director/jobs/helpers/release_deleter.rb +52 -0
  146. data/lib/bosh/director/jobs/helpers/release_version_deleter.rb +115 -0
  147. data/lib/bosh/director/jobs/helpers/releases_to_delete_picker.rb +31 -0
  148. data/lib/bosh/director/jobs/helpers/stemcell_deleter.rb +61 -0
  149. data/lib/bosh/director/jobs/helpers/stemcells_to_delete_picker.rb +30 -0
  150. data/lib/bosh/director/jobs/helpers/template_deleter.rb +20 -0
  151. data/lib/bosh/director/jobs/release/release_job.rb +18 -7
  152. data/lib/bosh/director/jobs/run_errand.rb +57 -36
  153. data/lib/bosh/director/jobs/scheduled_orphan_cleanup.rb +46 -0
  154. data/lib/bosh/director/jobs/ssh.rb +50 -17
  155. data/lib/bosh/director/jobs/update_deployment.rb +29 -11
  156. data/lib/bosh/director/jobs/update_release.rb +25 -4
  157. data/lib/bosh/director/jobs/vm_state.rb +23 -32
  158. data/lib/bosh/director/lock.rb +13 -8
  159. data/lib/bosh/director/logs_fetcher.rb +1 -1
  160. data/lib/bosh/director/models.rb +3 -0
  161. data/lib/bosh/director/models/compiled_package.rb +3 -3
  162. data/lib/bosh/director/models/deployment.rb +10 -0
  163. data/lib/bosh/director/models/instance.rb +77 -1
  164. data/lib/bosh/director/models/ip_address.rb +26 -0
  165. data/lib/bosh/director/models/orphan_disk.rb +23 -0
  166. data/lib/bosh/director/models/orphan_snapshot.rb +14 -0
  167. data/lib/bosh/director/models/template.rb +32 -9
  168. data/lib/bosh/director/models/vm.rb +5 -8
  169. data/lib/bosh/director/network_reservation.rb +69 -99
  170. data/lib/bosh/director/problem_handlers/inactive_disk.rb +5 -20
  171. data/lib/bosh/director/problem_handlers/missing_disk.rb +2 -13
  172. data/lib/bosh/director/problem_resolver.rb +2 -2
  173. data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +2 -21
  174. data/lib/bosh/director/scheduler.rb +23 -6
  175. data/lib/bosh/director/{instance_updater/stopper.rb → stopper.rb} +24 -18
  176. data/lib/bosh/director/tagged_logger.rb +30 -0
  177. data/lib/bosh/director/transactor.rb +9 -0
  178. data/lib/bosh/director/version.rb +1 -1
  179. data/lib/bosh/director/vm_creator.rb +91 -19
  180. data/lib/bosh/director/vm_deleter.rb +25 -0
  181. data/lib/bosh/director/vm_recreator.rb +15 -0
  182. data/lib/cloud/dummy.rb +381 -94
  183. metadata +110 -30
  184. data/lib/bosh/director/deployment_plan/dns_binder.rb +0 -45
  185. data/lib/bosh/director/deployment_plan/instance_vm_binder.rb +0 -37
  186. data/lib/bosh/director/deployment_plan/network_subnet.rb +0 -166
  187. data/lib/bosh/director/deployment_plan/resource_pools.rb +0 -68
  188. data/lib/bosh/director/dns_helper.rb +0 -223
  189. data/lib/bosh/director/instance_updater/network_updater.rb +0 -110
  190. data/lib/bosh/director/instance_updater/vm_updater.rb +0 -189
  191. data/lib/bosh/director/problem_handlers/out_of_sync_vm.rb +0 -64
  192. data/lib/bosh/director/problem_handlers/unbound_instance_vm.rb +0 -85
  193. data/lib/bosh/director/resource_pool_updater.rb +0 -174
  194. data/lib/bosh/director/vm_data.rb +0 -63
  195. data/lib/bosh/director/vm_reuser.rb +0 -63
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 806ce703c35b0836378c836b4dbe1813940ef3a3
4
- data.tar.gz: b01aa80bb323efcc97e5a4c6317b880b8a398c60
3
+ metadata.gz: b1587b4eccc78429904cf066ccf184484654ce06
4
+ data.tar.gz: 7894455133a637d96a5e3e33d01fb82e65d6ad3c
5
5
  SHA512:
6
- metadata.gz: 2956b476e13c7d6fe7674ef6314c7e936275de6a4e9d5040db6a6fe00fc7b9aa07ebb017ffce1c831678c46488aae31107b0712df17bde0cb1ce738b5274d1c1
7
- data.tar.gz: e08341fc184a328b34254afaf0aa987359da7908eb535732b23adc871a4a9182449400a00b030baac94c47e8d4d1c2db3f16276f3a0e086446b87ba3b87207ec
6
+ metadata.gz: cc9f2d84ad6a67d3497c88ec62d42a9a49f3811c1039dabe5e81fc75f1ef5e3adc9266990ebdbf3b86573c73ab9c2c258494142c73244a990fbdf9dc153e5cb8
7
+ data.tar.gz: 2f758e5cc31f37714690cdd13114f2999a0779d241307ac2b6479914727187d3338b8d0912ea417f677496de55f81c3544b4201e742338bebd6254964e73b9c1
@@ -70,18 +70,6 @@ end
70
70
 
71
71
  Resque::Failure.backend = Resque::Failure::Backtrace
72
72
 
73
- begin
74
- @resque_retries ||= 0
75
- worker.log "Starting worker #{worker}. Resque info:\n#{Resque.info.inspect}"
76
- worker.work(ENV['INTERVAL'] || 5) # interval, will block
77
- rescue Redis::TimeoutError => e
78
- worker.log "Redis timeout [#{@resque_retries}]. Error : #{e.inspect}"
79
- while @resque_retries < 10
80
- @resque_retries += 1
81
- sleep 0.5
82
- retry
83
- end
73
+ worker.log "Starting worker #{worker}"
84
74
 
85
- worker.log "Redis timeout max retries reached. Error: #{e.inspect}"
86
- raise e
87
- end
75
+ worker.work(ENV['INTERVAL'] || 5) # interval, will block
@@ -0,0 +1,11 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table :ip_addresses do
4
+ primary_key :id
5
+ String :network_name
6
+ Bignum :address, unique: true
7
+ Boolean :static
8
+ foreign_key :instance_id, :instances
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:templates) do
4
+ add_column :requires_json, String
5
+ add_column :provides_json, String
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:deployments) do
4
+ add_column :link_spec_json, String, :text => true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:ip_addresses) do
4
+ add_column :created_at, Time
5
+ add_column :task_id, String
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ require('securerandom')
2
+
3
+ Sequel.migration do
4
+ up do
5
+ alter_table(:instances) do
6
+ add_column :uuid, String, unique: true
7
+ end
8
+ self[:instances].each { |row| self[:instances].filter(id: row[:id]).update(uuid: SecureRandom.uuid) }
9
+ end
10
+
11
+ down do
12
+ alter_table(:instances) do
13
+ drop_column :uuid
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:instances) do
4
+ add_column :availability_zone, String
5
+ add_column :cloud_properties, String, :text => true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:instances) do
4
+ add_column :compilation, TrueClass, default: false
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:instances) do
4
+ add_column :bootstrap, TrueClass, default: false
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:instances) do
4
+ add_column :dns_records, String, text: true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,29 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:orphan_disks) do
4
+ primary_key :id
5
+ String :disk_cid, :null => false, :unique => true
6
+ Integer :size
7
+ String :availability_zone
8
+ String :deployment_name, :null => false
9
+ String :instance_name, :null => false
10
+ String :cloud_properties_json, :text => true
11
+ Time :orphaned_at, :null => false, :index => true
12
+ end
13
+
14
+ create_table(:orphan_snapshots) do
15
+ primary_key :id
16
+ foreign_key :orphan_disk_id, :orphan_disks, :null => false
17
+ String :snapshot_cid, :unique => true, :null => false
18
+ Boolean :clean, :default => false
19
+ Time :created_at, :null => false
20
+ Time :orphaned_at, :null => false, :index => true
21
+ end
22
+ end
23
+
24
+ down do
25
+ drop_table(:orphan_snapshots)
26
+ drop_table(:orphan_disks)
27
+ end
28
+ end
29
+
@@ -0,0 +1,10 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:instances_templates) do
4
+ primary_key :id
5
+ foreign_key :instance_id, :instances, :null => false
6
+ foreign_key :template_id, :templates, :null => false
7
+ unique [:instance_id, :template_id]
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:instances) do
4
+ add_column :spec_json, String, text: true
5
+ end
6
+
7
+ self[:instances].each do |instance|
8
+ next unless instance[:vm_id]
9
+
10
+ vm = self[:vms].filter(id: instance[:vm_id]).first
11
+
12
+ self[:instances].filter(id: instance[:id]).update(spec_json: vm[:apply_spec_json])
13
+ end
14
+
15
+ alter_table(:vms) do
16
+ drop_column(:apply_spec_json)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table :orphan_disks do
4
+ rename_column :orphaned_at, :created_at
5
+ end
6
+
7
+ alter_table :orphan_snapshots do
8
+ drop_column :created_at
9
+ rename_column :orphaned_at, :created_at
10
+ add_column :snapshot_created_at, Time
11
+ end
12
+ end
13
+ end
@@ -39,13 +39,16 @@ require 'securerandom'
39
39
  require 'common/thread_formatter'
40
40
  require 'bosh/core/encryption_handler'
41
41
  require 'bosh/director/api'
42
- require 'bosh/director/dns_helper'
42
+ require 'bosh/director/dns/canonicalizer'
43
+ require 'bosh/director/dns/dns_manager'
44
+ require 'bosh/director/dns/local_dns_repo'
43
45
  require 'bosh/director/errors'
44
46
  require 'bosh/director/ext'
45
47
  require 'bosh/director/ip_util'
46
48
  require 'bosh/director/lock_helper'
47
49
  require 'bosh/director/validation_helper'
48
50
  require 'bosh/director/download_helper'
51
+ require 'bosh/director/tagged_logger'
49
52
 
50
53
  require 'bosh/director/version'
51
54
  require 'bosh/director/config'
@@ -60,9 +63,10 @@ require 'bosh/director/job_renderer'
60
63
  require 'bosh/director/cycle_helper'
61
64
  require 'bosh/director/encryption_helper'
62
65
  require 'bosh/director/vm_creator'
66
+ require 'bosh/director/vm_recreator'
67
+ require 'bosh/director/vm_deleter'
63
68
  require 'bosh/director/vm_metadata_updater'
64
- require 'bosh/director/vm_data'
65
- require 'bosh/director/vm_reuser'
69
+ require 'bosh/director/instance_reuser'
66
70
  require 'bosh/director/deployment_plan'
67
71
  require 'bosh/director/errand'
68
72
  require 'bosh/director/duration'
@@ -70,9 +74,9 @@ require 'bosh/director/hash_string_vals'
70
74
  require 'bosh/director/instance_deleter'
71
75
  require 'bosh/director/instance_updater'
72
76
  require 'bosh/director/instance_updater/preparer'
73
- require 'bosh/director/instance_updater/stopper'
74
- require 'bosh/director/instance_updater/network_updater'
75
- require 'bosh/director/instance_updater/vm_updater'
77
+ require 'bosh/director/instance_updater/state_applier'
78
+ require 'bosh/director/disk_manager'
79
+ require 'bosh/director/stopper'
76
80
  require 'bosh/director/job_runner'
77
81
  require 'bosh/director/job_updater'
78
82
  require 'bosh/director/job_updater_factory'
@@ -82,7 +86,9 @@ require 'bosh/director/nats_rpc'
82
86
  require 'bosh/director/network_reservation'
83
87
  require 'bosh/director/problem_scanner/scanner'
84
88
  require 'bosh/director/problem_resolver'
85
- require 'bosh/director/resource_pool_updater'
89
+ require 'bosh/director/error_ignorer'
90
+ require 'bosh/director/deployment_deleter'
91
+ require 'bosh/director/transactor'
86
92
  require 'bosh/director/sequel'
87
93
  require 'common/thread_pool'
88
94
 
@@ -94,15 +100,14 @@ require 'bosh/director/problem_handlers/base'
94
100
  require 'bosh/director/problem_handlers/invalid_problem'
95
101
  require 'bosh/director/problem_handlers/inactive_disk'
96
102
  require 'bosh/director/problem_handlers/missing_disk'
97
- require 'bosh/director/problem_handlers/out_of_sync_vm'
98
103
  require 'bosh/director/problem_handlers/unresponsive_agent'
99
- require 'bosh/director/problem_handlers/unbound_instance_vm'
100
104
  require 'bosh/director/problem_handlers/mount_info_mismatch'
101
105
  require 'bosh/director/problem_handlers/missing_vm'
102
106
 
103
107
  require 'bosh/director/jobs/base_job'
104
108
  require 'bosh/director/jobs/backup'
105
109
  require 'bosh/director/jobs/scheduled_backup'
110
+ require 'bosh/director/jobs/scheduled_orphan_cleanup'
106
111
  require 'bosh/director/jobs/create_snapshot'
107
112
  require 'bosh/director/jobs/snapshot_deployment'
108
113
  require 'bosh/director/jobs/snapshot_deployments'
@@ -111,7 +116,9 @@ require 'bosh/director/jobs/delete_deployment'
111
116
  require 'bosh/director/jobs/delete_deployment_snapshots'
112
117
  require 'bosh/director/jobs/delete_release'
113
118
  require 'bosh/director/jobs/delete_snapshots'
119
+ require 'bosh/director/jobs/delete_orphan_disks'
114
120
  require 'bosh/director/jobs/delete_stemcell'
121
+ require 'bosh/director/jobs/cleanup_artifacts'
115
122
  require 'bosh/director/jobs/export_release'
116
123
  require 'bosh/director/jobs/update_deployment'
117
124
  require 'bosh/director/jobs/update_release'
@@ -124,6 +131,7 @@ require 'bosh/director/jobs/cloud_check/scan_and_fix'
124
131
  require 'bosh/director/jobs/cloud_check/apply_resolutions'
125
132
  require 'bosh/director/jobs/release/release_job'
126
133
  require 'bosh/director/jobs/ssh'
134
+ require 'bosh/director/jobs/helpers'
127
135
 
128
136
  require 'bosh/director/models/helpers/model_helper'
129
137
 
@@ -141,7 +149,9 @@ end
141
149
  require 'bosh/director/thread_pool'
142
150
  require 'bosh/director/api/extensions/scoping'
143
151
  require 'bosh/director/api/controllers/backups_controller'
152
+ require 'bosh/director/api/controllers/cleanup_controller'
144
153
  require 'bosh/director/api/controllers/deployments_controller'
154
+ require 'bosh/director/api/controllers/disks_controller'
145
155
  require 'bosh/director/api/controllers/packages_controller'
146
156
  require 'bosh/director/api/controllers/info_controller'
147
157
  require 'bosh/director/api/controllers/releases_controller'
@@ -19,11 +19,6 @@ module Bosh::Director
19
19
 
20
20
  attr_accessor :id
21
21
 
22
- def self.with_defaults(id, options = {})
23
- vm = Bosh::Director::Models::Vm.find(:agent_id => id)
24
- with_vm(vm, options)
25
- end
26
-
27
22
  def self.with_vm(vm, options = {})
28
23
  defaults = {
29
24
  retry_methods: {
@@ -70,14 +65,6 @@ module Bosh::Director
70
65
  send_message(:list_disk, *args)
71
66
  end
72
67
 
73
- def prepare_configure_networks(*args)
74
- send_message(:prepare_configure_networks, *args)
75
- end
76
-
77
- def prepare_network_change(*args)
78
- send_message(:prepare_network_change, *args)
79
- end
80
-
81
68
  def start(*args)
82
69
  send_message(:start, *args)
83
70
  end
@@ -158,10 +145,6 @@ module Bosh::Director
158
145
  task['value']
159
146
  end
160
147
 
161
- def configure_networks(*args)
162
- send_message(:configure_networks, *args)
163
- end
164
-
165
148
  def wait_until_ready(deadline = 600)
166
149
  old_timeout = @timeout
167
150
  @timeout = 1.0
@@ -6,7 +6,7 @@ module Bosh
6
6
  cloud_config = Bosh::Director::Models::CloudConfig.new(
7
7
  properties: cloud_config_yaml
8
8
  )
9
- validate_manifest(cloud_config)
9
+ validate_manifest!(cloud_config)
10
10
  cloud_config.save
11
11
  end
12
12
 
@@ -20,10 +20,12 @@ module Bosh
20
20
 
21
21
  private
22
22
 
23
- def validate_manifest(cloud_config)
24
- deployment = Bosh::Director::DeploymentPlan::CloudPlanner.new(cloud_config)
25
- parser = Bosh::Director::DeploymentPlan::CloudManifestParser.new(deployment, Config.logger)
26
- parser.parse(cloud_config.manifest)
23
+ def validate_manifest!(cloud_config)
24
+ # FIXME: we really just need to validate the manifest, we don't care about the subnets being able to reserve IPs here
25
+ global_network_resolver = Bosh::Director::DeploymentPlan::NullGlobalNetworkResolver.new
26
+
27
+ parser = Bosh::Director::DeploymentPlan::CloudManifestParser.new(Config.logger)
28
+ _ = parser.parse(cloud_config.manifest, global_network_resolver, nil) # valid if this doesn't blow up
27
29
  end
28
30
  end
29
31
  end
@@ -4,11 +4,11 @@ module Bosh::Director
4
4
  class BaseController < Sinatra::Base
5
5
  include ApiHelper
6
6
  include Http
7
- include DnsHelper
8
7
 
9
8
  def initialize(config)
10
9
  super()
11
10
  @config = config
11
+ @logger = Config.logger
12
12
  @identity_provider = config.identity_provider
13
13
  @deployment_manager = DeploymentManager.new
14
14
  @backup_manager = BackupManager.new
@@ -21,7 +21,8 @@ module Bosh::Director
21
21
  @stemcell_manager = StemcellManager.new
22
22
  @task_manager = TaskManager.new
23
23
  @vm_state_manager = VmStateManager.new
24
- @logger = Config.logger
24
+ @dns_manager = DnsManager.create
25
+ @disk_manager = DiskManager.new(nil, @logger)
25
26
  end
26
27
 
27
28
  register Bosh::Director::Api::Extensions::Scoping
@@ -0,0 +1,15 @@
1
+ require 'bosh/director/api/controllers/base_controller'
2
+
3
+ module Bosh::Director
4
+ module Api::Controllers
5
+ class CleanupController < BaseController
6
+ post '/', :consumes => :json do
7
+ job_queue = JobQueue.new
8
+ payload = json_decode(request.body)
9
+ task = Bosh::Director::Jobs::CleanupArtifacts.enqueue(current_user, payload['config'], job_queue)
10
+
11
+ redirect "/tasks/#{task.id}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -3,13 +3,14 @@ require 'bosh/director/api/controllers/base_controller'
3
3
  module Bosh::Director
4
4
  module Api::Controllers
5
5
  class DeploymentsController < BaseController
6
- get '/:deployment/jobs/:job/:index' do
7
- instance = @instance_manager.find_by_name(params[:deployment], params[:job], params[:index])
6
+ get '/:deployment/jobs/:job/:index_or_id' do
7
+ instance = @instance_manager.find_by_name(params[:deployment], params[:job], params[:index_or_id])
8
8
 
9
9
  response = {
10
10
  deployment: params[:deployment],
11
11
  job: instance.job,
12
12
  index: instance.index,
13
+ id: instance.uuid,
13
14
  state: instance.state,
14
15
  disks: instance.persistent_disks.map {|d| d.disk_cid}
15
16
  }
@@ -40,21 +41,20 @@ module Bosh::Director
40
41
  options['job_rename']['force'] = true if params['force'] == 'true'
41
42
  end
42
43
 
43
- # we get the deployment here even though it isn't used here, to make sure
44
- # the call returns a 404 if the deployment doesn't exist
45
- @deployment_manager.find_by_name(params[:deployment])
44
+ deployment = @deployment_manager.find_by_name(params[:deployment])
45
+ manifest = ((request.content_length.nil? || request.content_length.to_i == 0) && (params['state'])) ? StringIO.new(deployment.manifest) : request.body
46
+
46
47
  latest_cloud_config = Bosh::Director::Api::CloudConfigManager.new.latest
47
- task = @deployment_manager.create_deployment(current_user, request.body, latest_cloud_config, options)
48
+ task = @deployment_manager.create_deployment(current_user, manifest, latest_cloud_config, options)
48
49
  redirect "/tasks/#{task.id}"
49
50
  end
50
51
 
51
52
  # PUT /deployments/foo/jobs/dea/2?state={started,stopped,detached,restart,recreate}&skip_drain=true
52
- put '/:deployment/jobs/:job/:index', :consumes => :yaml do
53
- begin
54
- index = Integer(params[:index])
55
- rescue ArgumentError
56
- raise InstanceInvalidIndex, "Invalid instance index `#{params[:index]}'"
57
- end
53
+ put '/:deployment/jobs/:job/:index_or_id', :consumes => :yaml do
54
+ validate_instance_index_or_id(params[:index_or_id])
55
+
56
+ instance = @instance_manager.find_by_name(params[:deployment], params[:job], params[:index_or_id])
57
+ index = instance.index
58
58
 
59
59
  options = {
60
60
  'job_states' => {
@@ -68,24 +68,24 @@ module Bosh::Director
68
68
  options['skip_drain'] = params[:job] if params['skip_drain'] == 'true'
69
69
 
70
70
  deployment = @deployment_manager.find_by_name(params[:deployment])
71
- manifest = (request.content_length.nil? || request.content_length == 0) ? StringIO.new(deployment.manifest) : request.body
71
+ manifest = (request.content_length.nil? || request.content_length.to_i == 0) ? StringIO.new(deployment.manifest) : request.body
72
72
  latest_cloud_config = Bosh::Director::Api::CloudConfigManager.new.latest
73
73
  task = @deployment_manager.create_deployment(current_user, manifest, latest_cloud_config, options)
74
74
  redirect "/tasks/#{task.id}"
75
75
  end
76
76
 
77
77
  # GET /deployments/foo/jobs/dea/2/logs
78
- get '/:deployment/jobs/:job/:index/logs' do
78
+ get '/:deployment/jobs/:job/:index_or_id/logs' do
79
79
  deployment = params[:deployment]
80
80
  job = params[:job]
81
- index = params[:index]
81
+ index_or_id = params[:index_or_id]
82
82
 
83
83
  options = {
84
84
  'type' => params[:type].to_s.strip,
85
85
  'filters' => params[:filters].to_s.strip.split(/[\s\,]+/)
86
86
  }
87
87
 
88
- task = @instance_manager.fetch_logs(current_user, deployment, job, index, options)
88
+ task = @instance_manager.fetch_logs(current_user, deployment, job, index_or_id, options)
89
89
  redirect "/tasks/#{task.id}"
90
90
  end
91
91
 
@@ -108,14 +108,18 @@ module Bosh::Director
108
108
  redirect "/tasks/#{task.id}"
109
109
  end
110
110
 
111
- put '/:deployment/jobs/:job/:index/resurrection', consumes: :json do
111
+ put '/:deployment/jobs/:job/:index_or_id/resurrection', consumes: :json do
112
112
  payload = json_decode(request.body)
113
113
 
114
- @resurrector_manager.set_pause_for_instance(params[:deployment], params[:job], params[:index], payload['resurrection_paused'])
114
+ @resurrector_manager.set_pause_for_instance(params[:deployment], params[:job], params[:index_or_id], payload['resurrection_paused'])
115
115
  end
116
116
 
117
- post '/:deployment/jobs/:job/:index/snapshots' do
118
- instance = @instance_manager.find_by_name(params[:deployment], params[:job], params[:index])
117
+ post '/:deployment/jobs/:job/:index_or_id/snapshots' do
118
+ if params[:index_or_id].to_s =~ /^\d+$/
119
+ instance = @instance_manager.find_by_name(params[:deployment], params[:job], params[:index_or_id])
120
+ else
121
+ instance = @instance_manager.filter_by(uuid: params[:index_or_id]).first
122
+ end
119
123
  # until we can tell the agent to flush and wait, all snapshots are considered dirty
120
124
  options = {clean: false}
121
125
 
@@ -296,7 +300,7 @@ module Bosh::Director
296
300
  end
297
301
 
298
302
  get '/:deployment_name/errands', scope: :read do
299
- deployment_plan = load_deployment_plan_without_binding
303
+ deployment_plan = load_deployment_plan
300
304
 
301
305
  errands = deployment_plan.jobs.select(&:can_run_as_errand?)
302
306
 
@@ -309,13 +313,11 @@ module Bosh::Director
309
313
 
310
314
  private
311
315
 
312
- def load_deployment_plan_without_binding
316
+ def load_deployment_plan
313
317
  deployment_model = @deployment_manager.find_by_name(params[:deployment_name])
314
- manifest_hash = Psych.load(deployment_model.manifest)
315
- cloud_config_model = deployment_model.cloud_config
316
318
 
317
- planner_factory = Bosh::Director::DeploymentPlan::PlannerFactory.create(Config.event_log, Config.logger)
318
- planner_factory.planner_without_vm_binding(manifest_hash, cloud_config_model, {})
319
+ planner_factory = Bosh::Director::DeploymentPlan::PlannerFactory.create(Config.logger)
320
+ planner_factory.create_from_model(deployment_model)
319
321
  end
320
322
 
321
323
  def convert_job_instance_hash(hash)
@@ -334,6 +336,16 @@ module Bosh::Director
334
336
  instances = @instance_manager.filter_by(filter)
335
337
  instances.any?
336
338
  end
339
+
340
+ def validate_instance_index_or_id(str)
341
+ begin
342
+ Integer(str)
343
+ rescue ArgumentError
344
+ if str !~ /^[A-Fa-f0-9]{8}-[A-Fa-f0-9-]{27}$/
345
+ raise InstanceInvalidIndex, "Invalid instance index or id `#{str}'"
346
+ end
347
+ end
348
+ end
337
349
  end
338
350
  end
339
351
  end