class Linecook::Baker::Baker

Public Class Methods

new(image, directory: nil) click to toggle source
# File lib/linecook-gem/baker.rb, line 14
def initialize(image, directory: nil)
  @directory = File.expand_path(directory || Dir.pwd)
  @image = image
  Dir.chdir(@directory) do
    @config = load_config(@directory)
    munge_config
    @driver = driver
  end

end

Public Instance Methods

bake(snapshot: nil, upload: nil, keep: nil) click to toggle source
# File lib/linecook-gem/baker.rb, line 25
def bake(snapshot: nil, upload: nil, keep: nil)

  FileUtils.mkdir_p(File.join(Dir.pwd, '.kitchen'))

  Dir.chdir(@directory) { @driver.converge }

  snapshot ||= upload
  if snapshot
    puts 'Convergence complete, generating snapshot'
    save
    @image.upload if upload
  end

rescue => e
  if e.cause
    puts "Original cause of exception:"
    puts e.cause.message
    puts e.cause.backtrace
  end

  puts e.message
  puts e.backtrace
  raise
ensure
  if keep
    puts "Preserving build #{@image.id}, you will need to clean it up manually."
  else
    puts "Cleaning up build #{@image.id}"
    @driver.destroy
  end
end
clean_kitchen() click to toggle source
# File lib/linecook-gem/baker.rb, line 57
def clean_kitchen
  Dir.chdir(@directory) do
    @config.instances.each do |instance|
      instance.destroy
    end
  end
end
save() click to toggle source
# File lib/linecook-gem/baker.rb, line 65
def save
  puts "Saving image to #{@image.path}..."
  clean
  @driver.save
end

Private Instance Methods

clean() click to toggle source
# File lib/linecook-gem/baker.rb, line 73
def clean
  @driver.exec('rm -f /.docker*')
  if @is_chef
    @driver.exec('userdel -r -f kitchen')
    @driver.exec('groupdel kitchen')
    @driver.exec('rm -rf /etc/chef')
    @driver.exec('rm -rf /tmp/kitchen')
    @driver.exec('rm -f /etc/sudoers.d/kitchen')
  end
end
driver() click to toggle source
# File lib/linecook-gem/baker.rb, line 94
def driver
  case @config.loader.read[:driver][:name]
  when 'docker'
    Linecook::Baker::Docker.new(@image, @config)
  end
end
munge_config() click to toggle source
# File lib/linecook-gem/baker.rb, line 84
def munge_config
  data = @config.send(:data).instance_variable_get(:@data)
  @is_chef = data[:provisioner][:name] =~ /chef/
  if Linecook.config[:chef] &&
      Linecook.config[:chef][:encrypted_data_bag_secret] && @is_chef
    data[:provisioner][:data_bag_secret] = Linecook.config[:chef][:encrypted_data_bag_secret]
  end

end