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.
-
#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
- #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.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 48 def initialize(attrs, manifest_text, cloud_config, deployment_model, = {}) @name = attrs.fetch(:name) @properties = attrs.fetch(:properties) @releases = {} @manifest_text = 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'] end |
Instance Attribute Details
#canonical_name ⇒ String (readonly)
Returns Deployment canonical name (for DNS).
20 21 22 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 20 def canonical_name @canonical_name end |
#dns_domain ⇒ Object
Returns the value of attribute dns_domain.
41 42 43 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 41 def dns_domain @dns_domain end |
#job_rename ⇒ Object (readonly)
Returns the value of attribute job_rename.
43 44 45 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 43 def job_rename @job_rename end |
#jobs ⇒ Array<Bosh::Director::DeploymentPlan::Job> (readonly)
Returns All jobs in the deployment.
33 34 35 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 33 def jobs @jobs end |
#model ⇒ Models::Deployment (readonly)
Returns Deployment DB model.
23 24 25 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 23 def model @model end |
#name ⇒ String (readonly)
Returns Deployment name.
17 18 19 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 17 def name @name end |
#properties ⇒ Object
Returns the value of attribute properties.
25 26 27 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 25 def properties @properties end |
#recreate ⇒ Boolean (readonly)
Returns Indicates whether VMs should be recreated.
46 47 48 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 46 def recreate @recreate end |
#unneeded_instances ⇒ Object
Job instances from the old manifest that are not in the new manifest
36 37 38 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 36 def unneeded_instances @unneeded_instances end |
#unneeded_vms ⇒ Object
VMs from the old manifest that are not in the new manifest
39 40 41 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 39 def unneeded_vms @unneeded_vms end |
#update ⇒ Bosh::Director::DeploymentPlan::UpdateConfig
Returns Default job update configuration.
29 30 31 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 29 def update @update end |
Instance Method Details
#add_job(job) ⇒ Object
Adds a job by name
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 127 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
89 90 91 92 93 94 95 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 89 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
117 118 119 120 121 122 123 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 117 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
111 112 113 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 111 def delete_vm(vm) @unneeded_vms << vm end |
#job(name) ⇒ Bosh::Director::DeploymentPlan::Job
Returns a named job
147 148 149 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 147 def job(name) @jobs_name_index[name] end |
#jobs_starting_on_deploy ⇒ Object
151 152 153 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 151 def jobs_starting_on_deploy @jobs.select(&:starts_on_deploy?) end |
#persist_updates! ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 159 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
105 106 107 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 105 def release(name) @releases[name] end |
#releases ⇒ Array<Bosh::Director::DeploymentPlan::ReleaseVersion>
Returns all releases in a deployment plan
99 100 101 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 99 def releases @releases.values end |
#rename_in_progress? ⇒ Boolean
155 156 157 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 155 def rename_in_progress? @job_rename['old_name'] && @job_rename['new_name'] end |
#update_stemcell_references! ⇒ Object
175 176 177 178 179 180 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 175 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)
83 84 85 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 83 def vms @model.vms end |