Sha256: ba32e513ae08e068d688fa14918f5524977bb9e647b4f5a0722d1537814fdc1d

Contents?: true

Size: 1.45 KB

Versions: 12

Compression:

Stored size: 1.45 KB

Contents

module EY
  class Task
    include Dataflow

    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

    private

    def run_on_roles(cmd, wrapper=%w[sh -l -c])
      results = EY::Server.from_roles(@roles).map do |server|
        to_run = block_given? ? yield(server, cmd.dup) : cmd
        need_later { server.run(Escape.shell_command(wrapper + [to_run])) }
      end
      barrier *results
      # MRI's truthiness check is an internal C thing that does not call
      # any methods... so Dataflow cannot proxy it & we must "x == true"
      # Rubinius, wherefore art thou!?
      results.all?{|x| x == true } || raise(EY::RemoteFailure)
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
engineyard-serverside-1.2.1 lib/engineyard-serverside/task.rb
engineyard-serverside-1.2.0 lib/engineyard-serverside/task.rb
ey-deploy-1.1.3 lib/ey-deploy/task.rb
ey-deploy-1.1.2 lib/ey-deploy/task.rb
ey-deploy-1.1.1 lib/ey-deploy/task.rb
ey-deploy-1.1.0 lib/ey-deploy/task.rb
ey-deploy-1.0.2 lib/ey-deploy/task.rb
ey-deploy-1.0.1 lib/ey-deploy/task.rb
ey-deploy-1.0.0 lib/ey-deploy/task.rb
ey-deploy-0.9.1 lib/ey-deploy/task.rb
ey-deploy-0.8.2 lib/ey-deploy/task.rb
ey-deploy-0.8.1 lib/ey-deploy/task.rb