kumonos 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3180e4389f67a7973e06cc18560503ebe4606e3a
4
- data.tar.gz: 5e104c41129d76a4628cd02dcb68df71c3c55e36
3
+ metadata.gz: 19e7d2d1b04109039fbe3a9a4c36aa0edd9db1fe
4
+ data.tar.gz: bf27d37faee97d37fb4b970398b7fcbefc04645e
5
5
  SHA512:
6
- metadata.gz: 551f54b256647e1b04e9c25e26d774b9a85f2d295b28628999fdc18ace1db1bb299534649382823bda7a5d8bd341d57c62e215fa95d8c464d003112d53e7e6e4
7
- data.tar.gz: cc933fb394e59ef965612a90f20ed3df3af1f9f12ffe590fed577f38db6c84783952003630d96f9e87491884d424ccd63f0dcd8fa0af4af77cc038d18e883916
6
+ metadata.gz: 10ff432d483a1f4150a56de4c25d7d8db4c6933390dd4d7a6a22631a20050fd9a46eb7276c940c8e1c25f774721bfca24c49f317231bb7bf529b0dd44a552725
7
+ data.tar.gz: 374930e4888f593d3d0137b53b973839e7705071447eeb56fd80038ea816275d28953c0058558be7f6be8ca61e8b0f5e6a78fef97c040f2f682b3c14be6771a7
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  Gemfile.lock
14
14
  test/config.json
15
15
  test/srv
16
+ envoy.json
data/DEVELOPMENT.md ADDED
@@ -0,0 +1,8 @@
1
+ # Development
2
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake` to run the tests.
3
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment.
4
+
5
+ If you've installed [docker-compose](https://docs.docker.com/compose/), you can run the integration tests by `rake integration_test`. To run all the tests, `rake all`.
6
+
7
+ To install this gem onto your local machine, run `bundle exec rake install`.
8
+ To release a new version, use `bump`, and then run `rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org/).
data/README.md CHANGED
@@ -2,19 +2,15 @@
2
2
  [![Build Status](https://travis-ci.org/taiki45/kumonos.svg?branch=master)](https://travis-ci.org/taiki45/kumonos)
3
3
  [![Gem Version](https://badge.fury.io/rb/kumonos.svg)](https://badge.fury.io/rb/kumonos)
4
4
 
5
- Manage and build a Service Mesh for Microservices.
5
+ A management tool for building Microservices "service mesh".
6
6
 
7
7
  ## Installation
8
-
9
- $ gem install kumonos
8
+ ```
9
+ gem install kumonos
10
+ ```
10
11
 
11
12
  ## Usage
12
- TODO: Write usage instructions here
13
-
14
- ## Development
15
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
16
-
17
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
13
+ TODO
18
14
 
19
15
  ## Contributing
20
16
  Bug reports and pull requests are welcome on GitHub at https://github.com/taiki45/kumonos.
data/example/envoy.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "version": 1,
3
3
  "ds": {
4
- "name": "nginx",
5
4
  "refresh_delay_ms": 30000,
6
5
  "cluster": {
7
- "name": "nginx",
6
+ "name": "ds",
8
7
  "type": "strict_dns",
9
- "connect_timeout_ms": 250,
8
+ "tls": false,
9
+ "connect_timeout_ms": 1000,
10
10
  "lb_type": "round_robin",
11
11
  "hosts": [
12
12
  {
@@ -17,8 +17,9 @@
17
17
  },
18
18
  "statsd": {
19
19
  "name": "statsd",
20
- "connect_timeout_ms": 250,
20
+ "connect_timeout_ms": 1000,
21
21
  "type": "strict_dns",
22
+ "tls": false,
22
23
  "lb_type": "round_robin",
23
24
  "hosts": [
24
25
  {
data/exe/kumonos CHANGED
@@ -21,6 +21,19 @@ class KumonosCli < Thor
21
21
  puts JSON.dump(Kumonos::Envoy.generate(definition))
22
22
  end
23
23
 
24
+ desc 'init_envoy', 'Generate envoy definition'
25
+ def init_envoy
26
+ path = 'envoy.json'
27
+ definition = JSON.parse(File.read(File.expand_path('../example/envoy.json', __dir__)))
28
+ definition.delete('statsd')
29
+ cluster = definition.fetch('ds').fetch('cluster')
30
+ cluster['hosts'] = [{ url: 'tcp://your-load-balancer-to-discovery-service:443' }]
31
+ cluster['tls'] = true
32
+ definition.fetch('ds')['cluster'] = cluster
33
+ File.write(path, JSON.pretty_generate(definition) + "\n")
34
+ puts path
35
+ end
36
+
24
37
  desc 'clusters SERVIVE_DEFINITION', 'Generate clusters configuration'
25
38
  method_option :output, aliases: '-o', desc: 'Output directory', required: true, type: :string
26
39
  def clusters(filepath)
data/lib/kumonos/envoy.rb CHANGED
@@ -5,7 +5,7 @@ module Kumonos
5
5
  # @param [Kumonos::EnvoyDefinition] definition
6
6
  # @return [Hash] envoy configuration hash
7
7
  def generate(definition)
8
- {
8
+ out = {
9
9
  listeners: [
10
10
  {
11
11
  address: definition.listener.fetch(:address),
@@ -17,7 +17,7 @@ module Kumonos
17
17
  stat_prefix: 'ingress_http',
18
18
  access_log: [{ path: definition.listener.fetch(:access_log_path) }],
19
19
  rds: {
20
- cluster: definition.ds.fetch(:name),
20
+ cluster: definition.ds.fetch(:cluster).fetch(:name),
21
21
  route_config_name: DEFAULT_ROUTE_NAME,
22
22
  refresh_delay_ms: definition.ds.fetch(:refresh_delay_ms)
23
23
  },
@@ -30,15 +30,21 @@ module Kumonos
30
30
  access_log_path: definition.admin.fetch(:access_log_path),
31
31
  address: definition.admin.fetch(:address)
32
32
  },
33
- statsd_tcp_cluster_name: definition.statsd.fetch(:name),
34
33
  cluster_manager: {
35
- clusters: [definition.statsd],
34
+ clusters: [],
36
35
  cds: {
37
36
  cluster: definition.ds.fetch(:cluster),
38
37
  refresh_delay_ms: definition.ds.fetch(:refresh_delay_ms)
39
38
  }
40
39
  }
41
40
  }
41
+
42
+ unless definition.statsd.empty?
43
+ out[:statsd_tcp_cluster_name] = definition.statsd.fetch(:name)
44
+ out[:cluster_manager][:clusters] << definition.statsd
45
+ end
46
+
47
+ out
42
48
  end
43
49
  end
44
50
  end
@@ -2,10 +2,13 @@ module Kumonos
2
2
  EnvoyDefinition = Struct.new(:version, :ds, :statsd, :listener, :admin) do
3
3
  class << self
4
4
  def from_hash(h)
5
+ ds = symbolize_keys(h.fetch('ds'))
6
+ convert_tls_option!(ds.fetch(:cluster))
7
+
5
8
  new(
6
9
  h.fetch('version'),
7
- symbolize_keys(h.fetch('ds')),
8
- symbolize_keys(h.fetch('statsd')),
10
+ ds,
11
+ convert_tls_option!(symbolize_keys(h.fetch('statsd', {}))),
9
12
  symbolize_keys(h.fetch('listener')),
10
13
  symbolize_keys(h.fetch('admin'))
11
14
  )
@@ -13,6 +16,12 @@ module Kumonos
13
16
 
14
17
  private
15
18
 
19
+ def convert_tls_option!(cluster)
20
+ tls = cluster.delete(:tls)
21
+ cluster[:ssl_context] = {} if tls
22
+ cluster
23
+ end
24
+
16
25
  def symbolize_keys(hash)
17
26
  new = hash.map do |k, v|
18
27
  [
@@ -1,3 +1,3 @@
1
1
  module Kumonos
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
@@ -3,11 +3,10 @@
3
3
  "$schema": "http://json-schema.org/draft-04/schema#",
4
4
  "type": "object",
5
5
  "id": "kumonos-configuration",
6
- "additionalProperties": false,
6
+ "additionalProperties": true,
7
7
  "required": [
8
8
  "version",
9
9
  "ds",
10
- "statsd",
11
10
  "listener",
12
11
  "admin"
13
12
  ],
@@ -21,15 +20,10 @@
21
20
  "id": "/properties/ds",
22
21
  "additionalProperties": false,
23
22
  "required": [
24
- "name",
25
23
  "refresh_delay_ms",
26
24
  "cluster"
27
25
  ],
28
26
  "properties": {
29
- "name": {
30
- "type": "string",
31
- "id": "/properties/ds/properties/name"
32
- },
33
27
  "refresh_delay_ms": {
34
28
  "type": "integer",
35
29
  "id": "/properties/ds/properties/refresh_delay_ms"
@@ -41,6 +35,7 @@
41
35
  "required": [
42
36
  "name",
43
37
  "type",
38
+ "tls",
44
39
  "connect_timeout_ms",
45
40
  "lb_type",
46
41
  "hosts"
@@ -54,6 +49,10 @@
54
49
  "type": "string",
55
50
  "id": "/properties/ds/properties/cluster/properties/type"
56
51
  },
52
+ "tls": {
53
+ "type": "boolean",
54
+ "id": "/properties/ds/properties/cluster/properties/tls"
55
+ },
57
56
  "connect_timeout_ms": {
58
57
  "type": "integer",
59
58
  "id": "/properties/ds/properties/cluster/properties/connect_timeout_ms"
@@ -92,6 +91,7 @@
92
91
  "name",
93
92
  "connect_timeout_ms",
94
93
  "type",
94
+ "tls",
95
95
  "lb_type",
96
96
  "hosts"
97
97
  ],
@@ -108,6 +108,10 @@
108
108
  "type": "string",
109
109
  "id": "/properties/statsd/properties/type"
110
110
  },
111
+ "tls": {
112
+ "type": "boolean",
113
+ "id": "/properties/statsd/properties/tls"
114
+ },
111
115
  "lb_type": {
112
116
  "type": "string",
113
117
  "id": "/properties/statsd/properties/lb_type"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumonos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taiki Ono
@@ -134,6 +134,7 @@ files:
134
134
  - ".rspec"
135
135
  - ".rubocop.yml"
136
136
  - ".travis.yml"
137
+ - DEVELOPMENT.md
137
138
  - Gemfile
138
139
  - LICENSE.txt
139
140
  - README.md