dry-stack 0.0.13 → 0.0.14
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/lib/dry-stack/command_compose.rb +3 -2
- data/lib/dry-stack/command_line.rb +1 -0
- data/lib/dry-stack/stack.rb +23 -2
- data/lib/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74db3949077357c4b9e22706547e9075a0d49e58fa677c95e763d19835819834
|
4
|
+
data.tar.gz: 3dc0469e7a7620c44d53f92246626ea21db39c9608a53519983d194bfed6e3c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33f32d96133400cca1c21dc58cc22f3cbf05504605f297c8809c15064a59ed79b761a10c67fe68b1c7621c5bd33809d2252c83a7594b9060a556238bb247f165
|
7
|
+
data.tar.gz: 16dcc21007ff1a3ed8cafa14b53d21e3a1edefa7086a07d1dc79658a920645199722e3273c7a8b6c8b1e032ec73840188b65d432ec5bb1eb44aa78f9616a312f
|
@@ -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
|
-
|
5
|
+
_params = stack.options.merge params
|
6
|
+
yaml = stack.to_compose(_params).lines[1..].join
|
6
7
|
|
7
8
|
# substitute ENV variables
|
8
|
-
|
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'
|
@@ -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
|
data/lib/dry-stack/stack.rb
CHANGED
@@ -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 ':' }
|
@@ -121,6 +138,10 @@ module Dry
|
|
121
138
|
ServiceFunction.new(@services[name], &) if block_given?
|
122
139
|
end
|
123
140
|
|
141
|
+
def Options(opts)
|
142
|
+
@options.merge! opts
|
143
|
+
end
|
144
|
+
|
124
145
|
def Ingress(services)
|
125
146
|
@ingress.merge! services
|
126
147
|
end
|
data/lib/version.rb
CHANGED
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.
|
4
|
+
version: 0.0.14
|
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-
|
11
|
+
date: 2022-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|