class Bosh::Cli::Manifest
Constants
- MANIFEST_TARGET_UPGRADE_NOTICE
Attributes
hash[R]
Public Class Methods
new(deployment_file, director)
click to toggle source
# File lib/cli/manifest.rb, line 5 def initialize(deployment_file, director) @deployment_file = deployment_file @director = director end
Public Instance Methods
latest_release_versions()
click to toggle source
# File lib/cli/manifest.rb, line 129 def latest_release_versions @_latest_release_versions ||= begin @director.list_releases.inject({}) do |hash, release| name = release['name'] versions = release['versions'] || release['release_versions'].map { |release_version| release_version['version'] } parsed_versions = versions.map do |version| { original: version, parsed: Bosh::Common::Version::ReleaseVersion.parse(version) } end latest_version = parsed_versions.sort_by { |v| v[:parsed] }.last[:original] hash[name] = latest_version.to_s hash end end end
latest_stemcells()
click to toggle source
@return [Array]
# File lib/cli/manifest.rb, line 95 def latest_stemcells @_latest_stemcells ||= begin stemcells = @director.list_stemcells.inject({}) do |hash, stemcell| unless stemcell.is_a?(Hash) && stemcell['name'] && stemcell['version'] err('Invalid director stemcell list format') end hash[stemcell['name']] ||= [] hash[stemcell['name']] << stemcell['version'] hash end stemcells.inject({}) do |hash, (name, versions)| hash[name] = Bosh::Common::Version::StemcellVersionList.parse(versions).latest.to_s hash end end end
load()
click to toggle source
# File lib/cli/manifest.rb, line 14 def load unless File.exists?(@deployment_file) err("Cannot find deployment manifest in `#{@deployment_file}'") end @hash = load_yaml_file(@deployment_file) end
name()
click to toggle source
# File lib/cli/manifest.rb, line 10 def name @hash['name'] end
report_manifest_warnings()
click to toggle source
# File lib/cli/manifest.rb, line 155 def report_manifest_warnings ManifestWarnings.new(@hash).report end
resolve_release_aliases()
click to toggle source
@param [Hash] manifest Deployment manifest (will be modified) @return [void]
# File lib/cli/manifest.rb, line 115 def resolve_release_aliases releases = @hash['releases'] || [@hash['release']] releases.each do |release| if release['version'] == 'latest' latest_release_version = latest_release_versions[release['name']] unless latest_release_version err("Release '#{release['name']}' not found on director. Unable to resolve 'latest' alias in manifest.") end release['version'] = latest_release_version end end end
resolve_stemcell_aliases()
click to toggle source
@param [Hash] manifest Deployment manifest (will be modified) @return [void]
# File lib/cli/manifest.rb, line 76 def resolve_stemcell_aliases return if @hash['resource_pools'].nil? @hash['resource_pools'].each do |rp| stemcell = rp['stemcell'] unless stemcell.is_a?(Hash) err('Invalid stemcell spec in the deployment manifest') end if stemcell['version'] == 'latest' latest_version = latest_stemcells[stemcell['name']] if latest_version.nil? err("Latest version for stemcell `#{stemcell['name']}' is unknown") end stemcell['version'] = latest_version end end end
validate(options={})
click to toggle source
# File lib/cli/manifest.rb, line 22 def validate(options={}) if @hash['name'].blank? err('Deployment name not found in the deployment manifest') end if @hash['target'] err(MANIFEST_TARGET_UPGRADE_NOTICE) end if options[:resolve_properties] compiler = DeploymentManifestCompiler.new(Psych.dump(@hash)) properties = {} begin say('Getting deployment properties from director...') properties = @director.list_properties(name) rescue Bosh::Cli::DirectorError say('Unable to get properties list from director, ' + 'trying without it...') end compiler.properties = properties.inject({}) do |hash, property| hash[property['name']] = property['value'] hash end @hash = Psych.load(compiler.result) end if name.blank? || @hash['director_uuid'].blank? err("Invalid manifest `#{File.basename(@deployment_file)}': " + 'name and director UUID are required') end if @director.uuid != @hash['director_uuid'] err("Target director UUID doesn't match UUID from deployment manifest") end if @hash['release'].blank? && @hash['releases'].blank? err("Deployment manifest doesn't have release information: '" + "please add 'release' or 'releases' section") end report_manifest_warnings @hash end
yaml()
click to toggle source
# File lib/cli/manifest.rb, line 70 def yaml Psych.dump(@hash) end