Sha256: c903d5ea89e181a5a4e3b6d12ff73c6a3d3c0459a53272ee1bde098871b574bc

Contents?: true

Size: 1.61 KB

Versions: 26

Compression:

Stored size: 1.61 KB

Contents

module EY
  module Serverside
    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::Serverside::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::Serverside::RemoteFailure.new(cmd))
      end

    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
engineyard-serverside-1.5.21 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.20 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.19 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.19.pre lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.17 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.16 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.15 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.13 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.13.servicespike lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.12 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.10 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.9 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.6 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.4 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.2 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.1 lib/engineyard-serverside/task.rb
engineyard-serverside-1.5.0 lib/engineyard-serverside/task.rb
engineyard-serverside-1.4.16 lib/engineyard-serverside/task.rb
engineyard-serverside-1.4.15 lib/engineyard-serverside/task.rb
engineyard-serverside-1.4.14 lib/engineyard-serverside/task.rb