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 +4 -4
- data/bin/stack.drs +0 -3
- data/lib/dry-stack/command_compose.rb +3 -2
- data/lib/dry-stack/command_line.rb +3 -2
- data/lib/dry-stack/stack.rb +24 -6
- 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: d42bc27824db9d5bda598e74265ca0326d261e12d9ee73b61b81d7daa1170aad
|
4
|
+
data.tar.gz: bb9830c13ea1c85bd0996a204a6689c568064d48f46f94cc30580e4f4d923d84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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'
|
@@ -20,14 +20,14 @@ module Dry
|
|
20
20
|
|
21
21
|
ARGV << '-h' if ARGV.empty?
|
22
22
|
OptionParser.new do |o|
|
23
|
-
o.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 = "
|
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
|
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 ':' }
|
@@ -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
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.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-
|
11
|
+
date: 2022-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|