You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

96 lines
2.5 KiB

require "yaml"
require "fileutils"
desc "Validate all templates using Packer"
task :validate do
Dir.glob("packer_templates/**/*.json").sort.each do |template_path|
template_dir = File.dirname(template_path)
filename = File.basename(template_path)
# we can't validatem the amazon config with the ovf file
next if filename == "amazon-2-x86_64.json"
puts "\n\e[32mValidating #{template_path}\e[0m\n\n"
result = system("packer validate #{filename}", chdir: template_dir)
raise "Validation for #{template_path} failed" unless result
end
end
desc "clean repo, build boxes, test, and upload/release"
task :do_all do
check_env
public_templates.each do |template|
if config['public'].include?(box_name(template))
Rake::Task[:clean].execute
sh build_cmd(template)
sh "bento test"
if ENV["BENTO_AUTO_RELEASE"].nil? || ENV["BENTO_VERSION"].nil?
puts "skipping the upload / release of #{template} as BENTO_AUTO_RELEASE and BENTO_VERSION env vars were not set"
else
sh "bento upload"
sh "bento release #{template} #{ENV["BENTO_VERSION"]}"
end
end
end
end
desc "release all built boxes on vagrant cloud"
task :release_all do
config['public'].each do |template|
sh "bento release #{template} #{ENV["BENTO_VERSION"]}"
end
end
desc "clean"
task :clean do
puts "Removing kitchen.yml and builds/*"
FileUtils.rm_rf(['kitchen.yml', Dir.glob('builds/*')])
end
def build_cmd(template)
cmd = %W{bento build #{template}}
cmd.insert(2, "--only #{providers}")
cmd.insert(2, "--mirror #{ENV['PACKER_MIRROR']}") if ENV["PACKER_MIRROR"]
cmd.insert(2, "--version #{ENV['BENTO_VERSION']}")
cmd.join(" ")
a_to_s(cmd)
end
def check_env
if ENV["BENTO_VERSION"].nil?
puts "Please set the BENTO_VERSION env variable"
exit 1
end
end
def providers
if config['providers']
config['providers'].join(',')
else
puts "No Providers Specified."
puts "Set `providers` in builds.yml"
exit 1
end
end
def a_to_s(*args)
clean_array(*args).join(" ")
end
def config
YAML.load(File.read("builds.yml"))
end
def clean_array(*args)
args.flatten.reject { |i| i.nil? || i == "" }.map(&:to_s)
end
def box_name(template)
bn = template.split('/')[1].gsub!(/\.json/,'')
bn.match(/-x86_64|-amd64/) ? bn.gsub(/-x86_64|-amd64/,'') : bn
end
def public_templates
templates = Dir.glob('**/*.json').reject{ |d| d['builds'] }
templates.reject{ |f| f[/macos|rhel|sles|solaris|windows/] }
end