Class: EY::Serverside::Task

Inherits:
Object
  • Object
show all
Defined in:
lib/engineyard-serverside/task.rb

Direct Known Subclasses

DeployBase

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(servers, config, shell) ⇒ Task

Returns a new instance of Task.



9
10
11
12
13
14
# File 'lib/engineyard-serverside/task.rb', line 9

def initialize(servers, config, shell)
  @servers = servers
  @config = config
  @shell = shell
  @roles = :all
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



7
8
9
# File 'lib/engineyard-serverside/task.rb', line 7

def config
  @config
end

#serversObject (readonly)

Returns the value of attribute servers.



7
8
9
# File 'lib/engineyard-serverside/task.rb', line 7

def servers
  @servers
end

#shellObject (readonly)

Returns the value of attribute shell.



7
8
9
# File 'lib/engineyard-serverside/task.rb', line 7

def shell
  @shell
end

Instance Method Details

#load_ey_ymlObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/engineyard-serverside/task.rb', line 45

def load_ey_yml
  ey_yml = ["config/ey.yml", "ey.yml"].map do |short_file|
    paths.repository_cache.join(short_file)
  end.detect do |file|
    file.exist?
  end

  if ey_yml
    shell.status "Loading deploy configuration in #{ey_yml}"
    data = YAML.load_file(ey_yml.to_s)
    config.load_ey_yml_data(data, shell)
  end
rescue Exception
  shell.error "Error loading YAML in #{ey_yml}"
  raise
end

#pathsObject



16
17
18
# File 'lib/engineyard-serverside/task.rb', line 16

def paths
  config.paths
end

#require_custom_tasksObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/engineyard-serverside/task.rb', line 20

def require_custom_tasks
  return unless config.eydeploy_rb?

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

  if deploy_file
    shell.notice <<-NOTICE
NOTICE: Loading deployment task overrides from #{deploy_file}
Please consider:
* eydeploy.rb files can drastically alter the behavior of deployments.
* Internal deployment code may change under this file without warning.
    NOTICE
    begin
      instance_eval(deploy_file.read)
    rescue Exception => e
      shell.fatal ["Exception while loading #{deploy_file}", e.to_s, e.backtrace].join("\n")
      raise
    end
  end
end

#roles(*task_roles) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/engineyard-serverside/task.rb', line 62

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

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

#run(cmd, &block) ⇒ Object



73
74
75
# File 'lib/engineyard-serverside/task.rb', line 73

def run(cmd, &block)
  servers.roles(@roles).run(cmd, &block)
end

#sudo(cmd, &block) ⇒ Object



77
78
79
# File 'lib/engineyard-serverside/task.rb', line 77

def sudo(cmd, &block)
  servers.roles(@roles).sudo(cmd, &block)
end