class Luban::Deployment::Configuration

Attributes

servers[R]
variables[R]

Public Class Methods

new() click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 7
def initialize
  @variables = {}
  @servers = ServerSet.new
end

Public Instance Methods

ask(key=nil, default:, prompt: nil, echo: true) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 55
def ask(key=nil, default:, prompt: nil, echo: true)
  Question.new(default: default, prompt: prompt, echo: echo).call.tap do |answer|
    set(key, answer) unless key.nil?
  end
end
delete(key) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 20
def delete(key)
  @variables[key] = value
end
fetch(key, default = nil, &blk) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 24
def fetch(key, default = nil, &blk)
  value = if block_given?
            @variables.fetch(key, &blk)
          else
            @variables.fetch(key, default)
          end
  while callable_without_parameters?(value) 
    value = set(key, value.call)
  end
  return value
end
has_key?(key) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 40
def has_key?(key)
  @variables.has_key?(key)
end
keys() click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 36
def keys
  @variables.keys
end
primary(role) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 18
def primary(role)
  servers.find_primary(role)
end
release_roles(*names) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 9
def release_roles(*names)
  if names.last.is_a?(Hash)
    names.last.merge(:exclude => :no_release)
  else
    names << { :exclude => :no_release }
  end
  roles(*names)
end
role(name, hosts, **properties) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 44
def role(name, hosts, **properties)
  if name == :all
    raise ArgumentError, 'Reserved role name, :all, is NOT allowed to use.'
  end
  servers.add_hosts_for_role(name, hosts, properties)
end
roles(*names) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 4
def roles(*names)
  opts = names.last.is_a?(::Hash) ? names.pop : {}
  filter_servers(servers.find_by_roles(filter_roles(names), opts))
end
server(name, **properties) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 51
def server(name, **properties)
  servers.add_host(name, properties)
end
set(key, value) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 12
def set(key, value)
  @variables[key] = value  
end
set_default(key, value) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 16
def set_default(key, value)
  set(key, value) if @variables[key].nil?
end

Protected Instance Methods

callable_without_parameters?(x) click to toggle source
# File lib/luban/deployment/configuration/core.rb, line 63
def callable_without_parameters?(x)
  x.respond_to?(:call) && (!x.respond_to?(:arity) || x.arity == 0)
end
config_filter(type) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 48
def config_filter(type)
  filter = fetch(:filter) || fetch(:select)
  filter.nil? ? [] : filter.fetch(type, [])
end
env_filter(type) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 43
def env_filter(type)
  type = type.to_s.upcase
  ENV[type].nil? ? [] : ENV[type].split(',')
end
filter_roles(_roles) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 24
def filter_roles(_roles)
  available_roles = (env_filter(:roles) | config_filter(:roles)).map(&:to_sym)
  available_roles = servers.available_roles if available_roles.empty?
  if _roles.include?(:all)
    available_roles
  else
    _roles.select { |name| available_roles.include?(name) }
  end
end
filter_servers(_servers) click to toggle source
# File lib/luban/deployment/configuration/filter.rb, line 34
def filter_servers(_servers)
  filter_hosts = env_filter(:hosts) | config_filter(:hosts)
  if filter_hosts.empty?
    _servers
  else
    _servers.select { |server| filter_hosts.include?(server.hostname) }
  end
end