class DockerBoss::Module::Etcd
Public Class Methods
new(config)
click to toggle source
# File lib/docker_boss/module/etcd.rb, line 11 def initialize(config) @config = config @host = DockerBoss::Helpers.render_erb(@config['server']['host'], {}) DockerBoss.logger.debug "etcd: Set up to connect to #{@host}, port #{@config['server']['port']}" @client = ::Etcd.client(host: @host, port: @config['server']['port']) @previous_keys = {} setup end
Public Instance Methods
process_specs(containers)
click to toggle source
# File lib/docker_boss/module/etcd.rb, line 68 def process_specs(containers) values = {} @config['sets'].each do |name,template| tmpl = ERB.new(template) containers.each do |container| ns = OpenStruct.new({ container: container }) ns.extend(DockerBoss::Helpers::TemplateHelpers) entries = tmpl.result(ns.instance_eval { binding }) entries.lines.each do |line| (keyword, key, value) = line.lstrip.chomp.split(" ", 3) values[key] = value.to_s if keyword == 'ensure' end end end values end
setup()
click to toggle source
# File lib/docker_boss/module/etcd.rb, line 20 def setup setup = DockerBoss::Helpers.render_erb(@config.fetch('setup', ''), {}) setup.lines.each do |line| (kw, k, v) = line.lstrip.chomp.split(" ", 3) case kw when 'absent' begin DockerBoss.logger.debug "etcd: (setup) Remove key `#{k}`" @client.delete(k) rescue ::Etcd::KeyNotFound end when 'absent_recursive' begin DockerBoss.logger.debug "etcd: (setup) Remove key `#{k}` recursively" @client.delete(k, recursive: true) rescue ::Etcd::KeyNotFound end when 'ensure_dir' DockerBoss.logger.debug "etcd: (setup) Set key `#{k}` (dir)" @client.set(k, dir: true) when 'ensure' DockerBoss.logger.debug "etcd: (setup) Set key `#{k}` => `#{v}`" @client.set(k, value: v) end end end
trigger(containers, trigger_id)
click to toggle source
# File lib/docker_boss/module/etcd.rb, line 47 def trigger(containers, trigger_id) @new_keys = process_specs(containers) changes = DockerBoss::Helpers.hash_diff(@previous_keys, @new_keys) @previous_keys = @new_keys changes[:removed].each do |k,v| DockerBoss.logger.debug "etcd: Remove key `#{k}`" @client.delete(k) end changes[:added].each do |k,v| DockerBoss.logger.debug "etcd: Add key `#{k}` => `#{v}`" @client.set(k, value: v) end changes[:changed].each do |k,v| DockerBoss.logger.debug "etcd: Update key `#{k}` => `#{v}`" @client.set(k, value: v) end end