vagrant-lxc-ng/tasks/boxes.rake
2013-04-21 22:23:49 -03:00

70 lines
2 KiB
Ruby

require 'rake/tasklib'
class BuildUbuntuBoxTask < ::Rake::TaskLib
include ::Rake::DSL
attr_reader :name
def initialize(name, release, arch, opts = {})
@name = name
@release = release.to_s
@arch = arch.to_s
@install_chef = opts.fetch(:chef, true)
@install_puppet = opts.fetch(:puppet, true)
@file = opts[:file] || default_box_file
desc "Build an Ubuntu #{release} #{arch} box" unless ::Rake.application.last_comment
task name do
RakeFileUtils.send(:verbose, true) do
run_task
end
end
end
def run_task
if File.exists?("./boxes/output/#{@file}")
puts 'Box has been built already!'
exit 1
end
if Dir.exists?('boxes/temp')
puts "There is a partially built box under #{File.expand_path('./boxes/temp')}, please remove it before building a new box"
exit 1
end
sh 'mkdir -p boxes/temp/'
Dir.chdir 'boxes/temp' do
sh "sudo ../ubuntu/download #{@arch} #{@release}"
sh "sudo ../ubuntu/install-puppet" if @install_puppet
sh "sudo ../ubuntu/install-chef" if @install_chef
sh 'sudo rm -f rootfs.tar.gz'
sh 'sudo tar --numeric-owner -czf rootfs.tar.gz ./rootfs/*'
sh 'sudo rm -rf rootfs'
sh "sudo chown #{ENV['USER']}:#{ENV['USER']} rootfs.tar.gz"
sh "cp ../ubuntu/lxc-template ."
metadata = File.read('../ubuntu/metadata.json.template')
metadata.gsub!('ARCH', @arch)
metadata.gsub!('RELEASE', @release)
File.open('metadata.json', 'w') { |f| f.print metadata }
sh "tar -czf tmp-package.box ./*"
end
sh "cp boxes/temp/tmp-package.box boxes/output/#{@file}"
sh "rm -rf boxes/temp"
end
def default_box_file
"lxc-#{@release}-#{@arch}-#{Date.today}.box"
end
end
namespace :boxes do
namespace :ubuntu do
namespace :build do
desc 'Build an Ubuntu Quantal 64 bits box with puppet and chef installed'
BuildUbuntuBoxTask.new(:quantal64, :quantal, 'amd64')
end
end
end