Class: Consul::Template::Generator::CTRunner
- Inherits:
-
Object
- Object
- Consul::Template::Generator::CTRunner
- Defined in:
- lib/consul/template/generator/ct.rb,
lib/consul/template/generator/run.rb,
lib/consul/template/generator/init.rb,
lib/consul/template/generator/key_value.rb
Instance Attribute Summary collapse
-
#session ⇒ Object
Returns the value of attribute session.
Instance Method Summary collapse
- #acquire_lock(lock_key = nil) ⇒ Object
- #acquire_session_lock ⇒ Object
- #create_session ⇒ Object
- #destroy_session ⇒ Object
-
#initialize(consul_session_id = nil) ⇒ CTRunner
constructor
A new instance of CTRunner.
- #render_template ⇒ Object
- #run(comp_hash = nil) ⇒ Object
- #upload_template(raw_template) ⇒ Object
Constructor Details
#initialize(consul_session_id = nil) ⇒ CTRunner
Returns a new instance of CTRunner.
7 8 9 10 11 12 13 14 |
# File 'lib/consul/template/generator/init.rb', line 7 def initialize(consul_session_id = nil) if consul_session_id.nil? create_session else @session = consul_session_id end @config = Consul::Template::Generator.config end |
Instance Attribute Details
#session ⇒ Object
Returns the value of attribute session.
5 6 7 |
# File 'lib/consul/template/generator/init.rb', line 5 def session @session end |
Instance Method Details
#acquire_lock(lock_key = nil) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/consul/template/generator/key_value.rb', line 8 def acquire_lock(lock_key = nil) lock_key ||= @config.lock_key @config.logger.debug "Attempting to acquire lock on key: #{lock_key}" Consul::Template::Generator.renew_session @session unless Diplomat::Lock.acquire(lock_key, @session) raise KeyNotLockedError, "Unable to acquire lock on key: #{lock_key}" end @config.logger.debug "Lock acquired on key: #{lock_key}" begin yield ensure Diplomat::Lock.release(lock_key, @session) end end |
#acquire_session_lock ⇒ Object
24 25 26 27 28 |
# File 'lib/consul/template/generator/key_value.rb', line 24 def acquire_session_lock acquire_lock(@config.session_lock_key) do yield end end |
#create_session ⇒ Object
16 17 18 19 20 21 |
# File 'lib/consul/template/generator/init.rb', line 16 def create_session unless @session.nil? destroy_session end @session = Consul::Template::Generator.create_session 'consul-template-generator' end |
#destroy_session ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/consul/template/generator/init.rb', line 23 def destroy_session begin Consul::Template::Generator.destroy_session @session rescue Consul::Template::Generator.config.logger.info "Failed to destroy session: #{@session}" end @session = nil end |
#render_template ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/consul/template/generator/ct.rb', line 8 def render_template body = nil cmd = %{#{@config.consul_template_binary} -dry -once -template #{@config.template}} procs = ::Open4.popen4(*cmd) do |pid, stdin, stdout, stderr| body = stdout.read.strip # consul-template -dry inserts '> \n' at the top of stdout, remove it body.sub!(/^>\s+\n/, '') end status = procs.to_i hash = ::Digest::MD5.hexdigest(body) return status, body, hash end |
#run(comp_hash = nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/consul/template/generator/run.rb', line 7 def run(comp_hash = nil) status, body, hash, uploaded_hash = nil, nil, nil, nil acquire_lock do @config.logger.debug "Attempting to render template: #{@config.template}" status, body, hash = render_template unless status == 0 raise TemplateRenderError, "consul-template exited with on-zero exit status" end if body.nil? || body.empty? raise TemplateRenderError, "rendered template is nil or empty!" end @config.logger.debug "Template rendered..." if comp_hash.nil? || comp_hash != hash @config.logger.info "Change in template discovered, attempting to upload to key #{@config.template_key}" @config.logger.debug "Existing hash: #{comp_hash || 'nil'}, new hash: #{hash}" uploaded = upload_template(body) if uploaded @config.logger.info "New template uploaded..." uploaded_hash = hash else raise TemplateUploadError, "Template not uploaded!" end else @config.logger.info "No change in template, skipping upload..." end end return uploaded_hash end |
#upload_template(raw_template) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/consul/template/generator/key_value.rb', line 30 def upload_template(raw_template) @config.logger.info "Uploading key: #{@config.template_key}" begin Diplomat::Kv.put(@config.template_key, raw_template) rescue Exception => e raise TemplateUploadError, "Encountered an unexpected error while uploading template: #{e.message}" end end |