jn_services 1.0.1 → 1.0.2
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/Guardfile +9 -0
- data/jn_services.gemspec +3 -1
- data/lib/services/entity.rb +5 -8
- data/lib/services/member.rb +2 -7
- data/lib/services/service.rb +12 -11
- data/lib/services/version.rb +1 -1
- data/lib/services.rb +14 -6
- data/spec/member_spec.rb +5 -1
- data/spec/service_spec.rb +2 -1
- data/spec/services_spec.rb +19 -2
- data/spec/spec_helper.rb +8 -6
- metadata +35 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: feed0dad1b87bef9a88b9d0a796d8cefadbf9206
|
4
|
+
data.tar.gz: 3043657e5671623245ff93888584c81a86fdb039
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66ef578629746a992b58400c69cf990f510811b262a0020bef7ad72df91712abf04c562e5ca2a1cfbb6e93125d2f3eabe8a6b2df549825381f235bbad4b0b8f5
|
7
|
+
data.tar.gz: 7deb2dc8215e67f1fcd63484a88ce0013886fe74f2bf2d871b383ca65c2111eda2815995dda31786db085f1f75b3b4aa3f3ac30c10b4d9c842eadc0dec801735
|
data/Guardfile
ADDED
data/jn_services.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.
|
22
|
+
spec.add_runtime_dependency "etcd", "~> 0.2.0.alpha"
|
23
23
|
spec.add_development_dependency "bundler"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rspec"
|
@@ -27,5 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency "systemu"
|
28
28
|
spec.add_development_dependency "uuid"
|
29
29
|
spec.add_development_dependency "rubocop"
|
30
|
+
spec.add_development_dependency 'guard'
|
31
|
+
spec.add_development_dependency 'guard-rake'
|
30
32
|
spec.add_development_dependency 'simplecov'
|
31
33
|
end
|
data/lib/services/entity.rb
CHANGED
@@ -53,19 +53,16 @@ module Services
|
|
53
53
|
return unless valid_path
|
54
54
|
to_hash.each do |k, v|
|
55
55
|
next if k == 'name'
|
56
|
-
|
57
|
-
|
56
|
+
if Services.exists? "#{KEY}/#{path}/#{k}"
|
57
|
+
value = Services.get("#{KEY}/#{path}/#{k}").value
|
58
|
+
instance_variable_set "@#{k}", value
|
59
|
+
end
|
58
60
|
end
|
59
61
|
self
|
60
62
|
end
|
61
63
|
|
62
64
|
def valid_path
|
63
|
-
|
64
|
-
Services.get("#{KEY}/#{path}")
|
65
|
-
rescue
|
66
|
-
return false
|
67
|
-
end
|
68
|
-
true
|
65
|
+
Services.exists?("#{KEY}/#{path}")
|
69
66
|
end
|
70
67
|
end
|
71
68
|
end
|
data/lib/services/member.rb
CHANGED
@@ -18,14 +18,9 @@ module Services
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def validate
|
21
|
-
unless @service
|
22
|
-
fail ArgumentError,
|
23
|
-
"#{self.class} requires service: argument"
|
24
|
-
end
|
25
|
-
|
26
|
-
unless name
|
21
|
+
unless name && @service
|
27
22
|
fail ARgumentError,
|
28
|
-
"#{self.class} requires name argument"
|
23
|
+
"#{self.class} requires name and service argument"
|
29
24
|
end
|
30
25
|
end
|
31
26
|
end
|
data/lib/services/service.rb
CHANGED
@@ -28,9 +28,7 @@ module Services
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def create_if_missing
|
31
|
-
Services.
|
32
|
-
rescue Net::HTTPServerException => e
|
33
|
-
Services.set "#{KEY}/#{name}/_created", Time.now if e.message.match 'Not Found'
|
31
|
+
Services.set "#{KEY}/#{name}/_created", Time.now unless Services.exists? "#{KEY}/#{name}"
|
34
32
|
end
|
35
33
|
|
36
34
|
def load_endpoint
|
@@ -38,17 +36,20 @@ module Services
|
|
38
36
|
endpoint
|
39
37
|
end
|
40
38
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
etcd_members = nil if e.message.match 'Not Found'
|
39
|
+
def fetch_members
|
40
|
+
if Services.exists? "#{KEY}/#{name}/members"
|
41
|
+
Services.get("#{KEY}/#{name}/members").children
|
42
|
+
else
|
43
|
+
nil
|
47
44
|
end
|
45
|
+
end
|
48
46
|
|
47
|
+
# rubocop:disable MethodLength
|
48
|
+
def load_members
|
49
|
+
etcd_members = fetch_members
|
49
50
|
unless etcd_members.nil? || etcd_members.empty?
|
50
|
-
etcd_members.
|
51
|
-
m_name = File.basename m
|
51
|
+
etcd_members.each do |m|
|
52
|
+
m_name = File.basename m.key
|
52
53
|
m1 = Services::Member.new(m_name, service: name)
|
53
54
|
m1.load
|
54
55
|
@members.push m1
|
data/lib/services/version.rb
CHANGED
data/lib/services.rb
CHANGED
@@ -20,22 +20,28 @@ module Services
|
|
20
20
|
class << self
|
21
21
|
attr_accessor :connection, :run_context
|
22
22
|
|
23
|
+
# proxy method to Etcd::Client.get
|
23
24
|
def get(*args)
|
24
25
|
Chef::Log.debug "connection.get args #{args}" unless run_context.nil?
|
25
|
-
connection.get(*args)
|
26
|
+
connection.get(*args) if exists?(*args)
|
26
27
|
end
|
27
28
|
|
29
|
+
# proxy method to Etcd::Client.set
|
28
30
|
def set(*args)
|
29
31
|
Chef::Log.debug "connection.set args #{args}" unless run_context.nil?
|
30
32
|
connection.set(*args)
|
31
33
|
end
|
32
34
|
|
35
|
+
# proxy method to Etcd::Client.exists?
|
36
|
+
def exists?(*args)
|
37
|
+
connection.exists?(*args)
|
38
|
+
end
|
39
|
+
|
33
40
|
# return a list of all services
|
34
41
|
def all
|
35
42
|
services = []
|
36
|
-
get(KEY).each do |s|
|
43
|
+
get(KEY).node.children.each do |s|
|
37
44
|
name = File.basename s.key
|
38
|
-
puts "loading #{name}"
|
39
45
|
services << Services::Service.new(name)
|
40
46
|
end
|
41
47
|
services
|
@@ -44,9 +50,11 @@ module Services
|
|
44
50
|
# return all services a node is subscribed to
|
45
51
|
def subscribed(f = nil)
|
46
52
|
fail 'param and run_context can not both be nil' if f.nil? && run_context.nil?
|
47
|
-
|
48
|
-
|
49
|
-
|
53
|
+
fqdn = f.nil? ? run_context.node.fqdn : f
|
54
|
+
services = []
|
55
|
+
all.each do |s|
|
56
|
+
services.concat s.members.map { |m| m.name == fqdn ? s.name : nil }
|
57
|
+
end
|
50
58
|
services.compact
|
51
59
|
end
|
52
60
|
end
|
data/spec/member_spec.rb
CHANGED
@@ -6,8 +6,12 @@ describe 'Services::Member' do
|
|
6
6
|
@m2 = Services::Member.new 'test_member2', service: 'test', ip: '127.0.0.3', port: 80, weight: 20
|
7
7
|
end
|
8
8
|
|
9
|
+
it 'should raise without a service' do
|
10
|
+
expect { Services::Member.new }.to raise_error
|
11
|
+
end
|
12
|
+
|
9
13
|
it 'should raise without a service name' do
|
10
|
-
expect { Services::Member.new '
|
14
|
+
expect { Services::Member.new 'test_member' }.to raise_error
|
11
15
|
end
|
12
16
|
|
13
17
|
describe '#to_hash' do
|
data/spec/service_spec.rb
CHANGED
@@ -13,6 +13,7 @@ describe 'Services::Service' do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should handle non-existant services' do
|
16
|
-
|
16
|
+
a = Services::Service.new 'should_not_exist'
|
17
|
+
a.name.should eql 'should_not_exist'
|
17
18
|
end
|
18
19
|
end
|
data/spec/services_spec.rb
CHANGED
@@ -27,11 +27,28 @@ describe 'Services' do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'can set' do
|
30
|
-
Services.set
|
30
|
+
s = Services.set('/test/1', 1)
|
31
|
+
s.node.key.should eql '/test/1'
|
32
|
+
s.node.value.should eql '1'
|
31
33
|
end
|
32
34
|
|
33
35
|
it 'can get' do
|
34
|
-
Services.get
|
36
|
+
Services.get('/test/1').value.should eql '1'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'handles unknown keys on get' do
|
40
|
+
Services.get('/BLARGH!@#@!').should eql nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'gets all services' do
|
44
|
+
a = Services.all
|
45
|
+
a.count.should eql 2
|
46
|
+
a[0].members.map { |m| m.name }.sort.should eql %w{test_member test_member2}
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'lists subscribed services' do
|
50
|
+
Services.subscribed('test').should eql []
|
51
|
+
Services.subscribed('test_member').should eql ['test']
|
35
52
|
end
|
36
53
|
|
37
54
|
describe '::Entity' do
|
data/spec/spec_helper.rb
CHANGED
@@ -90,14 +90,16 @@ end
|
|
90
90
|
|
91
91
|
RSpec.configure do |config|
|
92
92
|
|
93
|
-
|
93
|
+
unless ENV['ETCD_SKIP']
|
94
|
+
config.include Etcd::SpecHelper
|
94
95
|
|
95
|
-
|
96
|
-
|
97
|
-
|
96
|
+
config.before(:suite) do
|
97
|
+
Etcd::SpecHelper.start_etcd_servers
|
98
|
+
end
|
98
99
|
|
99
|
-
|
100
|
-
|
100
|
+
config.after(:suite) do
|
101
|
+
Etcd::SpecHelper.stop_etcd_servers
|
102
|
+
end
|
101
103
|
end
|
102
104
|
# Use color in STDOUT
|
103
105
|
config.color_enabled = true
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jn_services
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Nelson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: etcd
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.2.0.alpha
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.2.0.alpha
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,34 @@ dependencies:
|
|
108
108
|
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-rake
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: simplecov
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,6 +162,7 @@ files:
|
|
134
162
|
- .travis.yml
|
135
163
|
- CHANGELOG.md
|
136
164
|
- Gemfile
|
165
|
+
- Guardfile
|
137
166
|
- LICENSE.txt
|
138
167
|
- README.md
|
139
168
|
- Rakefile
|