dry-stack 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dry-stack/command_compose.rb +3 -3
- data/lib/dry-stack/command_line.rb +6 -4
- data/lib/dry-stack/stack.rb +28 -7
- 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: f64cd384cf340d47aa43a14a1a59371005828dd8dde7e84b902b780b8b6ab9c4
|
4
|
+
data.tar.gz: cf2717f8e35e12755ecf2dff4de705c8d21c9a466d12973dfedde33abca0e3c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 257bd27f307e984571aec919133023545dfd58e0d2ffdec9ce83802525bd93984065301b69635ac4c830826e7d5c7f605c67e26ff4b1cf054fcc76c0c6361627
|
7
|
+
data.tar.gz: 24d2cd08422cccb0f81cb3f41043f90f36bb19dd2b8dfb0661a8d51a2d1cabaed62a04ad0c397c3fc695979366891aa877746c4be46aad939ede6e868b9923c3
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require_relative 'command_line'
|
2
2
|
|
3
3
|
Dry::CommandLine::COMMANDS[:to_compose] = Class.new do
|
4
|
-
def run(stack, params
|
5
|
-
yaml = stack.to_compose.lines[1..].join
|
4
|
+
def run(stack, params)
|
5
|
+
yaml = stack.to_compose(params).lines[1..].join
|
6
6
|
|
7
7
|
# substitute ENV variables
|
8
|
-
params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml}\"")
|
8
|
+
params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml.gsub("`", '\\\`')}\"")
|
9
9
|
end
|
10
10
|
|
11
11
|
def help = 'Print stack in docker compose format'
|
@@ -38,6 +38,8 @@ module Dry
|
|
38
38
|
# in all caps are required
|
39
39
|
o.on('-s', '--stack STACK_NAME', 'Stack file')
|
40
40
|
o.on('-e', '--env', 'Load .env file') { load_env }
|
41
|
+
o.on('', '--ingress', 'Generate ingress labels') { true }
|
42
|
+
o.on('', '--traefik', 'Generate traefik labels') { true }
|
41
43
|
o.on('-n', '--no-env', 'Do not process env variables') { true }
|
42
44
|
o.on('-h', '--help') { puts o; exit }
|
43
45
|
o.parse! args, into: params
|
@@ -49,10 +51,10 @@ module Dry
|
|
49
51
|
|
50
52
|
stack_text = $stdin.tty? ? File.read(params[:stack]) : STDIN.read
|
51
53
|
Dry::Stack() { eval stack_text }
|
52
|
-
COMMANDS[command.to_sym].run Stack.last_stack, params
|
53
|
-
rescue => e
|
54
|
-
|
55
|
-
|
54
|
+
COMMANDS[command.to_sym].run Stack.last_stack, params
|
55
|
+
# rescue => e
|
56
|
+
# puts e.message
|
57
|
+
# exit 1
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
data/lib/dry-stack/stack.rb
CHANGED
@@ -27,7 +27,7 @@ module Dry
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def initialize(name)
|
30
|
-
@name = name
|
30
|
+
@name = name || 'stack'
|
31
31
|
@services = {}
|
32
32
|
@networks = {}
|
33
33
|
@publish_ports = {}
|
@@ -36,11 +36,17 @@ module Dry
|
|
36
36
|
|
37
37
|
def stringify(hash) = hash.to_h { |k, v| [k.to_s, v.is_a?(Hash) ? stringify(v) : v] }
|
38
38
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
def nginx_host2regexp(str)
|
40
|
+
str.to_s.gsub('.', '\.').gsub('*', '.*')
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_compose(opts = {})
|
44
|
+
compose = {
|
45
|
+
name: @name.to_s, # https://docs.docker.com/compose/compose-file/#name-top-level-element
|
46
|
+
services: YAML.load(@services.to_yaml),
|
47
|
+
networks: YAML.load(@networks.to_yaml),
|
43
48
|
}
|
49
|
+
|
44
50
|
if @ingress.any?
|
45
51
|
compose[:networks].merge! ingress_routing: {external: true, name: 'ingress-routing'}
|
46
52
|
end
|
@@ -48,13 +54,28 @@ module Dry
|
|
48
54
|
compose[:services].each do |name, service|
|
49
55
|
@ingress[name][:port] ||= service[:ports]&.first if @ingress[name]
|
50
56
|
service[:deploy] ||= {}
|
51
|
-
service[:deploy][:labels]
|
52
|
-
|
57
|
+
service[:deploy][:labels] ||= []
|
58
|
+
|
59
|
+
if @ingress[name] && (opts[:ingress] || opts[:traefik])
|
53
60
|
service[:networks] ||= []
|
54
61
|
service[:networks] << 'default' if service[:networks].empty?
|
55
62
|
service[:networks] << 'ingress_routing'
|
56
63
|
end
|
57
64
|
|
65
|
+
if @ingress[name] && opts[:ingress]
|
66
|
+
service[:deploy][:labels] = @ingress[name]&.map { |k, v| "ingress.#{k}=#{v}" }
|
67
|
+
end
|
68
|
+
|
69
|
+
if @ingress[name] && opts[:traefik]
|
70
|
+
service_name = "#{@name}_#{name}"
|
71
|
+
service[:deploy][:labels] += [
|
72
|
+
'traefik.enable=true',
|
73
|
+
"traefik.http.routers.nginx.service=#{service_name}",
|
74
|
+
"traefik.http.services.#{service_name}.loadbalancer.server.port=#{@ingress[name][:port]}",
|
75
|
+
"traefik.http.routers.nginx.rule=HostRegexp(`{name:#{nginx_host2regexp @ingress[name][:host]}}`)"
|
76
|
+
]
|
77
|
+
end
|
78
|
+
|
58
79
|
service[:ports] = @publish_ports[name]&.zip(service[:ports] || @publish_ports[name])&.map { _1.join ':' }
|
59
80
|
end
|
60
81
|
|
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.9
|
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-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|