require 'dotenv' require_relative '../chef_host'
namespace :shiplane do
namespace :bootstrap do # task :prepare do # end task :install do fetch(:shiplane_hosts).each do |host| host.install end end task configure: %i(evaluate_erb_files rsync_chef_configuration upload_cookbooks fix_file_permissions) do fetch(:shiplane_hosts).each do |host| host.configure end end # task :cleanup do # end task :evaluate_erb_files, :username, :keypath do |task, args| Dotenv.load Shiplane::ChefHost.env_file on fetch(:shiplane_hosts).map(&:capistrano_role) do |host| @shiplane_users = [ "docker", host.user, ].compact.uniq.join("\",\"") Dir["#{File.expand_path("../../../chef", __FILE__)}/**/*.erb"].map do |filename| compiled_template = ERB.new(File.read(filename)).result(binding) compiled_file_name = filename.match(/.*\/chef\/(.*)\.erb/)[1] sudo :mkdir, '-m', '777', '-p', File.join(Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH, File.dirname(compiled_file_name)) upload! StringIO.new(compiled_template), File.join(Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH, compiled_file_name) end end end task :rsync_chef_configuration do |task, args| run_locally do fetch(:shiplane_hosts).map(&:capistrano_role).each do |host| rsync_arguments = [ '-r', '-e', "\"ssh -p #{host.port || 22} -i #{host.netssh_options.fetch(:keys)}\"", "#{Shiplane::ChefHost::LOCAL_CHEF_FOLDER_PATH}/", "#{host.netssh_options.fetch(:user)}@#{host}:#{Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH}" ] execute 'rsync', *rsync_arguments end end end task :upload_cookbooks do |task, args| on fetch(:shiplane_hosts).map(&:capistrano_role) do |host| sudo :rm, '-Rf', Shiplane::ChefHost::REMOTE_COOKBOOKS_FILE_PATH upload!(Shiplane::ChefHost::LOCAL_COOKBOOKS_FILE_PATH, Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH) sudo :rm, '-Rf', File.join(Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH, 'cookbooks') execute :tar, '-xzf', Shiplane::ChefHost::REMOTE_COOKBOOKS_FILE_PATH, '-C', Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH end end task :fix_file_permissions do |task, args| on fetch(:shiplane_hosts).map(&:capistrano_role) do |host| sudo :chmod, '-R', '777', Shiplane::ChefHost::REMOTE_CHEF_FOLDER_PATH end end end
end