diplomat 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +18 -0
- data/lib/diplomat/acl.rb +100 -0
- data/lib/diplomat/api_options.rb +15 -0
- data/lib/diplomat/error.rb +3 -0
- data/lib/diplomat/kv.rb +16 -13
- data/lib/diplomat/node.rb +41 -0
- data/lib/diplomat/nodes.rb +1 -0
- data/lib/diplomat/rest_client.rb +1 -0
- data/lib/diplomat/version.rb +1 -1
- data/lib/diplomat.rb +4 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce6e11c99998e8ccde4674d2f25b1c65a7dadcb6
|
4
|
+
data.tar.gz: 0ed7b4a14cedf79aed1f0856b60f8eb96744adbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dae2bbf4adfdcda941ce8d9ad5b09868dfe7abbd957122e217159fc27d15f585201edfd8de4ac570fb0e28baf284352ba9c4e4a750808b9e95b8149e074eaf80
|
7
|
+
data.tar.gz: 4a5b3fb941c350acc1a2272727fb4eaefe63df2c5814bca82fd9dc0f889acf6709aa85b1fb531431d2c092b96cff766d48ae5fe392c6f6c84a8d81e659d191e8
|
data/README.md
CHANGED
@@ -82,6 +82,24 @@ Diplomat::Kv.get('foo/', recurse: true)
|
|
82
82
|
# => [{:key=>"foo/a", :value=>"lorem"}, {:key=>"foo/b", :value=>"ipsum"}, {:key=>"foo/c", :value=>"dolor"}]
|
83
83
|
```
|
84
84
|
|
85
|
+
### Nodes
|
86
|
+
|
87
|
+
#### Getting
|
88
|
+
|
89
|
+
Look up a node:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
foo_service = Diplomat::Node.get('foo')
|
93
|
+
# => {"Node"=>{"Node"=>"foobar", "Address"=>"10.1.10.12"}, "Services"=>{"consul"=>{"ID"=>"consul", "Service"=>"consul", "Tags"=>nil, "Port"=>8300}, "redis"=>{"ID"=>"redis", "Service"=>"redis", "Tags"=>["v1"], "Port"=>8000}}}
|
94
|
+
```
|
95
|
+
|
96
|
+
Get all nodes:
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
nodes = Diplomat::Node.get_all
|
100
|
+
# => [#<OpenStruct Address="10.1.10.12", Node="foo">, #<OpenStruct Address="10.1.10.13", Node="bar">]
|
101
|
+
```
|
102
|
+
|
85
103
|
### Services
|
86
104
|
|
87
105
|
#### Getting
|
data/lib/diplomat/acl.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
module Diplomat
|
5
|
+
class Acl < Diplomat::RestClient
|
6
|
+
|
7
|
+
include ApiOptions
|
8
|
+
|
9
|
+
@access_methods = [ :list, :info, :create, :destroy, :update ]
|
10
|
+
attr_reader :id, :type, :acl
|
11
|
+
|
12
|
+
# Get Acl info by ID
|
13
|
+
# @param id [String] ID of the Acl to get
|
14
|
+
# @return [Hash]
|
15
|
+
def info id, options=nil, not_found=:reject, found=:return
|
16
|
+
@id = id
|
17
|
+
@options = options
|
18
|
+
|
19
|
+
url = ["/v1/acl/info/#{@id}"]
|
20
|
+
url += check_acl_token
|
21
|
+
url += use_consistency(@options)
|
22
|
+
|
23
|
+
raw = @conn_no_err.get concat_url url
|
24
|
+
if raw.status == 200 and raw.body
|
25
|
+
case found
|
26
|
+
when :reject
|
27
|
+
raise Diplomat::AclAlreadyExists, @id
|
28
|
+
when :return
|
29
|
+
@raw = raw
|
30
|
+
return parse_body
|
31
|
+
end
|
32
|
+
elsif raw.status == 200 and !raw.body
|
33
|
+
case not_found
|
34
|
+
when :reject
|
35
|
+
raise Diplomat::AclNotFound, @id
|
36
|
+
when :return
|
37
|
+
return nil
|
38
|
+
end
|
39
|
+
else
|
40
|
+
raise Diplomat::UnknownStatus, "status #{raw.status}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# List all Acls
|
45
|
+
# @return [List] list of [Hash] of Acls
|
46
|
+
def list
|
47
|
+
url = ["/v1/acl/list"]
|
48
|
+
url += check_acl_token
|
49
|
+
raw = @conn_no_err.get concat_url url
|
50
|
+
|
51
|
+
if raw.status == 200
|
52
|
+
@raw = raw
|
53
|
+
return parse_body
|
54
|
+
else
|
55
|
+
raise Diplomat::UnknownStatus, "status #{raw.status}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Update an Acl definition, create if not present
|
60
|
+
# @param value [Hash] Acl definition, ID field is mandatory
|
61
|
+
# @return [Hash] The result Acl
|
62
|
+
def update value
|
63
|
+
raise Diplomat::IdParameterRequired unless value['ID']
|
64
|
+
|
65
|
+
@raw = @conn.put do |req|
|
66
|
+
url = ["/v1/acl/update"]
|
67
|
+
url += check_acl_token
|
68
|
+
url += use_cas(@options)
|
69
|
+
req.url concat_url url
|
70
|
+
req.body = value.to_json
|
71
|
+
end
|
72
|
+
JSON.parse(@raw.body)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Create an Acl definition
|
76
|
+
# @param value [Hash] Acl definition, ID field is mandatory
|
77
|
+
# @return [Hash] The result Acl
|
78
|
+
def create value
|
79
|
+
@raw = @conn.put do |req|
|
80
|
+
url = ["/v1/acl/create"]
|
81
|
+
url += check_acl_token
|
82
|
+
url += use_cas(@options)
|
83
|
+
req.url concat_url url
|
84
|
+
req.body = value.to_json
|
85
|
+
end
|
86
|
+
JSON.parse(@raw.body)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Destroy an ACl token by its id
|
90
|
+
# @param ID [String] the Acl ID
|
91
|
+
# @return [Bool]
|
92
|
+
def destroy id
|
93
|
+
@id = id
|
94
|
+
url = ["/v1/acl/destroy/#{@id}"]
|
95
|
+
url += check_acl_token
|
96
|
+
@raw = @conn.put concat_url url
|
97
|
+
@raw.body == "true"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Diplomat
|
2
|
+
module ApiOptions
|
3
|
+
def check_acl_token
|
4
|
+
use_named_parameter("token", Diplomat.configuration.acl_token)
|
5
|
+
end
|
6
|
+
|
7
|
+
def use_cas(options)
|
8
|
+
if options then use_named_parameter("cas", options[:cas]) else [] end
|
9
|
+
end
|
10
|
+
|
11
|
+
def use_consistency(options)
|
12
|
+
if options && options[:consistency] then ["#{options[:consistency]}"] else [] end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/diplomat/error.rb
CHANGED
@@ -2,7 +2,10 @@ module Diplomat
|
|
2
2
|
class KeyNotFound < StandardError; end
|
3
3
|
class PathNotFound < StandardError; end
|
4
4
|
class KeyAlreadyExists < StandardError; end
|
5
|
+
class AclNotFound < StandardError; end
|
6
|
+
class AclAlreadyExists < StandardError; end
|
5
7
|
class EventNotFound < StandardError; end
|
6
8
|
class EventAlreadyExists < StandardError; end
|
7
9
|
class UnknownStatus < StandardError; end
|
10
|
+
class IdParameterRequired < StandardError; end
|
8
11
|
end
|
data/lib/diplomat/kv.rb
CHANGED
@@ -3,6 +3,9 @@ require 'faraday'
|
|
3
3
|
|
4
4
|
module Diplomat
|
5
5
|
class Kv < Diplomat::RestClient
|
6
|
+
|
7
|
+
include ApiOptions
|
8
|
+
|
6
9
|
@access_methods = [ :get, :put, :delete ]
|
7
10
|
attr_reader :key, :value, :raw
|
8
11
|
|
@@ -12,6 +15,8 @@ module Diplomat
|
|
12
15
|
# @option options [Boolean] :recurse If to make recursive get or not
|
13
16
|
# @option options [String] :consistency The read consistency type
|
14
17
|
# @option options [String] :dc Target datacenter
|
18
|
+
# @option options [Boolean] :keys Only return key names.
|
19
|
+
# @option options [String] :separator List only up to a given separator. Only applies when combined with :keys option.
|
15
20
|
# @option options [Boolean] :nil_values If to return keys/dirs with nil values
|
16
21
|
# @param not_found [Symbol] behaviour if the key doesn't exist;
|
17
22
|
# :reject with exception, :return degenerate value, or :wait for it to appear
|
@@ -43,6 +48,8 @@ module Diplomat
|
|
43
48
|
url += check_acl_token
|
44
49
|
url += use_consistency(@options)
|
45
50
|
url += dc(@options)
|
51
|
+
url += keys(@options)
|
52
|
+
url += separator(@options)
|
46
53
|
|
47
54
|
return_nil_values = (@options and @options[:nil_values])
|
48
55
|
|
@@ -122,24 +129,20 @@ module Diplomat
|
|
122
129
|
|
123
130
|
private
|
124
131
|
|
125
|
-
def check_acl_token
|
126
|
-
use_named_parameter("token", Diplomat.configuration.acl_token)
|
127
|
-
end
|
128
|
-
|
129
|
-
def use_cas(options)
|
130
|
-
if options then use_named_parameter("cas", options[:cas]) else [] end
|
131
|
-
end
|
132
|
-
|
133
|
-
def use_consistency(options)
|
134
|
-
if options && options[:consistency] then ["#{options[:consistency]}"] else [] end
|
135
|
-
end
|
136
|
-
|
137
132
|
def recurse_get(options)
|
138
|
-
if options && options[:recurse] then ['recurse'] else [] end
|
133
|
+
if options && options[:recurse] == true then ['recurse'] else [] end
|
139
134
|
end
|
140
135
|
|
141
136
|
def dc(options)
|
142
137
|
if options && options[:dc] then use_named_parameter("dc", options[:dc]) else [] end
|
143
138
|
end
|
139
|
+
|
140
|
+
def keys(options)
|
141
|
+
if options && options[:keys] == true then ['keys'] else [] end
|
142
|
+
end
|
143
|
+
|
144
|
+
def separator(options)
|
145
|
+
if options && options[:separator] then use_named_parameter("separator", options[:separator]) else [] end
|
146
|
+
end
|
144
147
|
end
|
145
148
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
module Diplomat
|
5
|
+
class Node < Diplomat::RestClient
|
6
|
+
|
7
|
+
@access_methods = [ :get, :get_all ]
|
8
|
+
|
9
|
+
# Get a node by it's key
|
10
|
+
# @param key [String] the key
|
11
|
+
# @param options [Hash] :dc string for dc specific query
|
12
|
+
# @return [OpenStruct] all data associated with the node
|
13
|
+
def get key, options=nil
|
14
|
+
|
15
|
+
url = ["/v1/catalog/node/#{key}"]
|
16
|
+
url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
|
17
|
+
|
18
|
+
# If the request fails, it's probably due to a bad path
|
19
|
+
# so return a PathNotFound error.
|
20
|
+
begin
|
21
|
+
ret = @conn.get concat_url url
|
22
|
+
rescue Faraday::ClientError
|
23
|
+
raise Diplomat::PathNotFound
|
24
|
+
end
|
25
|
+
return JSON.parse(ret.body)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get all the nodes
|
29
|
+
# @return [OpenStruct] the list of all nodes
|
30
|
+
def get_all
|
31
|
+
url = "/v1/catalog/nodes"
|
32
|
+
begin
|
33
|
+
ret = @conn.get url
|
34
|
+
rescue Faraday::ClientError
|
35
|
+
raise Diplomat::PathNotFound
|
36
|
+
end
|
37
|
+
|
38
|
+
return JSON.parse(ret.body).map { |service| OpenStruct.new service }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/diplomat/nodes.rb
CHANGED
data/lib/diplomat/rest_client.rb
CHANGED
@@ -76,6 +76,7 @@ module Diplomat
|
|
76
76
|
|
77
77
|
# Get the key/value(s) from the raw output
|
78
78
|
def return_value(nil_values=false)
|
79
|
+
return @value = @raw if @raw.first.is_a? String
|
79
80
|
if @raw.count == 1
|
80
81
|
@value = @raw.first["Value"]
|
81
82
|
@value = Base64.decode64(@value) unless @value.nil?
|
data/lib/diplomat/version.rb
CHANGED
data/lib/diplomat.rb
CHANGED
@@ -21,7 +21,9 @@ 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", "
|
24
|
+
require_libs "configuration", "rest_client", "api_options", "kv", "datacenter",
|
25
|
+
"service", "members", "node", "nodes", "check", "health", "session", "lock",
|
26
|
+
"error", "event", "acl"
|
25
27
|
self.configuration ||= Diplomat::Configuration.new
|
26
28
|
|
27
29
|
class << self
|
@@ -45,4 +47,4 @@ module Diplomat
|
|
45
47
|
Diplomat::Kv.new.send(name, *args, &block)
|
46
48
|
end
|
47
49
|
end
|
48
|
-
end
|
50
|
+
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.
|
4
|
+
version: 0.15.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-
|
11
|
+
date: 2015-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -177,6 +177,8 @@ files:
|
|
177
177
|
- features/step_definitions/setup_diplomat.rb
|
178
178
|
- features/step_definitions/test_key_value.rb
|
179
179
|
- lib/diplomat.rb
|
180
|
+
- lib/diplomat/acl.rb
|
181
|
+
- lib/diplomat/api_options.rb
|
180
182
|
- lib/diplomat/check.rb
|
181
183
|
- lib/diplomat/configuration.rb
|
182
184
|
- lib/diplomat/datacenter.rb
|
@@ -186,6 +188,7 @@ files:
|
|
186
188
|
- lib/diplomat/kv.rb
|
187
189
|
- lib/diplomat/lock.rb
|
188
190
|
- lib/diplomat/members.rb
|
191
|
+
- lib/diplomat/node.rb
|
189
192
|
- lib/diplomat/nodes.rb
|
190
193
|
- lib/diplomat/rest_client.rb
|
191
194
|
- lib/diplomat/service.rb
|