diplomat-bb 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/diplomat/client.rb +39 -0
- data/lib/diplomat/configuration.rb +1 -0
- data/lib/diplomat/service.rb +91 -0
- data/lib/diplomat/version.rb +1 -1
- data/lib/diplomat.rb +8 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 46491a9b4697e14ac80ebfbf24d279577cdae3fa
|
|
4
|
+
data.tar.gz: cb0e507f5849cb68e6905861de2ba3f1185e88bd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 479f110697541601a1b1ff75e3ed0c383e51222d8fc2575b0ccf23acc885d285a40b687b3325fb4f4392963b535c5e76c19dd06e671e01e093cac25af64109e7
|
|
7
|
+
data.tar.gz: 666fb5f10e82b19778ac5d3345bc4adf518d4e276bb7f5af7478490c6023efcc20f3c6963657d4a94d3cc62ae7ead84b362539b702ba4bcc887f5dd954bda6fc
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'base64'
|
|
2
|
+
require 'faraday'
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module Diplomat
|
|
6
|
+
class Client < Diplomat::RestClient
|
|
7
|
+
|
|
8
|
+
@@config = {}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# parse configuration
|
|
12
|
+
# @param directory [String] location of consult client configuration files
|
|
13
|
+
# @return [OpenStruct] all data associated with the service
|
|
14
|
+
def config directory
|
|
15
|
+
|
|
16
|
+
services = []
|
|
17
|
+
Dir.glob("#{directory}/*.json") do |json_file|
|
|
18
|
+
# do work on files ending in .rb in the desired directory
|
|
19
|
+
file = File.read(json_file)
|
|
20
|
+
data_hash = JSON.parse(file)
|
|
21
|
+
data_hash.each do |key, array|
|
|
22
|
+
if key.casecmp("service") == 0
|
|
23
|
+
services.push(array)
|
|
24
|
+
else
|
|
25
|
+
@@config[key] = array
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
@@config["services"] = services
|
|
30
|
+
return @@config
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @note This is sugar, see (#get)
|
|
34
|
+
def self.config *args
|
|
35
|
+
Diplomat::Client.new.config *args
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/diplomat/service.rb
CHANGED
|
@@ -17,10 +17,101 @@ module Diplomat
|
|
|
17
17
|
return OpenStruct.new JSON.parse(ret.body).first
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
# Register a service
|
|
21
|
+
# @param name [String] the name
|
|
22
|
+
# @param address [String] the address of the service
|
|
23
|
+
# @param port [Integer] port number associated with the service
|
|
24
|
+
# @param tags [Array] tags to be associated with the service
|
|
25
|
+
# @param datacenter [String] datacenter
|
|
26
|
+
# @param node [String] node identifying the service
|
|
27
|
+
# @return [Integer] Status code
|
|
28
|
+
def register name, address, port, node, tags=[], datacenter=''
|
|
29
|
+
|
|
30
|
+
dc = datacenter != '' ? datacenter : Diplomat.configuration.datacenter
|
|
31
|
+
|
|
32
|
+
json = JSON.generate(
|
|
33
|
+
{
|
|
34
|
+
"Datacenter" => dc,
|
|
35
|
+
"Address" => address,
|
|
36
|
+
"Node" => node,
|
|
37
|
+
"Service" => {
|
|
38
|
+
"Service" => name,
|
|
39
|
+
"Port" => port,
|
|
40
|
+
"Tags" => tags
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
ret = @conn.put do |req|
|
|
46
|
+
req.url "/v1/catalog/register"
|
|
47
|
+
req.body = json
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
return true if ret.status == 200
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Deregister a service and all nodes associated with it
|
|
54
|
+
# @param datacenter [String] datacenter
|
|
55
|
+
# @param node [String] node identifying the service
|
|
56
|
+
# @return [Integer] Status code
|
|
57
|
+
def deregister name, tag='', datacenter=''
|
|
58
|
+
|
|
59
|
+
dc = datacenter != '' ? datacenter : Diplomat.configuration.datacenter
|
|
60
|
+
tag_filter = "&tag=#{tag}" unless tag.empty?
|
|
61
|
+
|
|
62
|
+
nodes = self.get("#{name}?dc=#{dc}#{tag_filter}",:all)
|
|
63
|
+
nodes.each do |x|
|
|
64
|
+
self.deregister_node(x.ServiceID, x.Node, datacenter )
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
return true
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# Deregister a given node for a service
|
|
72
|
+
# @param serviceid [String] service id to deregister
|
|
73
|
+
# @param datacenter [String] datacenter
|
|
74
|
+
# @param node [String] node identifying the service
|
|
75
|
+
# @return [Integer] Status code
|
|
76
|
+
def deregister_node serviceid, node, datacenter=''
|
|
77
|
+
|
|
78
|
+
dc = datacenter != '' ? datacenter : Diplomat.configuration.datacenter
|
|
79
|
+
json = JSON.generate(
|
|
80
|
+
{
|
|
81
|
+
"Datacenter" => dc,
|
|
82
|
+
"Node" => node,
|
|
83
|
+
"ServiceId" => serviceid
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
ret = @conn.put do |req|
|
|
88
|
+
req.url "/v1/catalog/deregister"
|
|
89
|
+
req.body = json
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
return true if ret.status == 200
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
20
96
|
# @note This is sugar, see (#get)
|
|
21
97
|
def self.get *args
|
|
22
98
|
Diplomat::Service.new.get *args
|
|
23
99
|
end
|
|
24
100
|
|
|
101
|
+
# @note This is sugar, see (#register)
|
|
102
|
+
def self.register *args
|
|
103
|
+
Diplomat::Service.new.register *args
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @note This is sugar, see (#deregister)
|
|
107
|
+
def self.deregister *args
|
|
108
|
+
Diplomat::Service.new.deregister *args
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# @note This is sugar, see (#deregister_node)
|
|
112
|
+
def self.deregister_node *args
|
|
113
|
+
Diplomat::Service.new.deregister_node *args
|
|
114
|
+
end
|
|
115
|
+
|
|
25
116
|
end
|
|
26
117
|
end
|
data/lib/diplomat/version.rb
CHANGED
data/lib/diplomat.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Diplomat
|
|
|
20
20
|
self.root_path = File.expand_path "..", __FILE__
|
|
21
21
|
self.lib_path = File.expand_path "../diplomat", __FILE__
|
|
22
22
|
|
|
23
|
-
require_libs "configuration", "rest_client", "kv", "service", "members", "check", "health", "session", "lock"
|
|
23
|
+
require_libs "configuration", "rest_client", "kv", "service", "members", "check", "health", "session", "lock", "client"
|
|
24
24
|
self.configuration ||= Diplomat::Configuration.new
|
|
25
25
|
|
|
26
26
|
class << self
|
|
@@ -31,6 +31,13 @@ module Diplomat
|
|
|
31
31
|
yield(configuration)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
def bootstrap directory
|
|
35
|
+
self.configuration ||= Diplomat::Configuration.new
|
|
36
|
+
config = Diplomat::Client.config directory
|
|
37
|
+
self.configuration.url = "http://#{config['start_join'].first}:#{config['ports']['http']}"
|
|
38
|
+
self.configuration.datacenter = config['datacenter']
|
|
39
|
+
end
|
|
40
|
+
|
|
34
41
|
private
|
|
35
42
|
|
|
36
43
|
def method_missing(name, *args, &block)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: diplomat-bb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Hamelink
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-02-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -178,6 +178,7 @@ files:
|
|
|
178
178
|
- features/step_definitions/test_key_value.rb
|
|
179
179
|
- lib/diplomat.rb
|
|
180
180
|
- lib/diplomat/check.rb
|
|
181
|
+
- lib/diplomat/client.rb
|
|
181
182
|
- lib/diplomat/configuration.rb
|
|
182
183
|
- lib/diplomat/health.rb
|
|
183
184
|
- lib/diplomat/kv.rb
|