diplomat 0.17.0 → 0.18.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62862f6656ae4dd60092e29e884c722b22179b01
4
- data.tar.gz: 6414b0363e8213a40d4b247b25a301fca3635de4
3
+ metadata.gz: 7ea44efec4bbbbd7dcea08226f4c1e85ee3d0c74
4
+ data.tar.gz: 686a774e0ff66b40516eb75f905a9ffb463e4317
5
5
  SHA512:
6
- metadata.gz: d0b382b7644788c012d204e5c666efb53fe493b456234b3f42cc7bfeb72d004b2c54e4f16afc58b176d114278c50973c489fa2e0795608f7dbc8acf17a6cc342
7
- data.tar.gz: f6230d83e8c5547eb20e173ceb43de5e6a42ecf6094c49898b51e3b5ada275dfee34f0dc9c671a9d1cec51f775acd3ae647ab18554e77681a962ad4f6b9f78b4
6
+ metadata.gz: 96a3c918192148440c80515a0e49cadd8422ead23a814c12d9e21e66907654c6d07a6dbf5e6b1a33864165644245442eb0b36ac8fb9ac8a9acbc87d10e52cfb6
7
+ data.tar.gz: 54a7dc66263f1dadb005e6ba4ef402551e5c5244d492d9f83e01d3dab27164384b865c98c451d4f25305a843542a23797b16bd32b3aea3b1cda1cb96099f79a1
data/README.md CHANGED
@@ -100,6 +100,20 @@ nodes = Diplomat::Node.get_all
100
100
  # => [#<OpenStruct Address="10.1.10.12", Node="foo">, #<OpenStruct Address="10.1.10.13", Node="bar">]
101
101
  ```
102
102
 
103
+ Register a node:
104
+
105
+ ```ruby
106
+ Diplomat::Node.register({ :Node => "app1", :Address => "10.0.0.2" })
107
+ # => true
108
+ ```
109
+
110
+ De-register a node:
111
+
112
+ ```ruby
113
+ Diplomat::Node.deregister({ :Node => "app1", :Address => "10.0.0.2" })
114
+ # => true
115
+ ```
116
+
103
117
  ### Services
104
118
 
105
119
  #### Getting
@@ -227,6 +241,21 @@ end
227
241
  events.each{ |e| puts e }
228
242
  ```
229
243
 
244
+ ### Maintenance mode
245
+
246
+ Enable maintenance mode on a host, with optional reason and DC (requires access to local agent)
247
+
248
+ ```ruby
249
+ Diplomat::Maintenance.enable(true, 'doing stuff', :dc => 'abc')
250
+ ```
251
+
252
+ Determine if a host has maintenance mode enabled
253
+
254
+ ```ruby
255
+ Diplomat::Maintenance.enabled('foobar')
256
+ # => { :enabled => true, :reason => 'doing stuff' }
257
+ ```
258
+
230
259
  ### Custom configuration
231
260
 
232
261
  You can create a custom configuration using the following syntax:
data/lib/diplomat.rb CHANGED
@@ -23,7 +23,7 @@ module Diplomat
23
23
 
24
24
  require_libs "configuration", "rest_client", "api_options", "kv", "datacenter",
25
25
  "service", "members", "node", "nodes", "check", "health", "session", "lock",
26
- "error", "event", "acl"
26
+ "error", "event", "acl", "maintenance"
27
27
  self.configuration ||= Diplomat::Configuration.new
28
28
 
29
29
  class << self
@@ -2,6 +2,9 @@ require 'faraday'
2
2
 
3
3
  module Diplomat
4
4
  class Event < Diplomat::RestClient
5
+
6
+ include ApiOptions
7
+
5
8
  @access_methods = [ :fire, :get_all, :get ]
6
9
 
7
10
  # Send an event
@@ -12,14 +15,14 @@ module Diplomat
12
15
  # @param tag [String] the target tag name, must only be used with service
13
16
  # @return [nil]
14
17
  def fire name, value=nil, service=nil, node=nil, tag=nil
15
- @conn.put do |req|
16
- url = [ "/v1/event/fire/#{name}" ]
17
- url += use_named_parameter("service", service)
18
- url += use_named_parameter("node", node)
19
- url += use_named_parameter("tag", tag) if service
20
- req.url concat_url url
21
- req.body = value unless value.nil?
22
- end
18
+ url = [ "/v1/event/fire/#{name}" ]
19
+ url += check_acl_token
20
+ url += use_named_parameter("service", service)
21
+ url += use_named_parameter("node", node)
22
+ url += use_named_parameter("tag", tag) if service
23
+ url = concat_url url
24
+
25
+ @conn.put(url, value)
23
26
  nil
24
27
  end
25
28
 
@@ -55,6 +58,7 @@ module Diplomat
55
58
  # - W W - get the first or next value; wait until there is an update
56
59
  def get_all name=nil, not_found=:reject, found=:return
57
60
  url = ["/v1/event/list"]
61
+ url += check_acl_token
58
62
  url += use_named_parameter("name", name)
59
63
  url = concat_url url
60
64
 
@@ -104,6 +108,7 @@ module Diplomat
104
108
  # events (while being sure that none are missed).
105
109
  def get name=nil, token=:last, not_found=:wait, found=:return
106
110
  url = ["/v1/event/list"]
111
+ url += check_acl_token
107
112
  url += use_named_parameter("name", name)
108
113
  url = concat_url url
109
114
  @raw = @conn.get url
@@ -0,0 +1,47 @@
1
+ require 'base64'
2
+ require 'faraday'
3
+
4
+ module Diplomat
5
+ class Maintenance < Diplomat::RestClient
6
+ @access_methods = [ :enabled, :enable]
7
+
8
+ # Get the maintenance state of a host
9
+ # @param n [String] the node
10
+ # @param options [Hash] :dc string for dc specific query
11
+ # @return [Hash] { :enabled => true, :reason => 'foo' }
12
+ def enabled n, options=nil
13
+ health = Diplomat::Health.new(@conn)
14
+ result = health.node(n, options).
15
+ select { |check| check['CheckID'] == '_node_maintenance' }
16
+
17
+ if result.size > 0
18
+ { :enabled => true, :reason => result.first['Notes'] }
19
+ else
20
+ { :enabled => false, :reason => nil }
21
+ end
22
+ end
23
+
24
+ # Enable or disable maintenance mode. This endpoint only works
25
+ # on the local agent.
26
+ # @param enable enable or disable maintenance mode
27
+ # @param reason [String] the reason for enabling maintenance mode
28
+ # @param options [Hash] :dc string for dc specific query
29
+ # @return true if call is successful
30
+ def enable enable=true, reason=nil, options=nil
31
+ raw = @conn.put do |req|
32
+ url = ["/v1/agent/maintenance"]
33
+ url << use_named_parameter('enable', enable.to_s)
34
+ url << use_named_parameter('reason', reason) unless reason.nil?
35
+ url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
36
+ req.url concat_url url
37
+ end
38
+
39
+ if raw.status == 200
40
+ @raw = raw
41
+ return true
42
+ else
43
+ raise Diplomat::UnknownStatus, "status #{raw.status}"
44
+ end
45
+ end
46
+ end
47
+ end
data/lib/diplomat/node.rb CHANGED
@@ -4,7 +4,9 @@ require 'faraday'
4
4
  module Diplomat
5
5
  class Node < Diplomat::RestClient
6
6
 
7
- @access_methods = [ :get, :get_all ]
7
+ include ApiOptions
8
+
9
+ @access_methods = [ :get, :get_all, :register, :deregister ]
8
10
 
9
11
  # Get a node by it's key
10
12
  # @param key [String] the key
@@ -13,6 +15,7 @@ module Diplomat
13
15
  def get key, options=nil
14
16
 
15
17
  url = ["/v1/catalog/node/#{key}"]
18
+ url += check_acl_token
16
19
  url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
17
20
 
18
21
  # If the request fails, it's probably due to a bad path
@@ -37,5 +40,23 @@ module Diplomat
37
40
 
38
41
  return JSON.parse(ret.body).map { |service| OpenStruct.new service }
39
42
  end
43
+
44
+ # Register a node
45
+ # @param definition [Hash] Hash containing definition of a node to register
46
+ # @return [Boolean]
47
+ def register(definition, path='/v1/catalog/register')
48
+ register = @conn.put path, JSON.dump(definition)
49
+
50
+ return register.status == 200
51
+ end
52
+
53
+ # De-register a node (and all associated services and checks)
54
+ # @param definition [Hash] Hash containing definition of a node to de-register
55
+ # @return [Boolean]
56
+ def deregister(definition, path="/v1/catalog/deregister")
57
+ deregister = @conn.put path, JSON.dump(definition)
58
+
59
+ return deregister.status == 200
60
+ end
40
61
  end
41
62
  end
@@ -4,7 +4,9 @@ require 'faraday'
4
4
  module Diplomat
5
5
  class Service < Diplomat::RestClient
6
6
 
7
- @access_methods = [ :get, :get_all, :register, :deregister ]
7
+ include ApiOptions
8
+
9
+ @access_methods = [ :get, :get_all, :register, :deregister, :register_external, :deregister_external ]
8
10
 
9
11
  # Get a service by it's key
10
12
  # @param key [String] the key
@@ -15,6 +17,7 @@ module Diplomat
15
17
  def get key, scope=:first, options=nil, meta=nil
16
18
 
17
19
  url = ["/v1/catalog/service/#{key}"]
20
+ url += check_acl_token
18
21
  url << use_named_parameter('wait', options[:wait]) if options and options[:wait]
19
22
  url << use_named_parameter('index', options[:index]) if options and options[:index]
20
23
  url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
@@ -46,6 +49,7 @@ module Diplomat
46
49
  # @return [OpenStruct] the list of all services
47
50
  def get_all options=nil
48
51
  url = ["/v1/catalog/services"]
52
+ url += check_acl_token
49
53
  url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
50
54
  begin
51
55
  ret = @conn.get concat_url url
@@ -59,9 +63,9 @@ module Diplomat
59
63
  # Register a service
60
64
  # @param definition [Hash] Hash containing definition of service
61
65
  # @return [Boolean]
62
- def register(definition)
66
+ def register(definition, path='/v1/agent/service/register')
63
67
  json_definition = JSON.dump(definition)
64
- register = @conn.put '/v1/agent/service/register', json_definition
68
+ register = @conn.put path, json_definition
65
69
  return register.status == 200
66
70
  end
67
71
 
@@ -72,5 +76,21 @@ module Diplomat
72
76
  deregister = @conn.get "/v1/agent/service/deregister/#{service_name}"
73
77
  return deregister.status == 200
74
78
  end
79
+
80
+ # Register an external service
81
+ # @param definition [Hash] Hash containing definition of service
82
+ # @return [Boolean]
83
+ def register_external(definition)
84
+ register(definition, '/v1/catalog/register')
85
+ end
86
+
87
+ # Deregister an external service
88
+ # @param definition [Hash] Hash containing definition of service
89
+ # @return [Boolean]
90
+ def deregister_external(definition)
91
+ json_definition = JSON.dump(definition)
92
+ deregister = @conn.put '/v1/catalog/deregister', json_definition
93
+ return deregister.status == 200
94
+ end
75
95
  end
76
96
  end
@@ -1,3 +1,3 @@
1
1
  module Diplomat
2
- VERSION = "0.17.0"
2
+ VERSION = "0.18.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.17.0
4
+ version: 0.18.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: 2016-04-27 00:00:00.000000000 Z
11
+ date: 2016-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -187,6 +187,7 @@ files:
187
187
  - lib/diplomat/health.rb
188
188
  - lib/diplomat/kv.rb
189
189
  - lib/diplomat/lock.rb
190
+ - lib/diplomat/maintenance.rb
190
191
  - lib/diplomat/members.rb
191
192
  - lib/diplomat/node.rb
192
193
  - lib/diplomat/nodes.rb