diplomat-bb 0.2.2 → 0.2.3

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: 70431c34cd7188906b4bee0afb835e380a4a5be0
4
- data.tar.gz: ea508f7b0801d3183975cc41619f7a420325bc73
3
+ metadata.gz: 46491a9b4697e14ac80ebfbf24d279577cdae3fa
4
+ data.tar.gz: cb0e507f5849cb68e6905861de2ba3f1185e88bd
5
5
  SHA512:
6
- metadata.gz: 2701f07165a4c5816c751b3c39196b600e0c37ecb71496c8d6030317bbfaabe2baeab7a11815468606d22cc778143db74d3249e7eeff5d6185603eed1b5c5dcc
7
- data.tar.gz: 5f66babe29e96e7d982403d84d0ceaa69678a331c1c5cd9aa3bceb3524e71931a65522033fe684d0b03fe6c14581e80bdbfc9cc8b3606f5acec3e5c2992ec419
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
@@ -2,6 +2,7 @@ module Diplomat
2
2
  class Configuration
3
3
  attr_accessor :middleware
4
4
  attr_accessor :url
5
+ attr_accessor :datacenter
5
6
 
6
7
  def initialize
7
8
  @middleware = []
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Diplomat
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
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.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: 2014-12-09 00:00:00.000000000 Z
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