Module: Scope

Defined in:
lib/capistrano/scope.rb

Constant Summary collapse

@@servers =
Hash.new {|h,k| h[k] = {:ip_address => nil, :roles => [] } }

Instance Method Summary collapse

Instance Method Details

#all(ns) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/capistrano/scope.rb', line 57

def all(ns)
  @@servers.each_value do |scope_server|
    scope_server[:roles].each do |role|
      ns.top.role(role[:name], scope_server[:ip_address], role[:options])
    end
  end
end

#create_server_tasks(ns) ⇒ Object

Execution starts here.



51
52
53
54
55
# File 'lib/capistrano/scope.rb', line 51

def create_server_tasks(ns)
  @@servers.keys.each do |name| 
    namespace_task name.split(':').reverse, ns
  end
end

#create_task(name, pattern, ns) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/capistrano/scope.rb', line 22

def create_task(name, pattern, ns)
  ns.task(name) do
    set :current_scope, true
    keys = @@servers.keys.grep(/^#{pattern}/)
    
    keys.each do |key|
      ip_address = @@servers[key][:ip_address]
      @@servers[key][:roles].each do |role|
        top.role(role[:name], ip_address, role[:options])
      end
    end
  end
end

#defined_roles(ns) ⇒ Object



65
66
67
# File 'lib/capistrano/scope.rb', line 65

def defined_roles(ns)
  ns.top.roles.keys.collect {|r| r.to_s }.sort {|a,b| a <=> b }
end

#defined_servers(ns) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/capistrano/scope.rb', line 69

def defined_servers(ns)
  ip_to_name = @@servers.keys.inject({}) do |h,key| 
    h[@@servers[key][:ip_address]] = key
    h
  end
  defined_servers = []
  ns.top.roles.each_value do |defined_role|
    defined_role.servers.each do |server|
      unless defined_servers.include? ip_to_name[server.host]
        defined_servers << ip_to_name[server.host]
      end
    end
  end

  return defined_servers.sort
end

#namespace_task(namespace_list, ns) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/capistrano/scope.rb', line 36

def namespace_task(namespace_list, ns)
  name    = namespace_list.pop
  pattern = "#{ns.fully_qualified_name}:#{name}".sub('@:','')

  if namespace_list.empty?
    create_task name, pattern, ns
  else
    ns.namespace name.to_sym do
    end
    create_task 'all', pattern, ns.namespaces[name.to_sym]
    namespace_task namespace_list, ns.namespaces[name.to_sym]
  end 
end

#role(role, server_name, options = {}) ⇒ Object



14
15
16
# File 'lib/capistrano/scope.rb', line 14

def role(role, server_name, options={})
  @@servers[server_name][:roles] << {:name => role, :options => options}
end

#server(server_name, ip_address) ⇒ Object



18
19
20
# File 'lib/capistrano/scope.rb', line 18

def server(server_name, ip_address)
  @@servers[server_name][:ip_address] = ip_address
end

#task_listObject



10
11
12
# File 'lib/capistrano/scope.rb', line 10

def task_list
  @@servers.keys.map {|key| "@:#{key}"}
end