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