dendrite 0.4.5 → 0.4.7
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 +5 -1
- data/conf/services/service.yml +7 -0
- data/lib/dendrite/generators/synapse.rb +22 -3
- data/lib/dendrite/io.rb +0 -6
- data/lib/dendrite/service_node.rb +31 -5
- data/lib/dendrite/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc5afcf0dbe096ad4b0b58c0447e6e17033b1a18
|
4
|
+
data.tar.gz: cef9b6fe6963aff7ab8f11ecedb6437d740d973a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d9324bfd329d586efc9df207fa2a3ce9709a322ce41b6b1a9c20030c78f1f4213cdae30c0477c86c5daa25596ab5a3583485d6c904de0eec132fd63a9f41c26
|
7
|
+
data.tar.gz: ed3febb4518259ff866e8594f0dff1bc4c420f7897e9a3a0cc33d2e202395aa23d6e7b6fae872fd411373153533a2552de30efa404dcda432c919069e340a706
|
data/bin/register
CHANGED
@@ -12,6 +12,10 @@ OptionParser.new do |opts|
|
|
12
12
|
opts.on("-c", "--config CONFIG_FILE", "config file") do |v|
|
13
13
|
options[:config] = v
|
14
14
|
end
|
15
|
+
|
16
|
+
opts.on("-e", "--environment ENVIRONMENT", "environment of default servers") do |v|
|
17
|
+
options[:env] = v
|
18
|
+
end
|
15
19
|
end.parse!
|
16
20
|
|
17
21
|
puts "Loading config"
|
@@ -30,7 +34,7 @@ raise Dendrite::InvalidData unless graph.valid?
|
|
30
34
|
raise Dendrite::UnknownService unless services.collect {|service_name| graph[service_name]}.all?
|
31
35
|
|
32
36
|
puts "Generating synapse"
|
33
|
-
synapse = Dendrite::Generators::Synapse.new(graph: graph, service_names: services)
|
37
|
+
synapse = Dendrite::Generators::Synapse.new(graph: graph, service_names: services, environment: options[:env])
|
34
38
|
Dendrite::IO.write(data: synapse.to_yaml, destination: Dendrite::Config.synapse_config_path)
|
35
39
|
|
36
40
|
puts "Generating nerve"
|
data/conf/services/service.yml
CHANGED
@@ -17,6 +17,13 @@ subcomponents:
|
|
17
17
|
telemetry:
|
18
18
|
health_url: /
|
19
19
|
notification_email: foo@bar.com
|
20
|
+
default_servers:
|
21
|
+
- host: 192.168.1.1
|
22
|
+
port: 8080
|
23
|
+
environment: stg
|
24
|
+
- host: 50.312.312.312
|
25
|
+
port: 8080
|
26
|
+
environment: prd
|
20
27
|
dependencies:
|
21
28
|
- component: cams
|
22
29
|
subcomponent: cat
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Dendrite
|
2
2
|
module Generators
|
3
3
|
class Synapse < Base
|
4
|
-
def initialize(graph:, service_names:, proxy: false)
|
4
|
+
def initialize(graph:, service_names:, proxy: false, environment: :dev)
|
5
5
|
super(graph: graph, service_names: service_names)
|
6
6
|
unless proxy
|
7
7
|
dep = []
|
@@ -17,7 +17,7 @@ module Dendrite
|
|
17
17
|
raise PortCollision, "Port collission between #{services.collect(&:name).join(',')}"
|
18
18
|
end
|
19
19
|
end
|
20
|
-
@services = @services.collect { |service| ServiceConfig.new(service)}
|
20
|
+
@services = @services.collect { |service| ServiceConfig.new(service, environment)}
|
21
21
|
end
|
22
22
|
|
23
23
|
def to_h
|
@@ -36,14 +36,33 @@ module Dendrite
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
-
ServiceConfig = Struct.new(:service) do
|
39
|
+
ServiceConfig = Struct.new(:service, :environment) do
|
40
40
|
extend Forwardable
|
41
41
|
def_delegator :service, :name, :name
|
42
42
|
def_delegator :service, :component, :component
|
43
43
|
def_delegator :service, :organization, :organization
|
44
|
+
def_delegator :service, :default_servers, :default_servers
|
44
45
|
|
45
46
|
def to_h
|
46
47
|
discovery_config.merge(haproxy_config)
|
48
|
+
.merge(default_servers_config)
|
49
|
+
end
|
50
|
+
|
51
|
+
def default_servers_config
|
52
|
+
servers = default_servers[environment]
|
53
|
+
if servers
|
54
|
+
{
|
55
|
+
default_servers: servers.enum_for(:each_with_index).collect do |server, i|
|
56
|
+
data = server.to_h.merge({
|
57
|
+
name: "default_#{name}_#{i}"
|
58
|
+
})
|
59
|
+
data.delete(:environment)
|
60
|
+
data
|
61
|
+
end
|
62
|
+
}
|
63
|
+
else
|
64
|
+
{}
|
65
|
+
end
|
47
66
|
end
|
48
67
|
|
49
68
|
def discovery_config
|
data/lib/dendrite/io.rb
CHANGED
@@ -19,12 +19,6 @@ module Dendrite
|
|
19
19
|
graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency])
|
20
20
|
end
|
21
21
|
end
|
22
|
-
if service[:dependancies]
|
23
|
-
service[:dependancies].each do |deps|
|
24
|
-
dependency_name = "#{service[:organization]}_#{deps[:component]}_#{deps[:subcomponent]}"
|
25
|
-
graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency])
|
26
|
-
end
|
27
|
-
end
|
28
22
|
end
|
29
23
|
|
30
24
|
graph
|
@@ -37,6 +37,16 @@ module Dendrite
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
default_servers.each do |env, srv|
|
41
|
+
if srv.any?(&:invalid?)
|
42
|
+
srv.select(&:invalid?).each do |sr|
|
43
|
+
sr.errors.each do |key, value|
|
44
|
+
errors.add "default_servers_#{key}", value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
40
50
|
return errors.count == 0
|
41
51
|
end
|
42
52
|
end
|
@@ -47,6 +57,14 @@ module Dendrite
|
|
47
57
|
|
48
58
|
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
|
49
59
|
|
60
|
+
DefaultServer = Struct.new(:environment, :host, :port) do
|
61
|
+
include ActiveModel::Validations
|
62
|
+
validates_presence_of :environment
|
63
|
+
validates_presence_of :host
|
64
|
+
validates_presence_of :port
|
65
|
+
validates :port, numericality: { only_integer: true }
|
66
|
+
end
|
67
|
+
|
50
68
|
Telemetry = Struct.new(:health_url, :notification_email) do
|
51
69
|
include ActiveModel::Validations
|
52
70
|
validates_presence_of :health_url
|
@@ -89,7 +107,8 @@ module Dendrite
|
|
89
107
|
end
|
90
108
|
|
91
109
|
attr_reader :organization, :component, :lead_email, :team_email,
|
92
|
-
:type, :deploy, :scale, :ports, :dependencies, :telemetry
|
110
|
+
:type, :deploy, :scale, :ports, :dependencies, :telemetry,
|
111
|
+
:default_servers
|
93
112
|
# :name is set but magically
|
94
113
|
|
95
114
|
validates_presence_of :organization, :component, :lead_email, :team_email,
|
@@ -99,11 +118,13 @@ module Dendrite
|
|
99
118
|
validates :component, format: { with: /\A[0-9a-z]+\z/, message: "only allows lowercase letters" }
|
100
119
|
validates :lead_email, format: { with: VALID_EMAIL_REGEX, message: "invalid email format" }
|
101
120
|
validates :team_email, format: { with: VALID_EMAIL_REGEX, message: "invalid email format" }
|
121
|
+
validates :real_name, format: { with: /\A[0-9a-z]+\z/, message: "only allows lowercase letters" }
|
102
122
|
validates :name, format: { with: /\A[0-9a-z_]+\z/, message: "only allows lowercase letters" }
|
103
123
|
validates :type, inclusion: { in: -> (_) { Dendrite::Config.valid_types } , message: "%{value} is not a valid type" }
|
104
124
|
|
105
125
|
def initialize(**args)
|
106
126
|
@ports = {}
|
127
|
+
@default_servers = {}
|
107
128
|
args.each do |k,v|
|
108
129
|
case k
|
109
130
|
when :ports
|
@@ -116,6 +137,11 @@ module Dendrite
|
|
116
137
|
@scale = Scale.new(v[:max_instance_count], v[:min_instance_count]) if v != nil
|
117
138
|
when :telemetry
|
118
139
|
@telemetry = Telemetry.new(v[:health_url], v[:notification_email]) if v != nil
|
140
|
+
when :default_servers
|
141
|
+
v.each do |node|
|
142
|
+
@default_servers[node[:environment]] ||= []
|
143
|
+
@default_servers[node[:environment]] << DefaultServer.new(node[:environment], node[:host], node[:port])
|
144
|
+
end
|
119
145
|
else
|
120
146
|
instance_variable_set("@#{k}", v)
|
121
147
|
end
|
@@ -155,10 +181,10 @@ module Dendrite
|
|
155
181
|
ports: ports.values.collect(&:to_h),
|
156
182
|
dependencies: dependencies.keys
|
157
183
|
}
|
158
|
-
data.merge!({deploy: deploy.to_h})
|
159
|
-
data.merge!({scale: scale.to_h})
|
160
|
-
data.merge!({telemetry: telemetry.to_h})
|
161
|
-
data
|
184
|
+
data.merge!({deploy: deploy ? deploy.to_h : {}})
|
185
|
+
data.merge!({scale: scale ? scale.to_h : {}})
|
186
|
+
data.merge!({telemetry: telemetry ? telemetry.to_h : {}})
|
187
|
+
data.merge!({default_servers: default_servers.values.flatten.collect(&:to_h)})
|
162
188
|
end
|
163
189
|
end
|
164
190
|
end
|
data/lib/dendrite/version.rb
CHANGED