dry-stack 0.0.13 → 0.0.15

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
  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