Class: Bosh::Director::DeploymentPlan::Planner
- Extended by:
- Forwardable
- Includes:
- Bosh::Director::DnsHelper, LockHelper, ValidationHelper
- Defined in:
- lib/bosh/director/deployment_plan/planner.rb
Constant Summary
Constants included from Bosh::Director::DnsHelper
Bosh::Director::DnsHelper::SOA, Bosh::Director::DnsHelper::TTL_4H, Bosh::Director::DnsHelper::TTL_5M
Instance Attribute Summary collapse
-
#canonical_name ⇒ String
readonly
Deployment canonical name (for DNS).
-
#dns_domain ⇒ Object
Returns the value of attribute dns_domain.
-
#job_rename ⇒ Object
readonly
Returns the value of attribute job_rename.
-
#jobs ⇒ Array<Bosh::Director::DeploymentPlan::Job>
readonly
All jobs in the deployment.
-
#model ⇒ Models::Deployment
readonly
Deployment DB model.
-
#name ⇒ String
readonly
Deployment name.
-
#properties ⇒ Object
Returns the value of attribute properties.
-
#recreate ⇒ Boolean
readonly
Indicates whether VMs should be recreated.
-
#skip_drain ⇒ Boolean
readonly
Indicates whether VMs should be drained.
-
#unneeded_instances ⇒ Object
Job instances from the old manifest that are not in the new manifest.
-
#unneeded_vms ⇒ Object
VMs from the old manifest that are not in the new manifest.
-
#update ⇒ Bosh::Director::DeploymentPlan::UpdateConfig
Default job update configuration.
Instance Method Summary collapse
-
#add_job(job) ⇒ Object
Adds a job by name.
-
#add_release(release) ⇒ Object
Adds a release by name.
-
#delete_instance(instance) ⇒ Object
Adds instance to deletion queue.
-
#delete_vm(vm) ⇒ Object
Adds a VM to deletion queue.
-
#initialize(attrs, manifest_text, cloud_config, deployment_model, options = {}) ⇒ Planner
constructor
A new instance of Planner.
-
#job(name) ⇒ Bosh::Director::DeploymentPlan::Job
Returns a named job.
- #jobs_starting_on_deploy ⇒ Object
- #persist_updates! ⇒ Object
-
#release(name) ⇒ Bosh::Director::DeploymentPlan::ReleaseVersion
Returns a named release.
-
#releases ⇒ Array<Bosh::Director::DeploymentPlan::ReleaseVersion>
Returns all releases in a deployment plan.
- #rename_in_progress? ⇒ Boolean
- #reset_jobs ⇒ Object
- #skip_drain_for_job?(name) ⇒ Boolean
- #update_stemcell_references! ⇒ Object
-
#vms ⇒ Array<Models::Vm>
Returns a list of VMs in the deployment (according to DB).
Methods included from ValidationHelper
Methods included from Bosh::Director::DnsHelper
#add_default_dns_server, #canonical, #default_dns_server, #delete_dns_records, #delete_empty_domain, #dns_domain_name, #dns_ns_record, #dns_servers, #flush_dns_cache, #invalid_dns, #reverse_domain, #reverse_host, #update_dns_a_record, #update_dns_ptr_record
Methods included from LockHelper
#with_compile_lock, #with_deployment_lock, #with_release_lock, #with_release_locks, #with_stemcell_lock
Constructor Details
#initialize(attrs, manifest_text, cloud_config, deployment_model, options = {}) ⇒ Planner
Returns a new instance of Planner.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 52 def initialize(attrs, manifest_text, cloud_config, deployment_model, = {}) @name = attrs.fetch(:name) @properties = attrs.fetch(:properties) @releases = {} @manifest_text = Bosh::Common::DeepCopy.copy(manifest_text) @cloud_config = cloud_config @cloud_planner = CloudPlanner.new(cloud_config) @model = deployment_model @jobs = [] @jobs_name_index = {} @jobs_canonical_name_index = Set.new @unneeded_vms = [] @unneeded_instances = [] @dns_domain = nil @job_rename = safe_property(, 'job_rename', :class => Hash, :default => {}) @recreate = !!['recreate'] @skip_drain = SkipDrain.new(['skip_drain']) end |
Instance Attribute Details
#canonical_name ⇒ String (readonly)
Returns Deployment canonical name (for DNS).
21 22 23 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 21 def canonical_name @canonical_name end |
#dns_domain ⇒ Object
Returns the value of attribute dns_domain.
42 43 44 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 42 def dns_domain @dns_domain end |
#job_rename ⇒ Object (readonly)
Returns the value of attribute job_rename.
44 45 46 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 44 def job_rename @job_rename end |
#jobs ⇒ Array<Bosh::Director::DeploymentPlan::Job> (readonly)
Returns All jobs in the deployment.
34 35 36 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 34 def jobs @jobs end |
#model ⇒ Models::Deployment (readonly)
Returns Deployment DB model.
24 25 26 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 24 def model @model end |
#name ⇒ String (readonly)
Returns Deployment name.
18 19 20 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 18 def name @name end |
#properties ⇒ Object
Returns the value of attribute properties.
26 27 28 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 26 def properties @properties end |
#recreate ⇒ Boolean (readonly)
Returns Indicates whether VMs should be recreated.
47 48 49 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 47 def recreate @recreate end |
#skip_drain ⇒ Boolean (readonly)
Returns Indicates whether VMs should be drained.
50 51 52 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 50 def skip_drain @skip_drain end |
#unneeded_instances ⇒ Object
Job instances from the old manifest that are not in the new manifest
37 38 39 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 37 def unneeded_instances @unneeded_instances end |
#unneeded_vms ⇒ Object
VMs from the old manifest that are not in the new manifest
40 41 42 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 40 def unneeded_vms @unneeded_vms end |
#update ⇒ Bosh::Director::DeploymentPlan::UpdateConfig
Returns Default job update configuration.
30 31 32 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 30 def update @update end |
Instance Method Details
#add_job(job) ⇒ Object
Adds a job by name
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 136 def add_job(job) if rename_in_progress? && @job_rename['old_name'] == job.name raise DeploymentRenamedJobNameStillUsed, "Renamed job `#{job.name}' is still referenced in " + 'deployment manifest' end if @jobs_canonical_name_index.include?(job.canonical_name) raise DeploymentCanonicalJobNameTaken, "Invalid job name `#{job.name}', canonical name already taken" end @jobs << job @jobs_name_index[job.name] = job @jobs_canonical_name_index << job.canonical_name end |
#add_release(release) ⇒ Object
Adds a release by name
98 99 100 101 102 103 104 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 98 def add_release(release) if @releases.has_key?(release.name) raise DeploymentDuplicateReleaseName, "Duplicate release name `#{release.name}'" end @releases[release.name] = release end |
#delete_instance(instance) ⇒ Object
Adds instance to deletion queue
126 127 128 129 130 131 132 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 126 def delete_instance(instance) if @jobs_name_index.has_key?(instance.job) @jobs_name_index[instance.job].unneeded_instances << instance else @unneeded_instances << instance end end |
#delete_vm(vm) ⇒ Object
Adds a VM to deletion queue
120 121 122 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 120 def delete_vm(vm) @unneeded_vms << vm end |
#job(name) ⇒ Bosh::Director::DeploymentPlan::Job
Returns a named job
156 157 158 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 156 def job(name) @jobs_name_index[name] end |
#jobs_starting_on_deploy ⇒ Object
164 165 166 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 164 def jobs_starting_on_deploy @jobs.select(&:starts_on_deploy?) end |
#persist_updates! ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 172 def persist_updates! #prior updates may have had release versions that we no longer use. #remove the references to these stale releases. stale_release_versions = (model.release_versions - releases.map(&:model)) stale_release_names = stale_release_versions.map {|version_model| version_model.release.name}.uniq with_release_locks(stale_release_names) do stale_release_versions.each do |release_version| model.remove_release_version(release_version) end end model.manifest = Psych.dump(@manifest_text) model.cloud_config = @cloud_config model.save end |
#release(name) ⇒ Bosh::Director::DeploymentPlan::ReleaseVersion
Returns a named release
114 115 116 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 114 def release(name) @releases[name] end |
#releases ⇒ Array<Bosh::Director::DeploymentPlan::ReleaseVersion>
Returns all releases in a deployment plan
108 109 110 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 108 def releases @releases.values end |
#rename_in_progress? ⇒ Boolean
168 169 170 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 168 def rename_in_progress? @job_rename['old_name'] && @job_rename['new_name'] end |
#reset_jobs ⇒ Object
160 161 162 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 160 def reset_jobs @jobs = [] end |
#skip_drain_for_job?(name) ⇒ Boolean
92 93 94 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 92 def skip_drain_for_job?(name) @skip_drain.nil? ? false : @skip_drain.for_job(name) end |
#update_stemcell_references! ⇒ Object
188 189 190 191 192 193 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 188 def update_stemcell_references! current_stemcell_models = resource_pools.map { |pool| pool.stemcell.model } model.stemcells.each do |deployment_stemcell| deployment_stemcell.remove_deployment(model) unless current_stemcell_models.include?(deployment_stemcell) end end |
#vms ⇒ Array<Models::Vm>
Returns a list of VMs in the deployment (according to DB)
88 89 90 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 88 def vms @model.vms end |