Class: DockerBoss::Module::Etcd
- Inherits:
-
DockerBoss::Module
- Object
- DockerBoss::Module
- DockerBoss::Module::Etcd
- Defined in:
- lib/docker_boss/modules/etcd.rb
Instance Method Summary collapse
-
#initialize(config) ⇒ Etcd
constructor
A new instance of Etcd.
- #process_specs(containers) ⇒ Object
- #setup ⇒ Object
- #trigger(containers, trigger_id) ⇒ Object
Methods inherited from DockerBoss::Module
Constructor Details
#initialize(config) ⇒ Etcd
Returns a new instance of Etcd.
11 12 13 14 15 16 17 18 |
# File 'lib/docker_boss/modules/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 |
Instance Method Details
#process_specs(containers) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/docker_boss/modules/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 ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/docker_boss/modules/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) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/docker_boss/modules/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 |