namespace :ow do

require 'momentum/tasks'

namespace :execute_recipe do
  %w{staging production}.each do |env|
    desc "Execute recipe on #{Momentum.config[:app_base_name]} in the #{stack_name(env)} OpsWorks stack."
    task(env.to_sym) { Rake::Task['ow:execute_recipe'].invoke(env) }
  end
end

desc "Execute a recipe on the given OpsWorks stack."
task :execute_recipe, [:to, :layer, :recipe, :aws_id, :aws_secret] do |t, args|
  require_credentials!(args)
  deployer = Momentum::OpsWorks::Deployer.new(args[:aws_id], args[:aws_secret])
  name = stack_name(args[:to])
  recipe = args[:recipe]
  layer = args[:layer] if args[:layer] && !args[:layer].empty?
  recipe_runner = deployer.execute_recipe!(name, layer, recipe)
  $stderr.puts "Applying #{recipe} #{recipe_runner[:deployment_id]} to #{[name, layer].compact.join(', ')}..."
  deployer.wait_for_success!(recipe_runner)
end

end