Class: Ferry::Configuration::Servers

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ferry/configuration/servers.rb

Instance Method Summary collapse

Instance Method Details

#add_host(host, properties = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/ferry/configuration/servers.rb', line 10

def add_host(host, properties={})
  new_host = Server[host]
  if server = servers.find { |s| s.matches? new_host }
    server.user = new_host.user if new_host.user
    server.port = new_host.port if new_host.port
    server.with(properties)
  else
    servers << new_host.with(properties)
  end
end

#add_role(role, hosts, options = {}) ⇒ Object



21
22
23
24
# File 'lib/ferry/configuration/servers.rb', line 21

def add_role(role, hosts, options={})
  options_deepcopy = Marshal.dump(options.merge(roles: role))
  Array(hosts).each { |host| add_host(host, Marshal.load(options_deepcopy)) }
end

#eachObject



54
55
56
# File 'lib/ferry/configuration/servers.rb', line 54

def each
  servers.each { |server| yield server }
end

#fetch_primary(role) ⇒ Object



49
50
51
52
# File 'lib/ferry/configuration/servers.rb', line 49

def fetch_primary(role)
  hosts = roles_for([role])
  hosts.find(&:primary) || hosts.first
end

#role_properties_for(rolenames) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ferry/configuration/servers.rb', line 32

def role_properties_for(rolenames)
  roles = rolenames.to_set
  rps = Set.new unless block_given?
  roles_for(rolenames).each do |host|
    host.roles.intersection(roles).each do |role|
      [host.properties.fetch(role)].flatten(1).each do |props|
        if block_given?
          yield host, role, props
        else
          rps << (props || {}).merge( role: role, hostname: host.hostname )
        end
      end
    end
  end
  block_given? ? nil: rps
end

#roles_for(names) ⇒ Object



26
27
28
29
30
# File 'lib/ferry/configuration/servers.rb', line 26

def roles_for(names)
  options = extract_options(names)
  s = Filter.new(:role, names).filter(servers)
  s.select { |server| server.select?(options) }
end