consul-ruby-client 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/consul-ruby-client.gemspec +1 -1
- data/lib/consul/client/agent.rb +44 -11
- data/lib/consul/client/base.rb +22 -18
- data/lib/consul/client/catalog.rb +1 -4
- data/lib/consul/client/key_value.rb +37 -35
- data/lib/consul/client/session.rb +1 -2
- data/lib/consul/client/status.rb +1 -2
- data/lib/consul/client/version.rb +1 -1
- data/lib/consul/client.rb +1 -0
- data/lib/consul/extensions/base.rb +49 -0
- data/lib/consul/extensions/uid.rb +69 -0
- data/lib/consul/model/agent.rb +26 -0
- data/lib/consul/model/config.rb +49 -0
- data/lib/consul/model/member.rb +33 -0
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16424ed2483c59320693c5fa6e98ae986c2c20c7
|
4
|
+
data.tar.gz: a2a578aefa883f5ce9da392619724479ae2f4324
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83ed8596afaacb62abdb09acb649093c97f36cafb1c2fd1cb0f032132bb98e5e33ad0f9db772b55755bb9d988f6dc6d9340fbb3e737a57e17d531dd85c779c99
|
7
|
+
data.tar.gz: 95222ebb6153c603f5292ffa0e2eb0710c9e3c1aaffef719adaa00336da64d36b2b6259ed7d1fc82396d42bf06831575eae359af07871808b73e18ad3b6034de
|
data/consul-ruby-client.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.2'
|
24
24
|
spec.add_development_dependency 'simplecov', '~> 0.9'
|
25
25
|
spec.add_development_dependency 'webmock', '~> 1.21'
|
26
|
-
spec.add_dependency 'rest-client', '~> 1.
|
26
|
+
spec.add_dependency 'rest-client', '~> 1.8'
|
27
27
|
spec.add_dependency 'representable', '~> 2.1'
|
28
28
|
spec.add_dependency 'json', '~> 1.8'
|
29
29
|
end
|
data/lib/consul/client/agent.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'base'
|
2
|
+
require_relative '../model/agent'
|
2
3
|
require_relative '../model/service'
|
3
4
|
require_relative '../model/health_check'
|
4
5
|
|
@@ -6,8 +7,39 @@ require_relative '../model/health_check'
|
|
6
7
|
# Represents Ruby endpoint as described here: https://www.consul.io/docs/agent/http/agent.html
|
7
8
|
module Consul
|
8
9
|
module Client
|
9
|
-
class Agent
|
10
|
-
|
10
|
+
class Agent < Base
|
11
|
+
|
12
|
+
# Public: Describes the agent. It is actually the same method as /v1/agent/self
|
13
|
+
#
|
14
|
+
# Example:
|
15
|
+
# a = Agent.new
|
16
|
+
# a.describe =>
|
17
|
+
# <Consul::Model::Agent config=#<Consul::Model::Config bootstrap=true, server=true,
|
18
|
+
# datacenter="dc1", datadir="/path/to/data", dns_recursor="", dns_recursors=[],
|
19
|
+
# domain="consul.", log_level="INFO", node_name="MyComputer.local", client_addr="127.0.0.1",
|
20
|
+
# bind_addr="0.0.0.0", advertise_addr="172.19.12.106", ports={"DNS"=>8600, "HTTP"=>8500, "HTTPS"=>-1,
|
21
|
+
# "RPC"=>8400, "SerfLan"=>8301, "SerfWan"=>8302, "Server"=>8300}, leave_on_term=false,
|
22
|
+
# skip_leave_on_int=false, stat_site_addr="", protocol=2, enable_debug=false, verify_incoming=false,
|
23
|
+
# verify_outgoing=false, ca_file="", cert_file="", key_file="", start_join=[], ui_dir="", pid_file="",
|
24
|
+
# enable_syslog=false, rejoin_after_leave=false>, member=#<Consul::Model::Member name="MyComputer.local",
|
25
|
+
# addr="172.19.12.106", port=8301, tags={"bootstrap"=>"1", "build"=>"0.5.0:0c7ca91c", "dc"=>"dc1", "port"=>"8300",
|
26
|
+
# "role"=>"consul", "vsn"=>"2", "vsn_max"=>"2", "vsn_min"=>"1"}, status=1, protocol_min=1, protocol_max=2,
|
27
|
+
# protocol_cur=2, delegate_min=2, delegate_max=4, delegate_cur=4>>
|
28
|
+
# a.describe.config.node_name =>
|
29
|
+
# "MyComputer.local"
|
30
|
+
# a.describe.member.name =>
|
31
|
+
# "MyComputer.local"
|
32
|
+
#
|
33
|
+
# Return: Consul::Model::Agent instance that represents this agent.
|
34
|
+
def describe
|
35
|
+
begin
|
36
|
+
resp = _get build_agent_url('self')
|
37
|
+
rescue
|
38
|
+
logger.warn('Unable to request all the services on this through the HTTP API')
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
Consul::Model::Agent.new.extend(Consul::Model::Agent::Representer).from_json(resp)
|
42
|
+
end
|
11
43
|
|
12
44
|
# Public: Returns all the services registered with this Agent.
|
13
45
|
#
|
@@ -16,7 +48,7 @@ module Consul
|
|
16
48
|
begin
|
17
49
|
resp = _get build_agent_url('services')
|
18
50
|
rescue
|
19
|
-
|
51
|
+
logger.warn('Unable to request all the services on this through the HTTP API')
|
20
52
|
return nil
|
21
53
|
end
|
22
54
|
# Consul returns id => ConsulServiceObjects.
|
@@ -36,7 +68,7 @@ module Consul
|
|
36
68
|
begin
|
37
69
|
resp = _get build_agent_url('checks')
|
38
70
|
rescue
|
39
|
-
|
71
|
+
logger.warn('Unable to request all the checks on this through the HTTP API')
|
40
72
|
return nil
|
41
73
|
end
|
42
74
|
# Consul returns id => ConsulServiceObjects.
|
@@ -81,11 +113,11 @@ module Consul
|
|
81
113
|
entity = entity.extend(Consul::Model::Service::Representer)
|
82
114
|
success = register_with_backoff(build_service_url('register'), entity, 0, 3)
|
83
115
|
if success
|
84
|
-
|
116
|
+
logger.info("Successfully registered service #{entity.name}.")
|
85
117
|
unless entity.check.nil?
|
86
118
|
# Pass the first health check
|
87
119
|
c = check("service:#{entity.name}")
|
88
|
-
|
120
|
+
logger.info("Updating status for health check #{c.check_id} to \"pass\".")
|
89
121
|
_get build_check_status_url(c.check_id, 'pass')
|
90
122
|
end
|
91
123
|
end
|
@@ -174,7 +206,7 @@ module Consul
|
|
174
206
|
c
|
175
207
|
end
|
176
208
|
|
177
|
-
# Public:
|
209
|
+
# Public: Script Check
|
178
210
|
#
|
179
211
|
# name - The name of the check, Cannot be nil
|
180
212
|
# script - The script to run locally
|
@@ -193,7 +225,7 @@ module Consul
|
|
193
225
|
c
|
194
226
|
end
|
195
227
|
|
196
|
-
# Public:
|
228
|
+
# Public: HTTP Check
|
197
229
|
#
|
198
230
|
# name - The name of the check, Cannot be nil
|
199
231
|
# http - The HTTP endpoint to hit with periodic GET.
|
@@ -287,10 +319,11 @@ module Consul
|
|
287
319
|
success, _ = _put(url, entity.to_json)
|
288
320
|
unless success # Unless we successfully registered.
|
289
321
|
if threshold == iteration
|
290
|
-
|
322
|
+
logger.error("Unable to complete registration after #{threshold + 1} attempts")
|
323
|
+
return false
|
291
324
|
else
|
292
325
|
# Attempt to register again using the exponential backoff.
|
293
|
-
|
326
|
+
logger.warn("Unable to complete registration after #{iteration + 1} attempts, Retrying up to #{threshold+1} attempts")
|
294
327
|
register_with_backoff(url, entity, iteration + 1, threshold)
|
295
328
|
end
|
296
329
|
end
|
@@ -319,4 +352,4 @@ module Consul
|
|
319
352
|
|
320
353
|
end
|
321
354
|
end
|
322
|
-
end
|
355
|
+
end
|
data/lib/consul/client/base.rb
CHANGED
@@ -7,22 +7,22 @@ module Consul
|
|
7
7
|
module Client
|
8
8
|
|
9
9
|
# Public API Base.
|
10
|
-
|
10
|
+
class Base
|
11
11
|
|
12
|
-
# Public:
|
12
|
+
# Public: Constructor with options hash
|
13
13
|
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
14
|
+
# Optional Parameters:
|
15
|
+
# options[:data_center] - The consul data center. Default: 'dc1'.
|
16
|
+
# options[:api_host] - The api host to request against. Default: '127.0.0.1'.
|
17
|
+
# options[:api_port] - The api port the api host is listening to. Default: '8500'.
|
18
|
+
# options[:version] - The Consul API version to use. Default: 'v1'.
|
19
|
+
# options[:logger] - The default logging mechanism. Default: Logger.new(STDOUT).
|
19
20
|
#
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
@
|
25
|
-
@version = version
|
21
|
+
# Return: This instance
|
22
|
+
def initialize(options = nil)
|
23
|
+
options = {} if options.nil?
|
24
|
+
raise TypeError, 'Options must be nil or a Hash' unless options.is_a?(Hash)
|
25
|
+
@options = options.clone
|
26
26
|
end
|
27
27
|
|
28
28
|
# Public: Test if this Consul Client is reachable.
|
@@ -88,24 +88,28 @@ module Consul
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
+
def options
|
92
|
+
@options ||= {}
|
93
|
+
end
|
94
|
+
|
91
95
|
def data_center
|
92
|
-
@data_center ||= 'dc1'
|
96
|
+
@data_center ||= options[:data_center] || 'dc1'
|
93
97
|
end
|
94
98
|
|
95
99
|
def host
|
96
|
-
@host ||= '127.0.0.1'
|
100
|
+
@host ||= options[:api_host] || '127.0.0.1'
|
97
101
|
end
|
98
102
|
|
99
103
|
def port
|
100
|
-
@port ||= '8500'
|
104
|
+
@port ||= options[:api_port] || '8500'
|
101
105
|
end
|
102
106
|
|
103
107
|
def version
|
104
|
-
@version ||= 'v1'
|
108
|
+
@version ||= options[:version] || 'v1'
|
105
109
|
end
|
106
110
|
|
107
111
|
def logger
|
108
|
-
@logger ||= Logger.new(STDOUT)
|
112
|
+
@logger ||= options[:logger] || Logger.new(STDOUT)
|
109
113
|
end
|
110
114
|
|
111
115
|
def https
|
@@ -4,8 +4,7 @@ require_relative '../model/node'
|
|
4
4
|
# Consul Catalog End Point.
|
5
5
|
module Consul
|
6
6
|
module Client
|
7
|
-
class Catalog
|
8
|
-
include Consul::Client::Base
|
7
|
+
class Catalog < Base
|
9
8
|
|
10
9
|
# Public: Returns a list of all the nodes on this client
|
11
10
|
#
|
@@ -87,8 +86,6 @@ module Consul
|
|
87
86
|
|
88
87
|
# Public: Builds the base url
|
89
88
|
#
|
90
|
-
# Example:
|
91
|
-
#
|
92
89
|
# Returns: The base
|
93
90
|
def build_url(suffix)
|
94
91
|
"#{base_versioned_url}/catalog/#{suffix}"
|
@@ -4,30 +4,21 @@ require_relative '../model/key_value'
|
|
4
4
|
|
5
5
|
module Consul
|
6
6
|
module Client
|
7
|
-
class KeyValue
|
8
|
-
include Consul::Client::Base
|
7
|
+
class KeyValue < Base
|
9
8
|
|
10
|
-
# Public:
|
9
|
+
# Public: Constructor with options hash
|
11
10
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
11
|
+
# Optional Parameters:
|
12
|
+
# options[:namespace] - The KeyValue Store namespace.
|
13
|
+
# options[:data_center] - The consul data center.
|
14
|
+
# options[:api_host] - The api host to request against.
|
15
|
+
# options[:api_port] - The api port the api host is listening to.
|
16
|
+
# options[:version] - The Consul API version to use.
|
17
|
+
# options[:logger] - The default logging mechanism.
|
17
18
|
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
@namespace = sanitize(name_space)
|
22
|
-
@dc = data_center
|
23
|
-
@host = api_host
|
24
|
-
@port = api_port
|
25
|
-
@logger = logger
|
26
|
-
@version = version
|
27
|
-
end
|
28
|
-
|
29
|
-
def name_space
|
30
|
-
@namespace ||= ''
|
19
|
+
# Return: This instance
|
20
|
+
def initialize(options = nil)
|
21
|
+
super(options)
|
31
22
|
end
|
32
23
|
|
33
24
|
# Public: Gets the value associated with a given key.
|
@@ -52,21 +43,14 @@ module Consul
|
|
52
43
|
params[:index] = nil if index
|
53
44
|
params[:keys] = nil if only_keys
|
54
45
|
params[:separator] = separator unless separator.nil?
|
55
|
-
# begin
|
56
|
-
# resp = RestClient.get key_url(key), {:params => params}
|
57
|
-
# rescue
|
58
|
-
# # TODO need to pass more information back to the client.
|
59
|
-
# logger.warn("Unable to get value for #{key}")
|
60
|
-
# nil
|
61
|
-
# end
|
62
46
|
begin
|
63
|
-
resp = _get
|
47
|
+
resp = _get build_url(compose_key(key)), params
|
64
48
|
rescue Exception => e
|
65
49
|
logger.warn("Unable to get value for #{key} due to: #{e}")
|
66
50
|
return nil
|
67
51
|
end
|
68
52
|
return nil if resp.code == 404
|
69
|
-
json = JSON.parse(
|
53
|
+
json = JSON.parse(resp)
|
70
54
|
return json if only_keys
|
71
55
|
json.map { |kv|
|
72
56
|
kv = Consul::Model::KeyValue.new.extend(Consul::Model::KeyValue::Representer).from_hash(kv)
|
@@ -105,9 +89,9 @@ module Consul
|
|
105
89
|
begin
|
106
90
|
value = JSON.generate(value)
|
107
91
|
rescue JSON::GeneratorError
|
108
|
-
|
92
|
+
logger.debug("Using non-JSON value for key #{key}")
|
109
93
|
end
|
110
|
-
_put build_url(key), value, {:params => params}
|
94
|
+
_put build_url(compose_key(key)), value, {:params => params}
|
111
95
|
end
|
112
96
|
|
113
97
|
# Public: Delete the Key Value pair in consul.
|
@@ -123,6 +107,14 @@ module Consul
|
|
123
107
|
RestClient.delete build_url(key), {:params => params}
|
124
108
|
end
|
125
109
|
|
110
|
+
# Public: Returns the name space of this KeyValue Store. This allows you to
|
111
|
+
# identify what root namespace all keys will be placed under.
|
112
|
+
#
|
113
|
+
# Returns: Namespace String.
|
114
|
+
def namespace
|
115
|
+
@namespace ||= options[:namespace] || ''
|
116
|
+
end
|
117
|
+
|
126
118
|
def build_url(suffix)
|
127
119
|
"#{base_versioned_url}/kv/#{suffix}"
|
128
120
|
end
|
@@ -130,11 +122,21 @@ module Consul
|
|
130
122
|
private
|
131
123
|
|
132
124
|
def sanitize(key)
|
133
|
-
key.
|
125
|
+
unless key.nil? or !key.respond_to?(:to_s)
|
126
|
+
key = key.to_s
|
127
|
+
while !key.empty? and key[0] == '/' do
|
128
|
+
key[0] = ''
|
129
|
+
end
|
130
|
+
while !key.empty? and key[key.length - 1] == '/' do
|
131
|
+
key[key.length - 1] = ''
|
132
|
+
end
|
133
|
+
end
|
134
134
|
end
|
135
135
|
|
136
|
-
def
|
137
|
-
|
136
|
+
def compose_key(key)
|
137
|
+
ns = namespace.strip
|
138
|
+
return "#{key}" if ns.empty?
|
139
|
+
"#{ns}/#{key}"
|
138
140
|
end
|
139
141
|
|
140
142
|
end
|
@@ -5,8 +5,7 @@ require_relative '../util/utils'
|
|
5
5
|
module Consul
|
6
6
|
module Client
|
7
7
|
# Consul Session Client
|
8
|
-
class Session
|
9
|
-
include Consul::Client::Base
|
8
|
+
class Session < Base
|
10
9
|
|
11
10
|
# Public: Creates an instance of Consul::Model::Session with as many preset
|
12
11
|
# defaults as possible.
|
data/lib/consul/client/status.rb
CHANGED
data/lib/consul/client.rb
CHANGED
@@ -10,6 +10,7 @@ require_relative '../consul/client/catalog'
|
|
10
10
|
require_relative '../consul/client/key_value'
|
11
11
|
require_relative '../consul/client/session'
|
12
12
|
require_relative '../consul/client/status'
|
13
|
+
require_relative '../consul/extensions/uid'
|
13
14
|
|
14
15
|
module Consul
|
15
16
|
module Client
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module Consul
|
3
|
+
module Extensions
|
4
|
+
class Base
|
5
|
+
|
6
|
+
# Public: Constructor for this extension. Ensures a global unique ID for this client for a given namespace.
|
7
|
+
#
|
8
|
+
# options - (Optional) Hash of Consul Client and extension options.
|
9
|
+
# options[:data_center] - (Optional) The Consul data center. Default: 'dc1'.
|
10
|
+
# options[:api_host] - (Optional) The Consul api host to request against. Default: '127.0.0.1'.
|
11
|
+
# options[:api_port] - (Optional) The Consul api port the api host is listening to. Default: '8500'.
|
12
|
+
# options[:version] - (Optional) The Consul API version to use. Default: 'v1'.
|
13
|
+
# options[:logger] - (Optional) The default logging mechanism. Default: Logger.new(STDOUT).
|
14
|
+
#
|
15
|
+
# Extension instance capable of generating GUID.
|
16
|
+
def initialize(options)
|
17
|
+
options = {} if options.nil?
|
18
|
+
@options = options.clone
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
# Semantically private namespace for consul-ruby-client extensions.
|
24
|
+
def extensions_namespace
|
25
|
+
'.extensions'
|
26
|
+
end
|
27
|
+
|
28
|
+
# The Consul Agent Client to use
|
29
|
+
def agent
|
30
|
+
@agent = Agent.new(options)
|
31
|
+
end
|
32
|
+
|
33
|
+
# The Key Value Store to use.
|
34
|
+
def key_value_store
|
35
|
+
@kvs = KeyValue.new(options)
|
36
|
+
end
|
37
|
+
|
38
|
+
# TODO Add other clients here.
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def options
|
43
|
+
@options
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
require_relative '../../consul/client/key_value'
|
3
|
+
|
4
|
+
module Consul
|
5
|
+
module Extensions
|
6
|
+
|
7
|
+
# Global Unique ID Generator Extension.
|
8
|
+
#
|
9
|
+
# A utility extension that helps in syncronously and safely generating unique id.
|
10
|
+
#
|
11
|
+
class UID < Base
|
12
|
+
include Consul::Client
|
13
|
+
|
14
|
+
# Public: Constructor for this extension. Ensures a global unique ID for this client for a given namespace.
|
15
|
+
#
|
16
|
+
# options - (Required) Hash of Consul Client and extension options.
|
17
|
+
# options[:name] - (Required) The name or name space of the GUID to generate. This extension will
|
18
|
+
# generate a GUID with respect to other clients is this name space.
|
19
|
+
# options[:client_id] - (Optional) External Client ID. This is an additional semantic parameter external to consul.
|
20
|
+
# This provides the capability to unique identify your external client.
|
21
|
+
# Default: Consul Agent name. Cannot begin with "."
|
22
|
+
# options[:data_center] - (Optional) The Consul data center. Default: 'dc1'.
|
23
|
+
# options[:api_host] - (Optional) The Consul api host to request against. Default: '127.0.0.1'.
|
24
|
+
# options[:api_port] - (Optional) The Consul api port the api host is listening to. Default: '8500'.
|
25
|
+
# options[:version] - (Optional) The Consul API version to use. Default: 'v1'.
|
26
|
+
# options[:logger] - (Optional) The default logging mechanism. Default: Logger.new(STDOUT).
|
27
|
+
#
|
28
|
+
# Extension instance capable of generating GUID.
|
29
|
+
def initialize(options)
|
30
|
+
raise TypeError.new "Options must not be a Hash that contains \":name\"" unless options.is_a?(Hash)
|
31
|
+
if options.has_key?(:name) or options[:name].strip.empty?
|
32
|
+
raise ArgumentError.new "Illegal GUID Name: \"#{options[:name]}\". Must not be nil or empty"
|
33
|
+
end
|
34
|
+
raise ArgumentError.new "GUID Name cannot start with special character"
|
35
|
+
options[:namespace] = namespace
|
36
|
+
@options = options.clone
|
37
|
+
end
|
38
|
+
|
39
|
+
# Public: Generate a global unique id syncronously with other
|
40
|
+
def generate
|
41
|
+
# TODO Has the key ever been generated
|
42
|
+
# Create a Consul Session the the underlying namespace
|
43
|
+
# Get the current value for
|
44
|
+
# Set the check and set primitive
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# The FQ namespace for this GUID
|
50
|
+
def namespace
|
51
|
+
@namespace ||= "#{extensions_namespace}/uid/#{@options[:name]}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def available_uid
|
55
|
+
"#{namespace}/.available"
|
56
|
+
end
|
57
|
+
|
58
|
+
# The individual client id for this uid generator
|
59
|
+
def client_id
|
60
|
+
client_id = nil
|
61
|
+
unless @options[:client_id].nil? or @options[:client_id].strip.empty?
|
62
|
+
client_id = client_id.strip
|
63
|
+
end
|
64
|
+
@client_id ||= client_id || agent.describe.member.name
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'representable/json'
|
2
|
+
require 'ostruct'
|
3
|
+
require_relative 'config'
|
4
|
+
require_relative 'member'
|
5
|
+
|
6
|
+
module Consul
|
7
|
+
module Model
|
8
|
+
# Agent Model class
|
9
|
+
#
|
10
|
+
# Common use case Agent.self
|
11
|
+
#
|
12
|
+
# Reference: https://www.consul.io/docs/agent/http/agent.html#agent_self
|
13
|
+
#
|
14
|
+
class Agent < OpenStruct
|
15
|
+
module Representer
|
16
|
+
include Representable::JSON
|
17
|
+
include Representable::Hash
|
18
|
+
include Representable::Hash::AllowSymbols
|
19
|
+
|
20
|
+
property :config, as: :Config, extend: Consul::Model::Config::Representer, class: Consul::Model::Config
|
21
|
+
property :member, as: :Member, extend: Consul::Model::Member::Representer, class: Consul::Model::Member
|
22
|
+
end
|
23
|
+
extend Representer
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'representable/json'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module Consul
|
5
|
+
module Model
|
6
|
+
# Consul Config Object Representation
|
7
|
+
#
|
8
|
+
# Reference: https://www.consul.io/docs/agent/http/agent.html#agent_self
|
9
|
+
#
|
10
|
+
class Config < OpenStruct
|
11
|
+
module Representer
|
12
|
+
include Representable::JSON
|
13
|
+
include Representable::Hash
|
14
|
+
include Representable::Hash::AllowSymbols
|
15
|
+
|
16
|
+
property :bootstrap, as: :Bootstrap
|
17
|
+
property :server, as: :Server
|
18
|
+
property :datacenter, as: :Datacenter
|
19
|
+
property :datadir, as: :DataDir
|
20
|
+
property :dns_recursor, as: :DNSRecursor
|
21
|
+
property :dns_recursors, as: :DNSRecursors
|
22
|
+
property :domain, as: :Domain
|
23
|
+
property :log_level, as: :LogLevel
|
24
|
+
property :node_name, as: :NodeName
|
25
|
+
property :client_addr, as: :ClientAddr
|
26
|
+
property :bind_addr, as: :BindAddr
|
27
|
+
property :advertise_addr, as: :AdvertiseAddr
|
28
|
+
property :ports, as: :Ports
|
29
|
+
property :leave_on_term, as: :LeaveOnTerm
|
30
|
+
property :skip_leave_on_int, as: :SkipLeaveOnInt
|
31
|
+
property :stat_site_addr, as: :StatsiteAddr
|
32
|
+
property :protocol, as: :Protocol
|
33
|
+
property :enable_debug, as: :EnableDebug
|
34
|
+
property :verify_incoming, as: :VerifyIncoming
|
35
|
+
property :verify_outgoing, as: :VerifyOutgoing
|
36
|
+
property :ca_file, as: :CAFile
|
37
|
+
property :cert_file, as: :CertFile
|
38
|
+
property :key_file, as: :KeyFile
|
39
|
+
property :start_join, as: :StartJoin
|
40
|
+
property :ui_dir, as: :UiDir
|
41
|
+
property :pid_file, as: :PidFile
|
42
|
+
property :enable_syslog, as: :EnableSyslog
|
43
|
+
property :rejoin_after_leave, as: :RejoinAfterLeave
|
44
|
+
|
45
|
+
end
|
46
|
+
extend Representer
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'representable/json'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module Consul
|
5
|
+
module Model
|
6
|
+
|
7
|
+
# Consul Member representation
|
8
|
+
#
|
9
|
+
# Reference: https://www.consul.io/docs/commands/members.html
|
10
|
+
#
|
11
|
+
class Member < OpenStruct
|
12
|
+
module Representer
|
13
|
+
include Representable::JSON
|
14
|
+
include Representable::Hash
|
15
|
+
include Representable::Hash::AllowSymbols
|
16
|
+
|
17
|
+
property :name, as: :Name
|
18
|
+
property :addr, as: :Addr
|
19
|
+
property :port, as: :Port
|
20
|
+
# TODO Ensure we map tags into a ruby hash and back
|
21
|
+
property :tags, as: :Tags
|
22
|
+
property :status, as: :Status
|
23
|
+
property :protocol_min, as: :ProtocolMin
|
24
|
+
property :protocol_max, as: :ProtocolMax
|
25
|
+
property :protocol_cur, as: :ProtocolCur
|
26
|
+
property :delegate_min, as: :DelegateMin
|
27
|
+
property :delegate_max, as: :DelegateMax
|
28
|
+
property :delegate_cur, as: :DelegateCur
|
29
|
+
end
|
30
|
+
extend Representer
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: consul-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Hotan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
89
|
+
version: '1.8'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
96
|
+
version: '1.8'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: representable
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,8 +145,13 @@ files:
|
|
145
145
|
- lib/consul/client/session.rb
|
146
146
|
- lib/consul/client/status.rb
|
147
147
|
- lib/consul/client/version.rb
|
148
|
+
- lib/consul/extensions/base.rb
|
149
|
+
- lib/consul/extensions/uid.rb
|
150
|
+
- lib/consul/model/agent.rb
|
151
|
+
- lib/consul/model/config.rb
|
148
152
|
- lib/consul/model/health_check.rb
|
149
153
|
- lib/consul/model/key_value.rb
|
154
|
+
- lib/consul/model/member.rb
|
150
155
|
- lib/consul/model/node.rb
|
151
156
|
- lib/consul/model/service.rb
|
152
157
|
- lib/consul/model/session.rb
|