lib/mascherano/tasks/foreman.cap in mascherano-1.1.0 vs lib/mascherano/tasks/foreman.cap in mascherano-1.2.0

- old
+ new

@@ -2,68 +2,78 @@ desc <<-DESC Export the Procfile to upstart. You can override any of these defaults by setting the variables shown below. - set :foreman_cmd, "foreman" - set :foreman_format, "upstart" - set :foreman_location, "/etc/init" - set :foreman_port, 5000 - set :foreman_root, -> { release_path } - set :foreman_procfile, -> { release_path.join('Procfile') } - set :foreman_app, -> { fetch(:application) } - set :foreman_user, -> { fetch(:user) } - set :foreman_log, -> { shared_path.join('log') } - set :foreman_pids, false - set :foreman_concurrency, false - set :foreman_sudo, false - set :foreman_roles, :all + set :foreman_cmd, "foreman" + set :foreman_format, "upstart" + set :foreman_location, "/etc/init" + set :foreman_port, 5000 + set :foreman_root, -> { release_path } + set :foreman_procfile, -> { release_path.join('Procfile') } + set :foreman_app, -> { fetch(:application) } + set :foreman_log, -> { shared_path.join('log') } + set :foreman_pids, false + set :foreman_concurrency, false + set :foreman_sudo, false + set :foreman_roles, :all + set :foreman_servers, -> { release_roles(fetch(:foreman_roles)) } DESC task :export do - on roles(fetch(:foreman_roles)) do + on fetch(:foreman_servers) do |host| within release_path do - concurrency = fetch(:foreman_concurrency) - foreman_sudo = fetch(:foreman_sudo) - foreman_pids = fetch(:foreman_pids) + foreman_cmd = fetch(:foreman_cmd) + foreman_concurrency = fetch(:foreman_concurrency) + foreman_format = fetch(:foreman_format) + foreman_location = fetch(:foreman_location) + foreman_pids = fetch(:foreman_pids) + foreman_sudo = fetch(:foreman_sudo) + foreman_user = fetch(:foreman_user, host.user) - args = [fetch(:foreman_format), fetch(:foreman_location)] - args << %Q(-f #{fetch(:foreman_procfile)}) - args << %Q(-p #{fetch(:foreman_port)}) - args << %Q(-d #{fetch(:foreman_root)}) - args << %Q(-a #{fetch(:foreman_app)}) - args << %Q(-u #{fetch(:foreman_user)}) - args << %Q(-l #{fetch(:foreman_log)}) - args << %Q(-r #{fetch(:foreman_pids)}) if foreman_pids - args << %Q(-c #{concurrency}) if concurrency + cmd = [foreman_cmd, 'export', foreman_format, foreman_location] + cmd << %Q(-f #{fetch(:foreman_procfile)}) + cmd << %Q(-p #{fetch(:foreman_port)}) + cmd << %Q(-d #{fetch(:foreman_root)}) + cmd << %Q(-a #{fetch(:foreman_app)}) + cmd << %Q(-u #{foreman_user}) + cmd << %Q(-l #{fetch(:foreman_log)}) + cmd << %Q(-r #{foreman_pids}) if foreman_pids + cmd << %Q(-c #{foreman_concurrency}) if foreman_concurrency - cmd = "#{fetch(:foreman_cmd)} export #{args.join(' ')}" - - if foreman_sudo - execute "sudo su - -c '#{cmd}'" - else - execute cmd - end + execute *cmd end end end + + desc 'Prefixes the foreman command with sudo when :foreman_sudo => true' + task :configure_sudo do + if fetch(:foreman_sudo) + foreman_cmd = fetch(:foreman_cmd).to_s + SSHKit.config.command_map.prefix[foreman_cmd].push('sudo') + end + end end +Capistrano::DSL.stages.each do |stage| + after stage, 'foreman:configure_sudo' +end + namespace :load do task :defaults do - set :foreman_cmd, "foreman" - set :foreman_format, "upstart" - set :foreman_location, "/etc/init" - set :foreman_port, 5000 - set :foreman_root, -> { release_path } - set :foreman_procfile, -> { release_path.join('Procfile') } - set :foreman_app, -> { fetch(:application) } - set :foreman_user, -> { fetch(:user) } - set :foreman_log, -> { shared_path.join('log') } - set :foreman_pids, false - set :foreman_concurrency, false - set :foreman_sudo, false - set :foreman_roles, :all + set :foreman_cmd, "foreman" + set :foreman_format, "upstart" + set :foreman_location, "/etc/init" + set :foreman_port, 5000 + set :foreman_root, -> { release_path } + set :foreman_procfile, -> { release_path.join('Procfile') } + set :foreman_app, -> { fetch(:application) } + set :foreman_log, -> { shared_path.join('log') } + set :foreman_pids, false + set :foreman_concurrency, false + set :foreman_sudo, false + set :foreman_roles, :all + set :foreman_servers, -> { release_roles(fetch(:foreman_roles)) } end end namespace :deploy do after :updated, 'foreman:export'