class Capistrano::ConsulKvLock::Latch
Attributes
lock_key[R]
Public Class Methods
instance()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 26 def self.instance @_instance end
logger()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 30 def self.logger @_logger ||= SSHKittyLogger.new end
new(consul_url, options={})
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 34 def initialize(consul_url, options={}) Diplomat.configuration.url = consul_url @lock_key = options[:consul_lock_key] || 'deployment/locked' @session_id = nil end
set_instance(consul_url, options={})
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 20 def self.set_instance(consul_url, options={}) @_instance ||= new(consul_url, options) logger.debug "Registered latch instance: #{@_instance.inspect}" @_instance end
Public Instance Methods
create_session()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 63 def create_session logger.debug "Session request: #{session_request.inspect}" @session_id = Diplomat::Session.create(session_request) end
delete_session()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 68 def delete_session with_session { Diplomat::Session.destroy(@session_id) } @session_id = nil end
lock()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 75 def lock with_session { Diplomat::Lock.acquire(lock_key, @session_id, "true") } end
locked?()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 52 def locked? !!(Diplomat::Kv.get(lock_key) =~ /\A(t(rue)?|1|y(es)?)\z/) rescue => e # in case of 404 if e.message.include?('404') return false else raise e end end
logger()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 41 def logger self.class.logger end
session_request()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 45 def session_request { "LockDelay" => 15, "Name" => "lock-for-#{lock_key.tr("/", "-")}", } end
unlock()
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 79 def unlock with_session { Diplomat::Lock.release(lock_key, @session_id) } end
Private Instance Methods
with_session(&blk)
click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 84 def with_session &blk return false unless @session_id blk.call return true end