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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60c2b6fffda67f74954dcb48843565d1961dc828
4
- data.tar.gz: d4057165eb65727f6ca097743500211b20914d3e
3
+ metadata.gz: fc5afcf0dbe096ad4b0b58c0447e6e17033b1a18
4
+ data.tar.gz: cef9b6fe6963aff7ab8f11ecedb6437d740d973a
5
5
  SHA512:
6
- metadata.gz: 70664b15a20a3b89ff506fcf7f90334b34b133a3fdd20a687fdc48473e148e76f6f87a81ccc3be1789ced0aabd7e1d2e55be144788165f2db1505b38a2b3651e
7
- data.tar.gz: d248fe859931165439460a094f3d44891a295b33ac33c4aea75fb3b40ae008399784f9f0a24a03f6a1ce5fee58a89beb777ea09a5ebbe42f877742bf3a1a3184
6
+ metadata.gz: 2d9324bfd329d586efc9df207fa2a3ce9709a322ce41b6b1a9c20030c78f1f4213cdae30c0477c86c5daa25596ab5a3583485d6c904de0eec132fd63a9f41c26
7
+ data.tar.gz: ed3febb4518259ff866e8594f0dff1bc4c420f7897e9a3a0cc33d2e202395aa23d6e7b6fae872fd411373153533a2552de30efa404dcda432c919069e340a706
@@ -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"
@@ -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
@@ -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}) if deploy
159
- data.merge!({scale: scale.to_h}) if scale
160
- data.merge!({telemetry: telemetry.to_h}) if telemetry
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
@@ -1,3 +1,3 @@
1
1
  module Dendrite
2
- VERSION = "0.4.5"
2
+ VERSION = "0.4.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dendrite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yagnik