Sha256: ace1153003aa83a1704d40f37c88b118d5bb2c8508c0a05402c823787521d3e8

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

module EY
  class Task

    attr_reader :config
    alias :c :config

    def initialize(conf)
      @config = conf
      @roles = :all
    end

    def require_custom_tasks
      deploy_file = ["config/eydeploy.rb", "eydeploy.rb"].map do |short_file|
        File.join(c.repository_cache, short_file)
      end.detect do |file|
        File.exist?(file)
      end

      if deploy_file
        puts "~> Loading deployment task overrides from #{deploy_file}"
        instance_eval(File.read(deploy_file))
        true
      else
        false
      end
    end

    def roles(*task_roles)
      raise "Roles must be passed a block" unless block_given?

      begin
        @roles = task_roles
        yield
      ensure
        @roles = :all
      end
    end

    def run(cmd, &blk)
      run_on_roles(cmd, &blk)
    end

    def sudo(cmd, &blk)
      run_on_roles(cmd, %w[sudo sh -l -c], &blk)
    end

    def prepare_run(command)
      Escape.shell_command ["sh", "-l", "-c", command]
    end

    def prepare_sudo(command)
      Escape.shell_command ["sudo", "sh", "-l", "-c", command]
    end

    private

    def run_on_roles(cmd, wrapper=%w[sh -l -c])
      EY::Server.from_roles(@roles).inject(false) do |acc, server|
        to_run = block_given? ? yield(server, cmd.dup) : cmd
        failure = !server.run(Escape.shell_command(wrapper + [to_run]))
        acc || failure
      end && raise(EY::RemoteFailure)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ey-deploy-0.7.0 lib/ey-deploy/task.rb
ey-deploy-0.6.1 lib/ey-deploy/task.rb
ey-deploy-0.6.0 lib/ey-deploy/task.rb
ey-deploy-0.5.0 lib/ey-deploy/task.rb