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
@@ -1,64 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- module Bosh::Director
4
- module ProblemHandlers
5
- class OutOfSyncVm < Base
6
-
7
- register_as :out_of_sync_vm
8
- auto_resolution :ignore
9
-
10
- def initialize(vm_id, data)
11
- super
12
- @vm = Models::Vm[vm_id]
13
- @data = data
14
-
15
- if @vm.nil?
16
- handler_error("VM `#{vm_id}' is no longer in the database")
17
- end
18
-
19
- @deployment = @vm.deployment
20
- @instance = @vm.instance
21
-
22
- if @deployment.nil?
23
- handler_error("VM `#{@vm.cid}' doesn't belong to any deployment")
24
- end
25
-
26
- end
27
-
28
- def description
29
- actual_deployment = @data["deployment"] || "unknown deployment"
30
- actual_job = @data["job"] || "unknown job"
31
- actual_index = @data["index"] || "unknown index"
32
-
33
- expected = "#{@deployment.name}: #{instance_name(@vm)}"
34
- actual = "#{actual_deployment}: #{actual_job}/#{actual_index}"
35
-
36
- "VM `#{@vm.cid}' is out of sync: expected `#{expected}', got `#{actual}'"
37
- end
38
-
39
- resolution :ignore do
40
- plan { "Skip for now" }
41
- action { }
42
- end
43
-
44
- resolution :delete_vm do
45
- plan { "Delete VM (unless it has persistent disk)"}
46
- action { validate; delete_vm(@vm) }
47
- end
48
-
49
- def validate
50
- state = agent_timeout_guard(@vm) { |agent | agent.get_state }
51
- return if state["deployment"] != @deployment.name
52
-
53
- # VM is no longer out of sync if no instance is referencing it,
54
- # as this situation can actually be handled by regular deployment
55
- if @instance.nil? ||
56
- state["job"] && state["job"]["name"] == @instance.job &&
57
- state["index"] == @instance.index
58
- handler_error("VM is now back in sync")
59
- end
60
- end
61
-
62
- end
63
- end
64
- end
@@ -1,85 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- module Bosh::Director
4
- module ProblemHandlers
5
- class UnboundInstanceVm < Base
6
-
7
- register_as :unbound_instance_vm
8
- auto_resolution :reassociate_vm
9
-
10
- def initialize(vm_id, data)
11
- super
12
-
13
- @vm = Models::Vm[vm_id]
14
- @data = data
15
-
16
- if @vm.nil?
17
- handler_error("VM `#{vm_id}' is no longer in the database")
18
- end
19
-
20
- if @vm.agent_id.nil?
21
- handler_error("VM `#{vm_id}' doesn't have an agent id")
22
- end
23
-
24
- if @vm.cid.nil?
25
- handler_error("VM `#{vm_id}' doesn't have a cloud id")
26
- end
27
-
28
- end
29
-
30
- def description
31
- job = @data["job"] || "unknown job"
32
- index = @data["index"] || "unknown index"
33
- "VM `#{@vm.cid}' reports itself as `#{job}/#{index}' but does not have a bound instance"
34
- end
35
-
36
- resolution :ignore do
37
- plan { "Skip for now" }
38
- action { }
39
- end
40
-
41
- resolution :delete_vm do
42
- plan { "Delete VM (unless it has persistent disk)" }
43
- action { validate; delete_vm(@vm) }
44
- end
45
-
46
- resolution :reassociate_vm do
47
- plan { "Reassociate VM with corresponding instance" }
48
- action { validate; reassociate_vm }
49
- end
50
-
51
- def validate
52
- unless @vm.instance.nil?
53
- handler_error("Instance is now bound to VM")
54
- end
55
-
56
- state = agent_timeout_guard(@vm) { |agent| agent.get_state }
57
- if state["job"].nil?
58
- handler_error("VM now properly reports no job")
59
- end
60
- end
61
-
62
- def reassociate_vm
63
- instances = Models::Instance.
64
- filter(:deployment_id => @vm.deployment_id,
65
- :job => @data["job"], :index => @data["index"]).all
66
-
67
- if instances.size > 1
68
- handler_error("More than one instance in DB matches this VM")
69
- end
70
-
71
- if instances.empty?
72
- handler_error("No instances in DB match this VM")
73
- end
74
-
75
- instance = instances[0]
76
-
77
- if instance.vm
78
- handler_error("The corresponding instance is associated with another VM")
79
- end
80
-
81
- instance.update(:vm => @vm)
82
- end
83
- end
84
- end
85
- end
@@ -1,174 +0,0 @@
1
- module Bosh::Director
2
- class ResourcePoolUpdater
3
- def initialize(resource_pool)
4
- @resource_pool = resource_pool
5
- @cloud = Config.cloud
6
- @logger = Config.logger
7
- @event_log = Config.event_log
8
- end
9
-
10
- ##
11
- # Creates VMs that are considered missing from the deployment
12
- #
13
- # @param [ThreadPool] thread_pool Thread pool that will be used to
14
- # parallelize the operation
15
- # @yield [VirtualMachine] filter for which missing VMs to create
16
- def create_missing_vms(thread_pool)
17
- counter = 0
18
- vms_to_process = []
19
-
20
- @resource_pool.vms.each do |vm|
21
- next if vm.model
22
- if !block_given? || yield(vm)
23
- counter += 1
24
- vms_to_process << vm
25
- end
26
- end
27
-
28
- @logger.info("Creating #{counter} missing VMs")
29
- vms_to_process.each_with_index do |vm, index|
30
- thread_pool.process do
31
- @event_log.track("#{@resource_pool.name}/#{index}") do
32
- with_thread_name("create_missing_vm(#{@resource_pool.name}, #{index}/#{counter})") do
33
- @logger.info("Creating missing VM")
34
- create_missing_vm(vm)
35
- end
36
- end
37
- end
38
- end
39
- end
40
-
41
- # Creates missing VMs that have bound instances
42
- # (as opposed to missing resource pool VMs)
43
- def create_bound_missing_vms(thread_pool)
44
- create_missing_vms(thread_pool) { |vm| !vm.bound_instance.nil? }
45
- end
46
-
47
- def create_missing_vm(vm)
48
- deployment = @resource_pool.deployment_plan.model
49
- stemcell = @resource_pool.stemcell.model
50
-
51
- vm_model = VmCreator.new.create(deployment, stemcell, @resource_pool.cloud_properties,
52
- vm.network_settings, nil, @resource_pool.env)
53
- agent = AgentClient.with_defaults(vm_model.agent_id)
54
- agent.wait_until_ready
55
- agent.update_settings(Config.trusted_certs)
56
- vm_model.update(:trusted_certs_sha1 => Digest::SHA1.hexdigest(Config.trusted_certs))
57
-
58
- update_state(agent, vm_model, vm)
59
-
60
- vm.model = vm_model
61
- vm.current_state = agent.get_state
62
- rescue Exception => e
63
- @logger.info("Cleaning up the created VM due to an error: #{e}")
64
- begin
65
- @cloud.delete_vm(vm_model.cid) if vm_model && vm_model.cid
66
- vm_model.destroy if vm_model && vm_model.id
67
- rescue Exception
68
- @logger.info("Could not cleanup VM: #{vm_model.cid}") if vm_model
69
- end
70
- raise e
71
- end
72
-
73
- def update_state(agent, vm_model, vm)
74
- state = {
75
- "deployment" => @resource_pool.deployment_plan.name,
76
- "resource_pool" => @resource_pool.spec,
77
- "networks" => vm.network_settings
78
- }
79
-
80
- vm_model.update(:apply_spec => state)
81
- agent.apply(state)
82
- end
83
-
84
- # Deletes extra VMs in a resource pool
85
- # @param thread_pool Thread pool used to parallelize delete operations
86
- def delete_extra_vms(thread_pool)
87
- count = @resource_pool.extra_vm_count
88
- @logger.info("Deleting #{count} extra VMs")
89
-
90
- count.times do
91
- vm = @resource_pool.idle_vms.shift
92
- vm_cid = vm.model.cid
93
-
94
- thread_pool.process do
95
- @event_log.track("#{@resource_pool.name}/#{vm_cid}") do
96
- @logger.info("Deleting extra VM: #{vm_cid}")
97
- @cloud.delete_vm(vm_cid)
98
- vm.model.destroy
99
- end
100
- end
101
- end
102
- end
103
-
104
- def delete_outdated_idle_vms(thread_pool)
105
- count = outdated_idle_vm_count
106
- index = 0
107
- index_lock = Mutex.new
108
-
109
- @logger.info("Deleting #{count} outdated idle VMs")
110
-
111
- @resource_pool.idle_vms.each do |vm|
112
- next unless vm.model && vm.changed?
113
- vm_cid = vm.model.cid
114
-
115
- thread_pool.process do
116
- @event_log.track("#{@resource_pool.name}/#{vm_cid}") do
117
- index_lock.synchronize { index += 1 }
118
-
119
- with_thread_name("delete_outdated_vm(#{@resource_pool.name}, #{index - 1}/#{count})") do
120
- @logger.info("Deleting outdated VM: #{vm_cid}")
121
- @cloud.delete_vm(vm_cid)
122
- vm_model = vm.model
123
- vm.clean_vm
124
- vm_model.destroy
125
- end
126
- end
127
- end
128
- end
129
- end
130
-
131
- # Attempts to allocate a dynamic IP address for all idle VMs
132
- # (unless they already have one). This allows us to fail earlier
133
- # in case any of resource pools is not big enough to accommodate
134
- # those VMs.
135
- def reserve_networks
136
- @resource_pool.reserve_dynamic_networks
137
- end
138
-
139
- def generate_agent_id
140
- SecureRandom.uuid
141
- end
142
-
143
- def extra_vm_count
144
- @resource_pool.extra_vm_count
145
- end
146
-
147
- def outdated_idle_vm_count
148
- counter = 0
149
- @resource_pool.idle_vms.each do |vm|
150
- counter += 1 if vm.model && vm.changed?
151
- end
152
- counter
153
- end
154
-
155
- def missing_vm_count
156
- counter = 0
157
- @resource_pool.vms.each do |vm|
158
- next if vm.model
159
- counter += 1
160
- end
161
- counter
162
- end
163
-
164
- def bound_missing_vm_count
165
- counter = 0
166
- @resource_pool.vms.each do |vm|
167
- next if vm.model
168
- next if vm.bound_instance.nil?
169
- counter += 1
170
- end
171
- counter
172
- end
173
- end
174
- end
@@ -1,63 +0,0 @@
1
- module Bosh::Director
2
- # A class for storing VMs and their associated data so that they can be
3
- # accessed and deleted easily.
4
- class VmData
5
-
6
- # @attr [NetworkReservation] The network reservation for this VM.
7
- attr_reader :reservation
8
-
9
- # @attr [Models::Vm] The VM.
10
- attr_reader :vm
11
-
12
- # @attr[Models::Stemcell] The Stemcell this VM is running.
13
- attr_reader :stemcell
14
-
15
- # @attr [Hash] A hash containing the network reservation.
16
- attr_reader :network_settings
17
-
18
- # @attr [Integer] The agent ID running on this VM.
19
- attr_reader :agent_id
20
-
21
- # @attr [AgentClient] The agent running on this VM.
22
- attr_accessor :agent
23
-
24
- # Initializes a VmData.
25
- # @param [NetworkReservation] reservation The network reservation for this VM.
26
- # @param [Models::Vm] vm The VM to be reused.
27
- # @param [Models::Stemcell] stemcell The Stemcell to make the VM on.
28
- # @param [Hash] network_settings A hash containing the network reservation.
29
- def initialize(reservation, vm, stemcell, network_settings)
30
- @reservation = reservation
31
- @vm = vm
32
- @stemcell = stemcell
33
- @network_settings = network_settings
34
- @agent_id = vm.agent_id
35
- @being_used = false
36
- @being_used_mutex = Mutex.new
37
- end
38
-
39
- # Marks that this VM is being used.
40
- # @return [Boolean] Returns whether it could successfully mark this VM as in use.
41
- def mark_in_use
42
- @being_used_mutex.synchronize do
43
- if @being_used
44
- return false
45
- else
46
- @being_used = true
47
- return true
48
- end
49
- end
50
- end
51
-
52
- # Releases the current VM to be reused.
53
- def release
54
- @being_used_mutex.synchronize do
55
- @being_used = false
56
- end
57
- end
58
-
59
- def in_use?
60
- @being_used
61
- end
62
- end
63
- end
@@ -1,63 +0,0 @@
1
- module Bosh::Director
2
- # A class for maintaining VmData objects, making reusing VMs easier.
3
- class VmReuser
4
- def initialize
5
- @stemcells_to_vms = {}
6
- end
7
-
8
- # Adds a VM's information to the pool of VMs that can be reused.
9
- # @param [NetworkReservation] reservation The network reservation for this VM.
10
- # @param [Models::Vm] vm The VM to be reused.
11
- # @param [Models::Stemcell] stemcell The Stemcell to make the VM on.
12
- # @param [Hash] network_settings A hash containing the network reservation.
13
- # @return [VmData] The VmData instance for the new VM.
14
- def add_vm(reservation, vm, stemcell, network_settings)
15
- vm_d = VmData.new(reservation, vm, stemcell, network_settings)
16
- @stemcells_to_vms[stemcell] ||= []
17
- @stemcells_to_vms[stemcell] << vm_d
18
- vm_d.mark_in_use
19
- vm_d
20
- end
21
-
22
- # Returns the VmData instance of a VM that is not in use and can be reused.
23
- # @param [Models::Stemcell] stemcell The stemcell that the VM must be running.
24
- # @return [VmData?] The VmData instance for an existing unused VM, if one exists. Otherwise, nil.
25
- def get_vm(stemcell)
26
- unless @stemcells_to_vms[stemcell].nil?
27
- @stemcells_to_vms[stemcell].each do |vm_data|
28
- if vm_data.mark_in_use
29
- return vm_data
30
- end
31
- end
32
- end
33
- nil
34
- end
35
-
36
- def remove_vm(vm)
37
- @stemcells_to_vms.each_value do |vms|
38
- vms.each do |vm_data|
39
- vms.delete(vm_data) if vm_data.vm == vm
40
- end
41
- end
42
- end
43
-
44
- # Gets the total number of compilation VMs created with a given stemcell.
45
- # @param [Models::Stemcell] stemcell The stemcell the VMs are running.
46
- # @return [Integer] The number of VMs running a given stemcell.
47
- def get_num_vms(stemcell)
48
- @stemcells_to_vms[stemcell].nil? ? 0 : @stemcells_to_vms[stemcell].size
49
- end
50
-
51
- # An iterator for all compilation VMs on all stemcells.
52
- # @yield [VmData] Yields each VM in VmReuser.
53
- def each
54
- @stemcells_to_vms.each do |stemcell, vms|
55
- vms.each do |vm|
56
- yield vm
57
- end
58
- end
59
- end
60
-
61
- end
62
-
63
- end