dendrite 0.5.16 → 0.5.20
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/bin/register +1 -1
- data/conf/services/service.yml +9 -2
- data/lib/dendrite/generators/nerve.rb +21 -1
- data/lib/dendrite/generators/synapse.rb +27 -8
- data/lib/dendrite/io.rb +1 -1
- data/lib/dendrite/service_node.rb +3 -3
- data/lib/dendrite/version.rb +1 -1
- metadata +2 -4
- data/bin/add_proxy +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bf4b1fdc08a024b3a13ce91325cf5cf2dc8ee7a
|
4
|
+
data.tar.gz: 41723c08f763f7aa8e4be85e780cb21375ca8ba7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2632a11b89af6cb462cb1ea725f46895d19141993cceb35e1896d488c7f75077a7d680cdadad53d450c1c02c9534cf31960eca1952583c2c2ea4e5acc799c8c2
|
7
|
+
data.tar.gz: 2de9a065d1e4e1a3f5bd2a0a8d2f646e6d03c26fe709f060c37f54885fb19f3610912ce9bffab6a40201522885ec9fea878fa6daca24c4beb45e5a8ba63abe4a
|
data/bin/register
CHANGED
@@ -28,7 +28,7 @@ rescue
|
|
28
28
|
[]
|
29
29
|
end.collect(&:to_s)
|
30
30
|
services += options[:service_name].split(',')
|
31
|
-
services.uniq
|
31
|
+
services = services.collect{|s| s.gsub("_readonly", "")}.uniq
|
32
32
|
|
33
33
|
raise Dendrite::InvalidData unless graph.valid?
|
34
34
|
raise Dendrite::UnknownService unless services.collect {|service_name| graph[service_name]}.all?
|
data/conf/services/service.yml
CHANGED
@@ -40,6 +40,7 @@ subcomponents:
|
|
40
40
|
subcomponent: cat
|
41
41
|
latency: foo
|
42
42
|
identifier: barbaz
|
43
|
+
read_only: true
|
43
44
|
- component: cams
|
44
45
|
subcomponent: foobar
|
45
46
|
latency: foo
|
@@ -55,13 +56,19 @@ subcomponents:
|
|
55
56
|
scale:
|
56
57
|
min_instance_count: 1
|
57
58
|
max_instance_count: 5
|
59
|
+
default_servers:
|
60
|
+
- host: 0.0.0.0
|
61
|
+
port: 8080
|
62
|
+
environment: prd
|
58
63
|
ports:
|
59
64
|
loadbalancer_port: 8081
|
60
65
|
service_port: 8080
|
61
66
|
dependencies:
|
62
67
|
- component: cams
|
63
|
-
subcomponent:
|
64
|
-
latency:
|
68
|
+
subcomponent: cat
|
69
|
+
latency: 10
|
70
|
+
metadata:
|
71
|
+
read_only: true
|
65
72
|
- name: baz
|
66
73
|
type: tomcat
|
67
74
|
deploy:
|
@@ -11,7 +11,19 @@ module Dendrite
|
|
11
11
|
|
12
12
|
def to_h
|
13
13
|
service_list = services.inject({}) do |hash, service|
|
14
|
-
|
14
|
+
if service.read_write
|
15
|
+
hash[service.name] = service.to_h
|
16
|
+
hash["#{service.name}_readonly"] = service.to_h.merge({
|
17
|
+
zk_path: "/smartstack/services/#{service.organization}/#{service.component}/#{service.service.real_name}_readonly/instances"
|
18
|
+
})
|
19
|
+
elsif service.read_only
|
20
|
+
hash["#{service.name}_readonly"] = service.to_h.merge({
|
21
|
+
zk_path: "/smartstack/services/#{service.organization}/#{service.component}/#{service.service.real_name}_readonly/instances"
|
22
|
+
})
|
23
|
+
else
|
24
|
+
hash[service.name] = service.to_h
|
25
|
+
end
|
26
|
+
|
15
27
|
hash
|
16
28
|
end
|
17
29
|
|
@@ -26,6 +38,14 @@ module Dendrite
|
|
26
38
|
def_delegator :service, :component, :component
|
27
39
|
def_delegator :service, :organization, :organization
|
28
40
|
|
41
|
+
def read_only
|
42
|
+
service.metadata && service.metadata.read_only
|
43
|
+
end
|
44
|
+
|
45
|
+
def read_write
|
46
|
+
read_only && service.metadata.write_only
|
47
|
+
end
|
48
|
+
|
29
49
|
def to_h
|
30
50
|
{
|
31
51
|
host: Dendrite::Config.public_ip,
|
@@ -1,17 +1,26 @@
|
|
1
1
|
module Dendrite
|
2
2
|
module Generators
|
3
3
|
class Synapse < Base
|
4
|
-
|
4
|
+
attr_reader :read_only
|
5
|
+
def initialize(graph:, service_names:, environment: :dev)
|
5
6
|
super(graph: graph, service_names: service_names)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
dep = []
|
8
|
+
read_only = {}
|
9
|
+
@services.each do |service|
|
10
|
+
service.dependencies.each do |_, dependency|
|
11
|
+
dep << dependency.service
|
12
|
+
if read_only.keys.include?(dependency.service.name)
|
13
|
+
if read_only[dependency.service.name] != dependency.read_only
|
14
|
+
raise "Trying to add r/o and r/w for same service"
|
15
|
+
end
|
16
|
+
else
|
17
|
+
read_only[dependency.service.name] = dependency.read_only
|
11
18
|
end
|
12
19
|
end
|
13
|
-
@services = dep.uniq
|
14
20
|
end
|
21
|
+
|
22
|
+
@read_only = read_only
|
23
|
+
@services = dep.uniq
|
15
24
|
@services.group_by { |service| service.loadbalancer_port }.each do |port, services|
|
16
25
|
if services.length > 1
|
17
26
|
raise PortCollision, "Port collission between #{services.collect(&:name).join(',')}"
|
@@ -22,7 +31,17 @@ module Dendrite
|
|
22
31
|
|
23
32
|
def to_h
|
24
33
|
service_list = services.inject({}) do |hash, service|
|
25
|
-
|
34
|
+
|
35
|
+
if read_only[service.name]
|
36
|
+
data = service.to_h
|
37
|
+
discovery_data = data[:discovery].merge({
|
38
|
+
path: "/smartstack/services/#{service.organization}/#{service.component}/#{service.service.real_name}_readonly/instances"
|
39
|
+
})
|
40
|
+
data[:discovery] = discovery_data
|
41
|
+
hash[service.name] = data
|
42
|
+
else
|
43
|
+
hash[service.name] = service.to_h
|
44
|
+
end
|
26
45
|
hash
|
27
46
|
end
|
28
47
|
|
data/lib/dendrite/io.rb
CHANGED
@@ -16,7 +16,7 @@ module Dendrite
|
|
16
16
|
if service[:dependencies]
|
17
17
|
service[:dependencies].each do |deps|
|
18
18
|
dependency_name = "#{service[:organization]}_#{deps[:component]}_#{deps[:subcomponent]}"
|
19
|
-
graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency], identifier: deps[:identifier])
|
19
|
+
graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency], identifier: deps[:identifier], read_only: deps.fetch(:read_only, false))
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -95,7 +95,7 @@ module Dendrite
|
|
95
95
|
validates_inclusion_of :port, :in => 1..65535
|
96
96
|
end
|
97
97
|
|
98
|
-
Dependency = Struct.new(:service, :latency, :identifier) do
|
98
|
+
Dependency = Struct.new(:service, :latency, :identifier, :read_only) do
|
99
99
|
include ActiveModel::Validations
|
100
100
|
validates_presence_of :service
|
101
101
|
validates_presence_of :latency
|
@@ -196,8 +196,8 @@ module Dendrite
|
|
196
196
|
ports[:loadbalancer_port].port if ports[:loadbalancer_port]
|
197
197
|
end
|
198
198
|
|
199
|
-
def add_dependency(service:, latency:, identifier:)
|
200
|
-
@dependencies[service.name] = Dependency.new(service, latency, identifier)
|
199
|
+
def add_dependency(service:, latency:, identifier:, read_only: false)
|
200
|
+
@dependencies[service.name] = Dependency.new(service, latency, identifier, read_only == true)
|
201
201
|
end
|
202
202
|
|
203
203
|
def to_h
|
data/lib/dendrite/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dendrite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yagnik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,7 +84,6 @@ description: Build config files for synapse and nerve of smartstack
|
|
84
84
|
email:
|
85
85
|
- yagnikkhanna@gmail.com
|
86
86
|
executables:
|
87
|
-
- add_proxy
|
88
87
|
- metadata
|
89
88
|
- register
|
90
89
|
extensions: []
|
@@ -96,7 +95,6 @@ files:
|
|
96
95
|
- LICENSE.txt
|
97
96
|
- README.md
|
98
97
|
- Rakefile
|
99
|
-
- bin/add_proxy
|
100
98
|
- bin/metadata
|
101
99
|
- bin/register
|
102
100
|
- conf/config.yml
|
data/bin/add_proxy
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'dendrite'
|
3
|
-
require 'optparse'
|
4
|
-
|
5
|
-
options = {}
|
6
|
-
OptionParser.new do |opts|
|
7
|
-
opts.banner = "Usage: proxy [options]"
|
8
|
-
opts.on("-s", "--services SERVICE_NAME:PORT,..", "service name and port") do |v|
|
9
|
-
options[:services] = v
|
10
|
-
end
|
11
|
-
|
12
|
-
opts.on("-c", "--config CONFIG_FILE", "config file") do |v|
|
13
|
-
options[:config] = v
|
14
|
-
end
|
15
|
-
end.parse!
|
16
|
-
|
17
|
-
services = options[:services].split(',').inject({}) do |hsh, name_port|
|
18
|
-
name, port = name_port.split(':')
|
19
|
-
name = name.strip
|
20
|
-
port = port.to_i
|
21
|
-
hsh[name] = port
|
22
|
-
hsh
|
23
|
-
end
|
24
|
-
|
25
|
-
puts "Loading config"
|
26
|
-
Dendrite::Config.load(source: options[:config])
|
27
|
-
puts "Loading graph"
|
28
|
-
graph = Dendrite::IO.load(source: Dendrite::Config.services_source)
|
29
|
-
raise Dendrite::InvalidData unless graph.valid?
|
30
|
-
raise Dendrite::UnknownService unless services.keys.collect {|service_name| graph[service_name]}.all?
|
31
|
-
|
32
|
-
services.each do |name, port|
|
33
|
-
puts "adding proxy for #{name}"
|
34
|
-
Dendrite::Config.custom_frontend!(name: "custom_#{name}", port: port, backend_name: name)
|
35
|
-
end
|
36
|
-
synapse = Dendrite::Generators::Synapse.new(graph: graph, service_names: services, proxy: true)
|
37
|
-
Dendrite::IO.write(data: synapse.to_yaml, destination: Dendrite::Config.synapse_config_path)
|
38
|
-
|