Class: Bosh::Director::DeploymentPlan::Planner
- Includes:
- Bosh::Director::DnsHelper, 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).
-
#compilation ⇒ Bosh::Director::DeploymentPlan::CompilationConfig
Resource pool and other configuration for compilation workers.
-
#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.
Class Method Summary collapse
Instance Method Summary collapse
-
#add_disk_pool(disk_pool) ⇒ Object
Adds a disk pool by name.
-
#add_job(job) ⇒ Object
Adds a job by name.
-
#add_network(network) ⇒ Object
Adds a network by name.
-
#add_release(release) ⇒ Object
Adds a release by name.
-
#add_resource_pool(resource_pool) ⇒ Object
Adds a resource pool by name.
-
#bind_model ⇒ void
Looks up deployment model in DB or creates one if needed.
-
#delete_instance(instance) ⇒ Object
Adds instance to deletion queue.
-
#delete_vm(vm) ⇒ Object
Adds a VM to deletion queue.
- #disk_pool(name) ⇒ Object
- #disk_pools ⇒ Object
-
#initialize(name, options = {}) ⇒ Planner
constructor
A new instance of Planner.
-
#job(name) ⇒ Bosh::Director::DeploymentPlan::Job
Returns a named job.
- #jobs_starting_on_deploy ⇒ Object
-
#network(name) ⇒ Bosh::Director::DeploymentPlan::Network
Returns a named network.
-
#networks ⇒ Array<Bosh::Director::DeploymentPlan::Network>
Returns all networks in a deployment plan.
-
#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
-
#resource_pool(name) ⇒ Bosh::Director::DeploymentPlan::ResourcePool
Returns a named resource pool spec.
-
#resource_pools ⇒ Array<Bosh::Director::DeploymentPlan::ResourcePool>
Returns all resource pools in a deployment plan.
-
#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, #invalid_dns, #reverse_domain, #reverse_host, #update_dns_a_record, #update_dns_ptr_record
Constructor Details
#initialize(name, options = {}) ⇒ Planner
Returns a new instance of Planner.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 61 def initialize(name, = {}) raise ArgumentError, 'name must not be nil' unless name @name = name @model = nil @properties = {} @releases = {} @networks = {} @networks_canonical_name_index = Set.new @resource_pools = {} @disk_pools = {} @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).
16 17 18 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 16 def canonical_name @canonical_name end |
#compilation ⇒ Bosh::Director::DeploymentPlan::CompilationConfig
Returns Resource pool and other configuration for compilation workers.
25 26 27 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 25 def compilation @compilation 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.
19 20 21 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 19 def model @model end |
#name ⇒ String (readonly)
Returns Deployment name.
13 14 15 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 13 def name @name end |
#properties ⇒ Object
Returns the value of attribute properties.
21 22 23 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 21 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 |
Class Method Details
.parse(manifest, options, event_log, logger) ⇒ Bosh::Director::DeploymentPlan::Planner
56 57 58 59 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 56 def self.parse(manifest, , event_log, logger) parser = DeploymentSpecParser.new(event_log, logger) parser.parse(manifest, ) end |
Instance Method Details
#add_disk_pool(disk_pool) ⇒ Object
Adds a disk pool by name
176 177 178 179 180 181 182 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 176 def add_disk_pool(disk_pool) if @disk_pools[disk_pool.name] raise DeploymentDuplicateDiskPoolName, "Duplicate disk pool name `#{disk_pool.name}'" end @disk_pools[disk_pool.name] = disk_pool end |
#add_job(job) ⇒ Object
Adds a job by name
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 232 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_network(network) ⇒ Object
Adds a network by name
127 128 129 130 131 132 133 134 135 136 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 127 def add_network(network) if @networks_canonical_name_index.include?(network.canonical_name) raise DeploymentCanonicalNetworkNameTaken, "Invalid network name `#{network.name}', " + 'canonical name already taken' end @networks[network.name] = network @networks_canonical_name_index << network.canonical_name end |
#add_release(release) ⇒ Object
Adds a release by name
194 195 196 197 198 199 200 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 194 def add_release(release) if @releases.has_key?(release.name) raise DeploymentDuplicateReleaseName, "Duplicate release name `#{release.name}'" end @releases[release.name] = release end |
#add_resource_pool(resource_pool) ⇒ Object
Adds a resource pool by name
153 154 155 156 157 158 159 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 153 def add_resource_pool(resource_pool) if @resource_pools[resource_pool.name] raise DeploymentDuplicateResourcePoolName, "Duplicate resource pool name `#{resource_pool.name}'" end @resource_pools[resource_pool.name] = resource_pool end |
#bind_model ⇒ void
This method returns an undefined value.
Looks up deployment model in DB or creates one if needed
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 94 def bind_model attrs = {:name => @name} Models::Deployment.db.transaction do deployment = Models::Deployment.find(attrs) # Canonical uniqueness is not enforced in the DB if deployment.nil? Models::Deployment.each do |other| if canonical(other.name) == canonical_name raise DeploymentCanonicalNameTaken, "Invalid deployment name `#{@name}', " + 'canonical name already taken' end end deployment = Models::Deployment.create(attrs) end @model = deployment end end |
#delete_instance(instance) ⇒ Object
Adds instance to deletion queue
222 223 224 225 226 227 228 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 222 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
216 217 218 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 216 def delete_vm(vm) @unneeded_vms << vm end |
#disk_pool(name) ⇒ Object
188 189 190 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 188 def disk_pool(name) @disk_pools[name] end |
#disk_pools ⇒ Object
184 185 186 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 184 def disk_pools @disk_pools.values end |
#job(name) ⇒ Bosh::Director::DeploymentPlan::Job
Returns a named job
252 253 254 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 252 def job(name) @jobs_name_index[name] end |
#jobs_starting_on_deploy ⇒ Object
256 257 258 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 256 def jobs_starting_on_deploy @jobs.select(&:starts_on_deploy?) end |
#network(name) ⇒ Bosh::Director::DeploymentPlan::Network
Returns a named network
147 148 149 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 147 def network(name) @networks[name] end |
#networks ⇒ Array<Bosh::Director::DeploymentPlan::Network>
Returns all networks in a deployment plan
140 141 142 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 140 def networks @networks.values end |
#release(name) ⇒ Bosh::Director::DeploymentPlan::ReleaseVersion
Returns a named release
210 211 212 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 210 def release(name) @releases[name] end |
#releases ⇒ Array<Bosh::Director::DeploymentPlan::ReleaseVersion>
Returns all releases in a deployment plan
204 205 206 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 204 def releases @releases.values end |
#rename_in_progress? ⇒ Boolean
260 261 262 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 260 def rename_in_progress? @job_rename['old_name'] && @job_rename['new_name'] end |
#resource_pool(name) ⇒ Bosh::Director::DeploymentPlan::ResourcePool
Returns a named resource pool spec
170 171 172 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 170 def resource_pool(name) @resource_pools[name] end |
#resource_pools ⇒ Array<Bosh::Director::DeploymentPlan::ResourcePool>
Returns all resource pools in a deployment plan
163 164 165 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 163 def resource_pools @resource_pools.values end |
#vms ⇒ Array<Models::Vm>
Returns a list of VMs in the deployment (according to DB)
118 119 120 121 122 123 |
# File 'lib/bosh/director/deployment_plan/planner.rb', line 118 def vms if @model.nil? raise DirectorError, "Can't get VMs list, deployment model is unbound" end @model.vms end |