dry-stack 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ab4e5cc474243867d1902215d9e0c8f691637f385a3def0cc38e95eb77130ae
4
- data.tar.gz: 10cfa1a70397061a5d7a7ed3a6d37eb4b130efa63c2410910bbf691c3fe85d8e
3
+ metadata.gz: 7966c8d4d90e8f6c2b7b9f011d59392c043e8349bdfaf32af64533d0ac8363e3
4
+ data.tar.gz: c20e78cc4176fecbe03803089933b8cbb6ce5424e66156c7db0a24ab14ae27d8
5
5
  SHA512:
6
- metadata.gz: 363dfb68ec8bd172a5e44f553f7393952f7c0aff11f55c81b0062a573a18a63f7a4262404e13cce1c7da34de804cde9da676a9074837d9eb4b758dc355e8876a
7
- data.tar.gz: a236bdec6ff3f622212d3b01e524b4ae939d09a826a989563fab76355ce08e9aa3347cfa05f3fe10b86ce7592d590a49c600ee74ab044e0213293a450a386ec0
6
+ metadata.gz: 65c0854dcde519ad3fbb577c9a5098e92c436a349bab23af6a79fc0db28957391879feed79eacdd13f0e410ff54bfa34754ed8279a7d429ab2d1b280c5645b1e
7
+ data.tar.gz: 695bfe12d7747d476500a6f927d99ff3bc6d1a86d18e5eb44aec532eb4f9ca1811d0d7a563b9d93492b335e5b7014ff1549a67c2981a8d7d427e8f03d063987e
@@ -1,8 +1,8 @@
1
1
  require_relative 'command_line'
2
2
 
3
3
  Dry::CommandLine::COMMANDS[:to_compose] = Class.new do
4
- def run(stack, params, args)
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
8
  params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml}\"")
@@ -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, args
53
- rescue => e
54
- puts e.message
55
- exit 1
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
@@ -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 to_compose
40
- compose = {name: @name,
41
- services: YAML.load(@services.to_yaml),
42
- networks: YAML.load(@networks.to_yaml),
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/#configs-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] = @ingress[name]&.map { |k, v| "ingress.#{k}=#{v}" }
52
- if @ingress[name]
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
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.0.7'
3
+ VERSION = '0.0.8'
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.7
4
+ version: 0.0.8
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-08 00:00:00.000000000 Z
11
+ date: 2022-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake