class OpsBuild::Packer

Attributes

user_var_file[RW]
user_vars[RW]

Public Class Methods

new() click to toggle source
# File lib/ops_build/packer.rb, line 8
def initialize
  Validations::check_binary!('packer')
  @user_vars = {}
end

Public Instance Methods

add_user_variable(name, value) click to toggle source

Add name/value pair to users_vars hash which is going to be used later for packer var-file

# File lib/ops_build/packer.rb, line 15
def add_user_variable(name, value)
  unless name.nil? and value.nil?
    @user_vars[name.to_sym] = value
  end
end
build(config) click to toggle source

Run packer build

# File lib/ops_build/packer.rb, line 23
def build(config)
  options = ''

  create_var_file

  unless @user_var_file.nil?
    OpsBuild.logger.info("Changing packer build with variables file from: #{@user_var_file.path}")
    options = " -var-file #{@user_var_file.path}"
  end

  Utils::execute("packer build -color=false #{options} #{config}",
                 log_prefix: 'packer:',
                 env: { "AWS_TIMEOUT_SECONDS" => "1200" })
end
cleanup() click to toggle source

Clean user_var-file/log from system

# File lib/ops_build/packer.rb, line 55
def cleanup
  unless @user_var_file.nil?
    @user_var_file.unlink
    @user_var_file.close
  end
end
validate(config) click to toggle source

Validate packer template

# File lib/ops_build/packer.rb, line 40
def validate(config)
  options = ''

  create_var_file

  unless @user_var_file.nil?
    OpsBuild.logger.info("Customizing packer build with variable file from: #{@user_var_file.path}")
    options = "-var-file #{@user_var_file.path}"
  end

  Utils::execute("packer validate #{options} #{config}", log_prefix: 'packer:')
end

Private Instance Methods

create_var_file() click to toggle source
# File lib/ops_build/packer.rb, line 63
def create_var_file
  if @user_var_file.nil?
    @user_var_file = Tempfile.new('packer-var-file')
    @user_var_file.write(@user_vars.to_json)
    @user_var_file.rewind
  end
end