dry-stack 0.0.13 → 0.0.15

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
  SHA256:
3
- metadata.gz: d5f21e65df1e5cdb3f6fc7d28dd4c4f3e9c66db5de746af952d0353da1ecc4cb
4
- data.tar.gz: 1cad2e0cf7cf1def43213d490173445db4df8036332b4ded90fd6095a552d8f3
3
+ metadata.gz: d42bc27824db9d5bda598e74265ca0326d261e12d9ee73b61b81d7daa1170aad
4
+ data.tar.gz: bb9830c13ea1c85bd0996a204a6689c568064d48f46f94cc30580e4f4d923d84
5
5
  SHA512:
6
- metadata.gz: 68640915ff636f73f85a5d3cf4be792aeaa541b3887c8b8da996d640193c49c839997639fe22f1bfc2d7b25c99cd41a479983ebed555a834480ad36fab4eb63c
7
- data.tar.gz: cb262611e2c731eb9af706f267e2b40d7253ee070a774353ae89b956a330d4451525acb7196dc8e70f89443bfdb214bf76d1d485ae7f780a30f9f32f21995033
6
+ metadata.gz: 1787666d13ac41d16fe254faf5a2619fa22f50cf41b9c84d499a5ac3946112008b8931de1b59f78d0032faecd24e3a2c9f07a5c8542852af5eb6bfd53df453ca
7
+ data.tar.gz: 1689a7fdba3a87cc7665feef60c5f35ed8cb9715fe2ad41f1608ff5567e006ed2034d77a12e7c1c612acb1c46a412c2cd5c9efa02f306079cbccb0917cfe3f31
data/bin/stack.drs CHANGED
@@ -1,6 +1,3 @@
1
- HttpFront services: {admin: 'admin.*', operator: 'operator.*', reports: 'reports.*',
2
- navigator: 'navigator.*', backend: 'admin.*, operator.*, navigator.*'}
3
-
4
1
  PublishPorts admin: 4000, operator: 4001, navigator: 4002, reports: 7000 # mode: ingress, protocol: tcp
5
2
 
6
3
  Service :admin, image: 'frontend', env: {APP: 'admin'}, ports: 5000
@@ -2,10 +2,11 @@ require_relative 'command_line'
2
2
 
3
3
  Dry::CommandLine::COMMANDS[:to_compose] = Class.new do
4
4
  def run(stack, params)
5
- yaml = stack.to_compose(params).lines[1..].join
5
+ _params = stack.options.merge params
6
+ yaml = stack.to_compose(_params).lines[1..].join
6
7
 
7
8
  # substitute ENV variables
8
- params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml.gsub("`", '\\\`')}\"")
9
+ _params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml.gsub("`", '\\\`')}\"")
9
10
  end
10
11
 
11
12
  def help = 'Print stack in docker compose format'
@@ -20,14 +20,14 @@ module Dry
20
20
 
21
21
  ARGV << '-h' if ARGV.empty?
22
22
  OptionParser.new do |o|
23
- o.version = "v#{Dry::Stack::VERSION}"
23
+ o.version = "#{Dry::Stack::VERSION}"
24
24
 
25
25
  usage = [
26
26
  'dry-stack -s stackfile [options] COMMAND',
27
27
  'cat stackfile | dry-stack COMMAND',
28
28
  'dry-stack COMMAND < stack.drs'
29
29
  ]
30
- o.banner = "Usage:\n\t#{usage.join "\n\t"}"
30
+ o.banner = "Version: #{o.version}\nUsage:\n\t#{usage.join "\n\t"}"
31
31
  o.separator ''
32
32
  o.separator 'Commands:'
33
33
  COMMANDS.each { |name, cmd| o.separator "#{' ' * 5}#{name} - #{cmd.help}" }
@@ -41,6 +41,7 @@ module Dry
41
41
  o.on('', '--name STACK_NAME', 'Define stack name')
42
42
  o.on('', '--ingress', 'Generate ingress labels') { true }
43
43
  o.on('', '--traefik', 'Generate traefik labels') { true }
44
+ o.on('', '--traefik_tls', 'Generate traefik tls labels') { true }
44
45
  o.on('-n', '--no-env', 'Do not process env variables') { true }
45
46
  o.on('-h', '--help') { puts o; exit }
46
47
  o.parse! args, into: params
@@ -20,7 +20,7 @@ module Dry
20
20
  class << self
21
21
  attr_accessor :last_stack
22
22
  end
23
- attr_accessor :name
23
+ attr_accessor :name, :options
24
24
 
25
25
  def Stack(name = nil, &)
26
26
  Stack.last_stack = Stack.new name
@@ -29,6 +29,7 @@ module Dry
29
29
 
30
30
  def initialize(name)
31
31
  @name = name || 'stack'
32
+ @options = {}
32
33
  @services = {}
33
34
  @networks = {}
34
35
  @publish_ports = {}
@@ -54,7 +55,7 @@ module Dry
54
55
  str.to_s.gsub('.', '\.').gsub('*', '.*')
55
56
  end
56
57
 
57
- def to_compose(opts = {})
58
+ def to_compose(opts = @options )
58
59
  compose = {
59
60
  # name: @name.to_s, # https://docs.docker.com/compose/compose-file/#name-top-level-element
60
61
  # Not allowed by docker stack deploy
@@ -91,6 +92,22 @@ module Dry
91
92
  ]
92
93
  end
93
94
 
95
+ if @ingress[name] && opts[:traefik_tls]
96
+ service_name = "#{@name}_#{name}"
97
+ service[:deploy][:labels] += [
98
+ 'traefik.enable=true',
99
+ "traefik.http.routers.#{service_name}.service=#{service_name}",
100
+ "traefik.http.services.#{service_name}.loadbalancer.server.port=#{@ingress[name][:port]}",
101
+ "traefik.http.routers.#{service_name}.rule=HostRegexp(`{name:#{nginx_host2regexp @ingress[name][:host]}}`)",
102
+ "traefik.http.routers.#{service_name}.entrypoints=http",
103
+ "traefik.http.routers.#{service_name}.middlewares=service_stack-https-redirect",
104
+ "traefik.http.routers.#{service_name}.rule=Host(`${REGISTRY_HOSTNAME}`)",
105
+ "traefik.http.routers.#{service_name}.entrypoints=https",
106
+ "traefik.http.routers.#{service_name}.tls=true",
107
+ "traefik.http.routers.#{service_name}.tls.certresolver=le"
108
+ ]
109
+ end
110
+
94
111
  service[:deploy].merge! @deploy[name] if @deploy[name]
95
112
 
96
113
  service[:ports] = @publish_ports[name]&.zip(service[:ports] || @publish_ports[name])&.map { _1.join ':' }
@@ -104,10 +121,6 @@ module Dry
104
121
  stringify(compose).to_yaml
105
122
  end
106
123
 
107
- def HttpFront(params)
108
- yield if block_given?
109
- end
110
-
111
124
  def PublishPorts(ports)
112
125
  @publish_ports = ports.to_h { |k, v| [k,[v].flatten] }
113
126
  end
@@ -121,6 +134,11 @@ module Dry
121
134
  ServiceFunction.new(@services[name], &) if block_given?
122
135
  end
123
136
 
137
+ def Options(opts)
138
+ warn 'WARN: Options command is used for testing purpose. Not recommended in real life configurations.'
139
+ @options.merge! opts
140
+ end
141
+
124
142
  def Ingress(services)
125
143
  @ingress.merge! services
126
144
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.0.13'
3
+ VERSION = '0.0.15'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-stack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-10 00:00:00.000000000 Z
11
+ date: 2022-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake