class Packer::Config
Constants
- PACKER_VERSION
Attributes
builders[RW]
chained_postprocessors[RW]
envvar[RW]
macro[RW]
output_file[RW]
packer[RW]
packer_options[RW]
postprocessors[RW]
provisioners[RW]
Public Class Methods
new(file)
click to toggle source
Calls superclass method
Packer::DataObject::new
# File lib/packer-config.rb, line 27 def initialize(file) super() self.data['variables'] = {} self.output_file = file self.builders = [] self.provisioners = [] self.postprocessors = [] self.packer = 'packer' self.packer_options = [] self.macro = Macro.new self.envvar = EnvVar.new self.chained_postprocessors = true end
Public Instance Methods
add_builder(type)
click to toggle source
# File lib/packer-config.rb, line 138 def add_builder(type) builder = Packer::Builder.get_builder(type) self.builders.push(builder) builder end
add_postprocessor(type)
click to toggle source
# File lib/packer-config.rb, line 150 def add_postprocessor(type) postprocessor = Packer::PostProcessor.get_postprocessor(type) self.postprocessors.push(postprocessor) postprocessor end
add_provisioner(type)
click to toggle source
# File lib/packer-config.rb, line 144 def add_provisioner(type) provisioner = Packer::Provisioner.get_provisioner(type) self.provisioners.push(provisioner) provisioner end
add_variable(name, value)
click to toggle source
# File lib/packer-config.rb, line 156 def add_variable(name, value) variables_copy = Marshal.load(Marshal.dump(self.variables)) variables_copy[name.to_s] = value.to_s self.__add_hash('variables', variables_copy) end
build(quiet: false)
click to toggle source
# File lib/packer-config.rb, line 115 def build(quiet: false) self.validate self.write stdout = nil Dir.chdir(File.dirname(self.output_file)) do begin stdout = Packer::Runner.run! self.packer, 'build', self.packer_options, File.basename(self.output_file), quiet: quiet rescue Packer::Runner::CommandExecutionError => e raise PackerBuildError.new(e.to_s) end end self.delete stdout end
chained_postprocessors?()
click to toggle source
# File lib/packer-config.rb, line 41 def chained_postprocessors? self.chained_postprocessors ? true : false end
delete()
click to toggle source
# File lib/packer-config.rb, line 108 def delete File.delete(self.output_file) end
description(description)
click to toggle source
# File lib/packer-config.rb, line 130 def description(description) self.__add_string('description', description) end
dump(format='json', pretty=false)
click to toggle source
# File lib/packer-config.rb, line 71 def dump(format='json', pretty=false) data_copy = self.deep_copy data_copy['builders'] = [] self.builders.each do |thing| data_copy['builders'].push(thing.deep_copy) end unless self.provisioners.empty? data_copy['provisioners'] = [] self.provisioners.each do |thing| data_copy['provisioners'].push(thing.deep_copy) end end unless self.postprocessors.empty? data_copy['post-processors'] = [] self.postprocessors.each do |thing| data_copy['post-processors'].push(thing.deep_copy) end unless self.chained_postprocessors? data_copy['post-processors'] = [data_copy['post-processors']] end end case format when 'json' if pretty JSON.pretty_generate(data_copy) else data_copy.to_json end else raise DumpError.new("Unrecognized format #{format} use one of ['json']") end end
min_packer_version(version)
click to toggle source
# File lib/packer-config.rb, line 181 def min_packer_version(version) self.__add_string('min_packer_version', version) end
validate(verbose: false)
click to toggle source
Calls superclass method
Packer::DataObject#validate
# File lib/packer-config.rb, line 45 def validate(verbose: false) super() verify_packer_version if self.builders.empty? raise DataValidationError.new("At least one builder is required") end self.builders.each(&:validate) self.provisioners.each(&:validate) self.postprocessors.each(&:validate) self.write stdout = nil Dir.chdir(File.dirname(self.output_file)) do begin stdout = Packer::Runner.run! self.packer, 'validate', File.basename(self.output_file), quiet: !verbose rescue Packer::Runner::CommandExecutionError => e raise PackerBuildError.new(e.to_s) end end self.delete stdout end
variable(name)
click to toggle source
# File lib/packer-config.rb, line 165 def variable(name) unless self.variables.key? name raise UndefinedVariableError.new("No variable named #{name} has been defined -- did you forget to call add_variable?") end "{{user `#{name}`}}" end
variables()
click to toggle source
# File lib/packer-config.rb, line 134 def variables self.data['variables'] end
verify_packer_version()
click to toggle source
# File lib/packer-config.rb, line 173 def verify_packer_version min_packer_version PACKER_VERSION version = /Packer v(\d+\.\d+\.\d+)/.match( Packer::Runner.run!(packer, 'version', quiet: true) )[1] Gem::Dependency.new('', ">= #{PACKER_VERSION}").match?('', version) || raise("Packer version #{version} is not new enough (requires >= #{PACKER_VERSION})") end
write(format='json')
click to toggle source
# File lib/packer-config.rb, line 104 def write(format='json') File.write(self.output_file, self.dump(format)) end