module Baptize::Registry
Public Class Methods
after(subject_name, other_task=nil, &block)
click to toggle source
# File lib/baptize/registry.rb, line 46 def self.after(subject_name, other_task=nil, &block) @afters ||= {} @afters[subject_name] ||= [] if other_task @afters[subject_name] << other_task elsif block_given? @afters[subject_name] << block end @afters[subject_name] end
apply_policy(role, options={})
click to toggle source
# File lib/baptize/registry.rb, line 92 def self.apply_policy(role, options={}) ssh_for_role role do |host, ssh_for_role| policies[role.to_sym].each do |package_name| if options[:package].nil? || package_name.to_sym == options[:package].to_sym raise "No package '#{package_name}'" unless packages[package_name] packages[package_name].execute(force: options[:force]) end end end end
before(subject_name, other_task=nil, &block)
click to toggle source
# File lib/baptize/registry.rb, line 35 def self.before(subject_name, other_task=nil, &block) @befores ||= {} @befores[subject_name] ||= [] if other_task @befores[subject_name] << other_task elsif block_given? @befores[subject_name] << block end @befores[subject_name] end
define_package(package_name, &config_block)
click to toggle source
# File lib/baptize/registry.rb, line 69 def self.define_package(package_name, &config_block) package = PackageDefinition.new(package_name, self.execution_scope, self) packages[package.full_name] = package package.instance_eval(&config_block) if ENV['SKIP_DEPENDENCIES'] before package.full_name do logger.important "Skipping dependencies for package #{package.name}" end else package.dependencies.each do |task_name| before package.full_name, task_name end end end
define_policy(role, package_names)
click to toggle source
# File lib/baptize/registry.rb, line 88 def self.define_policy(role, package_names) policies[role.to_sym] = package_names.map(&:to_s) end
define_server(role, host, options = {})
click to toggle source
# File lib/baptize/registry.rb, line 107 def self.define_server(role, host, options = {}) role = role.to_sym servers[host] = options.merge(hostname: host) servers[host][:roles] ||= [] servers[host][:roles] << role unless servers[host][:roles].include?(role) servers[host] end
execution_scope()
click to toggle source
# File lib/baptize/registry.rb, line 9 def self.execution_scope unless @execution_scope @execution_scope = ExecutionScope.new plugins.each do |plugin_module| (class << @execution_scope ; self ; end).send(:include, plugin_module) end end @execution_scope end
for_role(role, options={}, &block)
click to toggle source
# File lib/baptize/registry.rb, line 126 def self.for_role(role, options={}, &block) subset_copy = Marshal.dump(servers_for_role(role)) SSHKit::Coordinator.new(Marshal.load(subset_copy)).each(options, &block) end
has_package?(package_name)
click to toggle source
# File lib/baptize/registry.rb, line 27 def self.has_package?(package_name) !! @packages[package_name] end
logger()
click to toggle source
# File lib/baptize/registry.rb, line 19 def self.logger @logger ||= ::Logger.new(STDOUT) end
packages()
click to toggle source
# File lib/baptize/registry.rb, line 23 def self.packages @packages ||= {} end
packages_executed()
click to toggle source
# File lib/baptize/registry.rb, line 31 def self.packages_executed @packages_executed ||= [] end
plugins()
click to toggle source
# File lib/baptize/registry.rb, line 5 def self.plugins @plugins ||= [] end
policies()
click to toggle source
# File lib/baptize/registry.rb, line 84 def self.policies @policies ||= {} end
resolve_dependency(mixed)
click to toggle source
# File lib/baptize/registry.rb, line 57 def self.resolve_dependency(mixed) if mixed.kind_of?(String) || mixed.kind_of?(Symbol) task = packages[mixed.to_s] raise "Didn't find a package by that name: '#{mixed}'" if task.nil? task.method(:execute) elsif mixed.kind_of? PackageDefinition mixed.method(:execute) else mixed end end
servers()
click to toggle source
# File lib/baptize/registry.rb, line 103 def self.servers @servers ||= {} end
servers_for_role(role)
click to toggle source
# File lib/baptize/registry.rb, line 115 def self.servers_for_role(role) role = role.to_sym host_columns = [:password, :hostname, :port, :user, :key, :ssh_options] servers.values .select do |server| server[:roles].include?(role) end.map do |server| server.select {|k,v| host_columns.include?(k) } end end
ssh_for_role(role, &block)
click to toggle source
# File lib/baptize/registry.rb, line 131 def self.ssh_for_role(role, &block) registry = self for_role role, in: :parallel do |host| registry.execution_scope.set :current_host, host registry.execution_scope.set :current_ssh_connection, self block.call end end