Class: Capistrano::ConsulKvLock::Latch
- Inherits:
-
Object
- Object
- Capistrano::ConsulKvLock::Latch
- Defined in:
- lib/capistrano/consul_kv_lock/latch.rb
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#lock_key ⇒ Object
readonly
Returns the value of attribute lock_key.
Class Method Summary collapse
Instance Method Summary collapse
- #create_session ⇒ Object
- #delete_session ⇒ Object
-
#initialize(consul_url, options = {}) ⇒ Latch
constructor
A new instance of Latch.
- #lock ⇒ Object
- #locked? ⇒ Boolean
- #logger ⇒ Object
- #session_request ⇒ Object
- #unlock ⇒ Object
Constructor Details
#initialize(consul_url, options = {}) ⇒ Latch
Returns a new instance of Latch.
32 33 34 35 36 37 38 39 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 32 def initialize(consul_url, ={}) @client = begin consul = URI.parse(consul_url) Consul::Client.v1.http(host: consul.host, port: consul.port, logger: logger) end @lock_key = [:consul_lock_key] || 'deployment/locked' @session_id = nil end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
40 41 42 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 40 def client @client end |
#lock_key ⇒ Object (readonly)
Returns the value of attribute lock_key.
40 41 42 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 40 def lock_key @lock_key end |
Class Method Details
.instance ⇒ Object
24 25 26 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 24 def self.instance @_instance end |
.logger ⇒ Object
28 29 30 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 28 def self.logger @_logger ||= SSHKittyLogger.new end |
.set_instance(consul_url, options = {}) ⇒ Object
18 19 20 21 22 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 18 def self.set_instance(consul_url, ={}) @_instance ||= new(consul_url, ) logger.debug "Registered latch instance: #{@_instance.inspect}" @_instance end |
Instance Method Details
#create_session ⇒ Object
65 66 67 68 69 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 65 def create_session logger.debug "Session request: #{session_request.inspect}" r = client.put("/session/create", session_request) @session_id = r['ID'] end |
#delete_session ⇒ Object
71 72 73 74 75 76 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 71 def delete_session with_session { client.put("/session/destroy/#{@session_id}", "") } @session_id = nil end |
#lock ⇒ Object
78 79 80 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 78 def lock with_session { client.put("/kv/#{lock_key}?acquire=#{@session_id}", "true") } end |
#locked? ⇒ Boolean
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 53 def locked? r = client.get("/kv/#{lock_key}") !!(Base64.decode64(r[0]['Value']) =~ /\A["'](t(rue)?|1|y(es)?)["']\z/) rescue Consul::Client::ResponseException => e # in case of 404 if e..include?('404') return false else raise e end end |
#logger ⇒ Object
42 43 44 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 42 def logger self.class.logger end |
#session_request ⇒ Object
46 47 48 49 50 51 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 46 def session_request { "LockDelay" => 15, "Name" => "lock-for-#{lock_key.tr("/", "-")}", } end |
#unlock ⇒ Object
82 83 84 |
# File 'lib/capistrano/consul_kv_lock/latch.rb', line 82 def unlock with_session { client.put("/kv/#{lock_key}?release=#{@session_id}", "false") } end |