class OpenStax::Aws::Packer_1_4_1

Public Class Methods

new(absolute_file_path:, dry_run: true) click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 6
def initialize(absolute_file_path:, dry_run: true)
  @logger = OpenStax::Aws.configuration.logger
  @only = []
  @vars = {}
  @dry_run = dry_run
  @verbose = false
  @debug = false
  @absolute_file_path = absolute_file_path
end

Public Instance Methods

command() click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 32
def command
  cmd = "packer build"

  cmd = "#{cmd} --only=#{@only.join(',')}" if !@only.empty?

  @vars.each do |key, value|
    cmd = "#{cmd} --var '#{key}=#{value}'"
  end

  cmd = "PACKER_LOG=1 #{cmd}" if @verbose
  cmd = "#{cmd} --debug" if @debug

  cmd = "#{cmd} #{@absolute_file_path}"
end
debug!() click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 28
def debug!
  @debug = true
end
only(builders) click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 16
def only(builders)
  @only = [builders].flatten
end
run() click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 47
def run
  @logger.info("**** DRY RUN ****") if @dry_run
  @logger.info("Running: #{command}")

  if !@dry_run
    @logger.info("Printing stderr for desired verbosity")
    ami = ""

    Open3.popen2e(command) do |stdin, stdout_err, wait_thr|
      begin
        previous_interrupt_handler = Signal.trap 'INT' do
          # Interrupt Packer
          Process.kill 'INT', wait_thr.pid

          # Restore previous interrupt handler so we don't interrupt Packer again
          Signal.trap 'INT', previous_interrupt_handler

          # Disable other code that restores previous interrupt
          previous_interrupt_handler = nil
        end

        stdout_err.sync = true

        line = ''

        while char = stdout_err.getc do
          line << char
          STDERR.print char

          next unless char == "\n"

          matchami = line.match(/AMI: (ami-[0-9\-a-z]*)/i)
          ami = matchami.captures[0] if matchami

          line = ''
        end
      ensure
        # Restore previous interrupt unless we did so already
        Signal.trap 'INT', previous_interrupt_handler unless previous_interrupt_handler.nil?
      end

      puts ami

      # Return Packer's exit status wrapped in a Process::Status object
      wait_thr.value
    end
  end
end
to_s() click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 96
def to_s
  command.to_s
end
var(key, value) click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 20
def var(key, value)
  @vars[key.to_s] = value.to_s
end
verbose!() click to toggle source
# File lib/openstax/aws/packer_1_4_1.rb, line 24
def verbose!
  @verbose = true
end