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 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