class Leeroy::Task::Packer

Public Instance Methods

perform(args = self.args, options = self.options, global_options = self.global_options) click to toggle source
Calls superclass method Leeroy::Task::Base#perform
# File lib/leeroy/task/packer.rb, line 21
def perform(args = self.args, options = self.options, global_options = self.global_options)
  begin
    super(args, options, global_options)

    phase = Leeroy::Types::Phase.resolve(self.state.fetch('phase'), options[:phase])
    logger.debug "phase: #{phase}"
    # update phase in state
    self.state.phase = phase

    packer_params = _getPackerParams
    packer_vars = Leeroy::Types::Packer.new(packer_params)

    # Sending app_name to state
    self.state.app_name = packer_vars.app_name

    # cwd is the fille filename where the packer template lives
    cwd = File.join(packer_vars.packer_template_prefix, self.state.app_name)

    validation = validatePacker(cwd, { :vars => packer_vars })

    build = buildPacker(cwd,{ :vars => packer_vars } )
    build.artifacts.each do | item |
      self.state.message = item.string
      artifact = item.id.split(':')
      self.state.imageid = artifact[1]
    end

    logger.debug "#{build.stdout}"
    logger.debug "Packer Artifact Created : #{state.imageid}"

    dump_state

    logger.debug "done performing for #{self.class}"

  rescue StandardError => e
    logger.debug e.message
    raise e
  end
end

Private Instance Methods

_getPackerParams(state = self.state, env = self.env, options = self.options) click to toggle source
# File lib/leeroy/task/packer.rb, line 61
def _getPackerParams(state = self.state, env = self.env, options = self.options)
  begin
    logger.debug "generating Packer params to create an AMI"
    packer_params = Leeroy::Types::Mash.new

    if self.state.imageid?
      imageid = self.state.imageid
    elsif options[:imageid].nil?
      imageid = checkEnv('LEEROY_AWS_LINUX_AMI')
    else
      imageid = options[:imageid]
    end
    packer_params.aws_linux_ami = imageid

    if self.state.app_name?
      app_name = self.state.app_name
    elsif options[:name].nil?
      app_name = checkEnv('LEEROY_APP_NAME')
    else
      app_name = options[:name]
    end
    packer_params.app_name = app_name

    if self.state.aws_region?
      aws_region = self.state.aws_region
    else
      aws_region = ENV['AWS_DEFAULT_REGION'] || ENV['AWS_REGION']
    end
    packer_params.aws_region = aws_region

    # LEEROY_PACKER_TEMPLATE_PREFIX
    if self.state.packer_template_prefix?
      packer_template_prefix = self.state.packer_template_prefix
    elsif options[:packer_template_prefix].nil?
      packer_template_prefix = checkEnv('LEEROY_PACKER_TEMPLATE_PREFIX')
    else
      packer_template_prefix = options[:packer_template_prefix]
    end
    packer_params.packer_template_prefix = packer_template_prefix

    packer_params
  rescue StandardError => e
    raise e
  end
end