diplomat 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2dd54168c7c65cea06154d8f9e4ba3e69bab7c04
4
- data.tar.gz: 42f4033666bbe21e3ee2e47008d544be6dd573d4
3
+ metadata.gz: aa373c2ee15ea4f0c80e90974a66f6dad2e76988
4
+ data.tar.gz: e890be6e209330f3c4363dc7645c67fbe5fbbca2
5
5
  SHA512:
6
- metadata.gz: ef4255c1bfd8befb00b543d681bbdfb10c757941b6beda2bf42e582574537198ccf16496ef79e2fd80ac7db9e6225b44c95d4196b49dcd887744ee505489985e
7
- data.tar.gz: 46854909ad71908ccb8de42fefb8b97c9be1889011f830d7180d9fd01b11e0ec0cb39b869ea389754d88dc74e0723e0acece5330c0edde8bd24a2fcab3162dad
6
+ metadata.gz: 5105013dcf052dbd3041b5e3aeb8a5b5c8c94e3f8e75b89c5735a0e1ef1d0425c7eb535ad77c28995ede0ca0a45154f9606d090dcec8e76a9cf67b5f65c9348c
7
+ data.tar.gz: 438f5e8dc09e5b5010b044169757d0bb1ce685fc15ae32d90e6ae037504715faab0afa1e2a0564449bd7b276c1885ed04f6c0fbc5ec74eedfb18d92041ebe51a
data/README.md CHANGED
@@ -65,6 +65,12 @@ foo = Diplomat::Kv.get('foo')
65
65
  # => "bar"
66
66
  ```
67
67
 
68
+ Or retrieve a value from another datacenter:
69
+ ```ruby
70
+ foo = Diplomat::Kv.get('foo', :dc => 'dc-west')
71
+ # => "baz"
72
+ ```
73
+
68
74
  You can also retrieve values recursively:
69
75
 
70
76
  ```ruby
@@ -84,7 +90,7 @@ Looking up a service is easy as pie:
84
90
 
85
91
  ```ruby
86
92
  foo_service = Diplomat::Service.get('foo')
87
- # => #<OpenStruct Node="hotel", Address="1.2.3.4", ServiceID="hotel_foo", ServiceName="foo", ServiceTags=["foo"], ServicePort=5432>
93
+ # => #<OpenStruct Node="hotel", Address="1.2.3.4", ServiceID="hotel_foo", ServiceName="foo", ServiceTags=["foo"], ServicePort=5432>
88
94
  ```
89
95
  Or if you have multiple nodes per service:
90
96
 
@@ -93,6 +99,23 @@ foo_service = Diplomat::Service.get('foo', :all)
93
99
  # => [#<OpenStruct Node="hotel", Address="1.2.3.4", ServiceID="hotel_foo", ServiceName="foo", ServiceTags=["foo"], ServicePort=5432>,#<OpenStruct Node="indigo", Address="1.2.3.5", ServiceID="indigo_foo", ServiceName="foo", ServiceTags=["foo"], ServicePort=5432>]
94
100
  ```
95
101
 
102
+ Or if you want to find services for a particular datacenter
103
+
104
+ ```ruby
105
+ foo_service = Diplomat::Service.get('foo', :all, { :dc => 'My_Datacenter'})
106
+ # => [#<OpenStruct Node="hotel", Address="1.2.3.4", ServiceID="hotel_foo", ServiceName="foo", ServiceTags=["foo"], ServicePort=5432>,#<OpenStruct Node="indigo", Address="1.2.3.5", ServiceID="indigo_foo", ServiceName="foo", ServiceTags=["foo"], ServicePort=5432>]
107
+ ```
108
+
109
+ ### Datacenters
110
+
111
+ Getting a list of datacenters is quite simple and gives you the option to extract all services out of
112
+ all accessible datacenters if you need to.
113
+
114
+ ```ruby
115
+ datacenters = Diplomat::Datacenter.get()
116
+ # => ["DC1", "DC2"]
117
+ ```
118
+
96
119
  ### Sessions
97
120
 
98
121
  Creating a session:
@@ -179,7 +202,7 @@ You can create a custom configuration using the following syntax:
179
202
  ```ruby
180
203
  Diplomat.configure do |config|
181
204
  # Set up a custom Consul URL
182
- config.url = "localhost:8888"
205
+ config.url = "http://localhost:8888"
183
206
  # Set up a custom Faraday Middleware
184
207
  config.middleware = MyCustomMiddleware
185
208
  # Connect into consul with custom access token (ACL)
@@ -21,7 +21,7 @@ module Diplomat
21
21
  self.root_path = File.expand_path "..", __FILE__
22
22
  self.lib_path = File.expand_path "../diplomat", __FILE__
23
23
 
24
- require_libs "configuration", "rest_client", "kv", "service", "members", "check", "health", "session", "lock", "error", "event"
24
+ require_libs "configuration", "rest_client", "kv", "datacenter", "service", "members", "check", "health", "session", "lock", "error", "event"
25
25
  self.configuration ||= Diplomat::Configuration.new
26
26
 
27
27
  class << self
@@ -45,4 +45,4 @@ module Diplomat
45
45
  Diplomat::Kv.new.send(name, *args, &block)
46
46
  end
47
47
  end
48
- end
48
+ end
@@ -0,0 +1,27 @@
1
+ require 'base64'
2
+ require 'faraday'
3
+
4
+ module Diplomat
5
+ class Datacenter < Diplomat::RestClient
6
+
7
+ @access_methods = [ :get ]
8
+
9
+ # Get an array of all avaliable datacenters accessible by the local consul agent
10
+ # @param meta [Hash] output structure containing header information about the request (index)
11
+ # @return [OpenStruct] all datacenters avaliable to this consul agent
12
+ def get meta=nil
13
+
14
+ url = ["/v1/catalog/datacenters"]
15
+
16
+ ret = @conn.get concat_url url
17
+
18
+ if meta and ret.headers
19
+ meta[:index] = ret.headers["x-consul-index"]
20
+ meta[:knownleader] = ret.headers["x-consul-knownleader"]
21
+ meta[:lastcontact] = ret.headers["x-consul-lastcontact"]
22
+ end
23
+ return JSON.parse(ret.body)
24
+ end
25
+
26
+ end
27
+ end
@@ -1,5 +1,6 @@
1
1
  module Diplomat
2
2
  class KeyNotFound < StandardError; end
3
+ class PathNotFound < StandardError; end
3
4
  class KeyAlreadyExists < StandardError; end
4
5
  class EventNotFound < StandardError; end
5
6
  class EventAlreadyExists < StandardError; end
@@ -10,6 +10,7 @@ module Diplomat
10
10
  # @param key [String] the key
11
11
  # @param options [Hash] the query params
12
12
  # @option options [String] :consistency The read consistency type
13
+ # @option options [String] :dc Target datacenter
13
14
  # @param not_found [Symbol] behaviour if the key doesn't exist;
14
15
  # :reject with exception, :return degenerate value, or :wait for it to appear
15
16
  # @param found [Symbol] behaviour if the key does exist;
@@ -39,6 +40,7 @@ module Diplomat
39
40
  url += recurse_get(@options)
40
41
  url += check_acl_token
41
42
  url += use_consistency(@options)
43
+ url += dc(@options)
42
44
 
43
45
  # 404s OK using this connection
44
46
  raw = @conn_no_err.get concat_url url
@@ -81,6 +83,7 @@ module Diplomat
81
83
  # @param value [String] the value
82
84
  # @param options [Hash] the query params
83
85
  # @option options [Integer] :cas The modify index
86
+ # @option options [String] :dc Target datacenter
84
87
  # @return [Bool] Success or failure of the write (can fail in c-a-s mode)
85
88
  def put key, value, options=nil
86
89
  @options = options
@@ -88,6 +91,7 @@ module Diplomat
88
91
  url = ["/v1/kv/#{key}"]
89
92
  url += check_acl_token
90
93
  url += use_cas(@options)
94
+ url += dc(@options)
91
95
  req.url concat_url url
92
96
  req.body = value
93
97
  end
@@ -100,11 +104,15 @@ module Diplomat
100
104
 
101
105
  # Delete a value by its key
102
106
  # @param key [String] the key
107
+ # @param options [Hash] the query params
108
+ # @option options [String] :dc Target datacenter
103
109
  # @return [OpenStruct]
104
- def delete key
110
+ def delete key, options=nil
105
111
  @key = key
112
+ @options = options
106
113
  url = ["/v1/kv/#{@key}"]
107
114
  url += check_acl_token
115
+ url += dc(@options)
108
116
  @raw = @conn.delete concat_url url
109
117
  end
110
118
 
@@ -125,5 +133,9 @@ module Diplomat
125
133
  def recurse_get(options)
126
134
  if options && options[:recurse] then ['recurse'] else [] end
127
135
  end
136
+
137
+ def dc(options)
138
+ if options && options[:dc] then use_named_parameter("dc", options[:dc]) else [] end
139
+ end
128
140
  end
129
141
  end
@@ -80,11 +80,12 @@ module Diplomat
80
80
  @value = @raw.first["Value"]
81
81
  @value = Base64.decode64(@value) unless @value.nil?
82
82
  else
83
- @value = @raw.map do |e|
84
- {
83
+ @value = @raw.reduce([]) do |acc, e|
84
+ acc << {
85
85
  :key => e["Key"],
86
- :value => (Base64.decode64(e["Value"]) unless e["Value"].nil?)
87
- }
86
+ :value => Base64.decode64(e["Value"])
87
+ } unless e["Value"].nil?
88
+ acc
88
89
  end
89
90
  end
90
91
  end
@@ -3,7 +3,7 @@ require 'faraday'
3
3
 
4
4
  module Diplomat
5
5
  class Service < Diplomat::RestClient
6
-
6
+
7
7
  @access_methods = [ :get, :register, :deregister ]
8
8
 
9
9
  # Get a service by it's key
@@ -19,7 +19,13 @@ module Diplomat
19
19
  url << use_named_parameter('index', options[:index]) if options and options[:index]
20
20
  url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
21
21
 
22
- ret = @conn.get concat_url url
22
+ # If the request fails, it's probably due to a bad path
23
+ # so return a PathNotFound error.
24
+ begin
25
+ ret = @conn.get concat_url url
26
+ rescue Faraday::ClientError
27
+ raise Diplomat::PathNotFound
28
+ end
23
29
 
24
30
  if meta and ret.headers
25
31
  meta[:index] = ret.headers["x-consul-index"]
@@ -44,7 +44,7 @@ module Diplomat
44
44
 
45
45
  def renew id
46
46
  raw = @conn.put do |req|
47
- req.url = "/v1/session/renew/#{id}"
47
+ req.url "/v1/session/renew/#{id}"
48
48
  end
49
49
  JSON.parse(raw.body)
50
50
  end
@@ -1,3 +1,3 @@
1
1
  module Diplomat
2
- VERSION = "0.12.0"
2
+ VERSION = "0.13.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diplomat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hamelink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-30 00:00:00.000000000 Z
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -179,6 +179,7 @@ files:
179
179
  - lib/diplomat.rb
180
180
  - lib/diplomat/check.rb
181
181
  - lib/diplomat/configuration.rb
182
+ - lib/diplomat/datacenter.rb
182
183
  - lib/diplomat/error.rb
183
184
  - lib/diplomat/event.rb
184
185
  - lib/diplomat/health.rb
@@ -209,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
210
  version: '0'
210
211
  requirements: []
211
212
  rubyforge_project:
212
- rubygems_version: 2.4.5
213
+ rubygems_version: 2.4.8
213
214
  signing_key:
214
215
  specification_version: 4
215
216
  summary: Diplomat is a simple wrapper for Consul