class Bosh::Director::DeploymentPlan::DeploymentSpecParser
Public Class Methods
new(deployment, event_log, logger)
click to toggle source
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 6 def initialize(deployment, event_log, logger) @event_log = event_log @logger = logger @deployment = deployment end
Public Instance Methods
parse(deployment_manifest, options = {})
click to toggle source
@param [Hash] manifest Raw deployment manifest @return [DeploymentPlan::Planner] Deployment as build from deployment_spec
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 14 def parse(deployment_manifest, options = {}) @deployment_manifest = deployment_manifest @job_states = safe_property(options, 'job_states', :class => Hash, :default => {}) parse_options = {} if options['canaries'] parse_options['canaries'] = options['canaries'] @logger.debug("Using canaries value #{options['canaries']} given in a command line.") end if options['max_in_flight'] parse_options['max_in_flight'] = options['max_in_flight'] @logger.debug("Using max_in_flight value #{options['max_in_flight']} given in a command line.") end parse_stemcells parse_properties parse_releases parse_update(parse_options) parse_jobs(parse_options) @deployment end
Private Instance Methods
parse_jobs(parse_options)
click to toggle source
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 83 def parse_jobs(parse_options) if @deployment_manifest.has_key?('jobs') && @deployment_manifest.has_key?('instance_groups') raise JobBothInstanceGroupAndJob, "Deployment specifies both jobs and instance_groups keys, only one is allowed" end jobs = safe_property(@deployment_manifest, 'jobs', :class => Array, :default => []) instance_groups = safe_property(@deployment_manifest, 'instance_groups', :class => Array, :default => []) if !instance_groups.empty? jobs = instance_groups end jobs.each do |job_spec| # get state specific for this job or all jobs state_overrides = @job_states.fetch(job_spec['name'], @job_states.fetch('*', {})) job_spec = job_spec.recursive_merge(state_overrides) @deployment.add_instance_group(InstanceGroup.parse(@deployment, job_spec, @event_log, @logger, parse_options)) end end
parse_properties()
click to toggle source
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 52 def parse_properties @deployment.properties = safe_property(@deployment_manifest, 'properties', :class => Hash, :default => {}) end
parse_releases()
click to toggle source
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 57 def parse_releases release_specs = [] if @deployment_manifest.has_key?('release') if @deployment_manifest.has_key?('releases') raise DeploymentAmbiguousReleaseSpec, "Deployment manifest contains both 'release' and 'releases' " + 'sections, please use one of the two.' end release_specs << @deployment_manifest['release'] else safe_property(@deployment_manifest, 'releases', :class => Array).each do |release| release_specs << release end end release_specs.each do |release_spec| @deployment.add_release(ReleaseVersion.new(@deployment.model, release_spec)) end end
parse_stemcells()
click to toggle source
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 40 def parse_stemcells if @deployment_manifest.has_key?('stemcells') safe_property(@deployment_manifest, 'stemcells', :class => Array).each do |stemcell_hash| alias_val = safe_property(stemcell_hash, 'alias', :class=> String) if @deployment.stemcells.has_key?(alias_val) raise StemcellAliasAlreadyExists, "Duplicate stemcell alias '#{alias_val}'" end @deployment.add_stemcell(Stemcell.parse(stemcell_hash)) end end end
parse_update(parse_options)
click to toggle source
# File lib/bosh/director/deployment_plan/deployment_spec_parser.rb, line 78 def parse_update(parse_options) update_spec = safe_property(@deployment_manifest, 'update', :class => Hash) @deployment.update = UpdateConfig.new(update_spec.merge(parse_options)) end