class Luban::Deployment::Configuration::ServerSet

Public Class Methods

new() click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 7
def initialize
  @servers = { :all => [] } 
end

Public Instance Methods

add_host(host, **properties) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 27
def add_host(host, **properties)
  new_server = Server.create(host, properties)
  if server = has_server?(new_server)
    server.user = new_server.user unless new_server.user.nil?
    server.port = new_server.port unless new_server.port.nil?
    server.add_properties(properties)
    server
  else
    all << new_server
    new_server
  end.tap do |s|
    s.roles.each do |role| 
      @servers[role] ||= []
      @servers[role] << s unless @servers[role].include?(s)
    end
  end
end
add_hosts_for_role(role, hosts, **properties) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 45
def add_hosts_for_role(role, hosts, **properties)
  properties_deepcopy = Marshal.dump(properties.merge(:roles => Array(role)))
  Array(hosts).each { |host| add_host(host, Marshal.load(properties_deepcopy)) }
end
all() click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 11
def all
  @servers[:all]
end
available_roles() click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 15
def available_roles
  @servers.keys - [:all]
end
each() { |server| ... } click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 71
def each
  all.each { |server| yield server }
end
find_by_role(role, **opts) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 56
def find_by_role(role, **opts)
  if @servers.has_key?(role)
    opts.inject(@servers[role]) do |_servers, (action, key)|
      send(action, _servers, key)
    end
  else
    []
  end
end
find_by_roles(roles, **opts) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 50
def find_by_roles(roles, **opts)
  roles.inject([]) do |result, role|
    result.concat(find_by_role(role, opts))
  end
end
find_primary(role) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 66
def find_primary(role)
  _servers = find_by_role(role)
  _servers.find(&:primary?) || _servers.first
end
has_server?(server) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 19
def has_server?(server)
  all.find do |s|
    s.user == server.user and
    s.hostname == server.hostname and
    s.port == server.port
  end
end

Protected Instance Methods

exclude(_servers, key) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 77
def exclude(_servers, key)
  _servers.select { |server| !server[key] }
end
filter(_servers, key) click to toggle source
# File lib/luban/deployment/configuration/server_set.rb, line 81
def filter(_servers, key)
  _servers.select { |server| server[key] }
end