dry-stack 0.0.36 → 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dry-stack/stack.rb +30 -16
  3. data/lib/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aca411e8c6c4aecd1657a57d5398b106d4f42892f82400038ccca3c671240dde
4
- data.tar.gz: feb5cd80f56da06a126607004aa625bbb23a64def1a64d21e1a69cdeee8511a5
3
+ metadata.gz: 552fc69a9e66540b6dda0684697a9f6d61fca3df74237622d7c332bbdff055ef
4
+ data.tar.gz: 47525a271a081a4eb8f0ced2ffed4ef8292e86959efcb45aa0e08aff2a86a4e3
5
5
  SHA512:
6
- metadata.gz: 15789f821fde3f33328b8408d41feeab190cb67ea645a06a1ddfee73634687310b86ee009efa932a1da5045860809564fb622954fd12ef6fb07c4a836f171395
7
- data.tar.gz: 5b3feef8d7a39a7cfd1d2fb64be19aea632a217f05c88e48ef648c632fc9e216fbd9b8045b355ef185104a20b0ef9acb24396e52f90910097a28c729d1ca0053
6
+ metadata.gz: abdc1e2747cfe02adedbaff0c56d5b2ccba4406c4705313b618e1889bd6a47bcba6d0f0cc9b1b0eaaa73fa62f511ab734c1d07c839a8ca9f070c405365783c48
7
+ data.tar.gz: e07c5699910cbaecda40dceab572a693e20bb069526b340d1763549c8354a2b2d7ce82ba294909bff4f2de5b841b09e6d24c62c6b7b656108c5d5c4fbd49a5c6
@@ -16,7 +16,7 @@ module Dry
16
16
  def image(name)= @service[:image] = name
17
17
  def ports(ports)= ((@service[:ports] ||= []) << ports).flatten!
18
18
  def command(cmd)= @service[:command] = cmd
19
- def label(str)= @service[:deploy][:labels] << str
19
+ def deploy_label(str)= @service[:deploy][:labels] << str
20
20
  end
21
21
 
22
22
  class Stack
@@ -91,33 +91,36 @@ module Dry
91
91
  end
92
92
 
93
93
  compose[:services].each do |name, service|
94
- @ingress[name][:port] ||= service[:ports]&.first if @ingress[name]
94
+ ingress = [@ingress[name]].flatten
95
+ ingress[0][:port] ||= service[:ports]&.first if ingress[0]
95
96
  service[:deploy] ||= {}
96
97
  service[:deploy][:labels] ||= []
97
98
  service[:deploy][:labels] += @labels.map { "#{_1}=#{_2}" }
98
99
 
99
- if @ingress[name] && (opts[:ingress] || opts[:traefik] || opts[:traefik_tls])
100
+ if ingress[0] && (opts[:ingress] || opts[:traefik] || opts[:traefik_tls])
100
101
  service[:networks] ||= []
101
102
  service[:networks] << 'default' if service[:networks].empty?
102
103
  service[:networks] << 'ingress_routing'
103
104
  end
104
105
 
105
- if opts[:host_sed] && @ingress.dig(name,:host)
106
- a, b = opts[:host_sed].split('/').reject(&:empty?)
107
- @ingress[name][:host].gsub! %r{#{a}}, b
106
+ ingress.each do |rule|
107
+ if opts[:host_sed] && rule[:host]
108
+ a, b = opts[:host_sed].split('/').reject(&:empty?)
109
+ rule[:host].gsub! %r{#{a}}, b
110
+ end
108
111
  end
109
112
 
110
- if @ingress[name] && opts[:ingress]
111
- service[:deploy][:labels] = @ingress[name]&.map { |k, v| "ingress.#{k}=#{v}" }
113
+ if ingress[0] && opts[:ingress]
114
+ service[:deploy][:labels] = ingress[0]&.map { |k, v| "ingress.#{k}=#{v}" }
112
115
  end
113
116
 
114
- if @ingress[name] && (opts[:traefik] || opts[:traefik_tls])
115
- service_name = "#{@name}_#{name}"
117
+ service_name = "#{@name}_#{name}"
116
118
 
119
+ if ingress[0] && (opts[:traefik] || opts[:traefik_tls])
117
120
  service[:deploy][:labels] += [
118
121
  'traefik.enable=true',
119
122
  "traefik.http.routers.#{service_name}.service=#{service_name}",
120
- "traefik.http.services.#{service_name}.loadbalancer.server.port=#{@ingress[name][:port]}",
123
+ "traefik.http.services.#{service_name}.loadbalancer.server.port=#{ingress[0][:port]}"
121
124
  ]
122
125
 
123
126
  if opts[:traefik_tls]
@@ -131,13 +134,24 @@ module Dry
131
134
  ]
132
135
  end
133
136
 
134
- rule = []
135
- rule << "HostRegexp(`{name:#{nginx_host2regexp @ingress[name][:host]}}`)" if @ingress[name][:host]
136
- rule << "PathPrefix(`#{nginx_host2regexp @ingress[name][:path]}`)" if @ingress[name][:path]
137
- rule << "#{@ingress[name][:rule]}" if @ingress[name][:rule]
138
- service[:deploy][:labels] << "traefik.http.routers.#{service_name}.rule=#{rule.join ' && '}"
137
+ rule_group = ingress.map do|r|
138
+ rule = []
139
+ rule << "HostRegexp(`{name:#{nginx_host2regexp r[:host]}}`)" if r[:host]
140
+ rule << "PathPrefix(`#{nginx_host2regexp r[:path]}`)" if r[:path]
141
+ rule << "#{r[:rule]}" if r[:rule]
142
+ rule.join ' && '
143
+ end
144
+ rule = rule_group.size > 1 ? rule_group.map{"(#{_1})"}.join(' || ') : rule_group[0]
145
+ service[:deploy][:labels] << "traefik.http.routers.#{service_name}.rule=#{rule}"
139
146
  end
140
147
 
148
+ hash = {'service-name': service_name}
149
+ hash.default = ''
150
+ original_verbosity = $VERBOSE
151
+ $VERBOSE = nil
152
+ service[:deploy][:labels].map!{ _1 % hash }
153
+ $VERBOSE = original_verbosity
154
+
141
155
  service[:deploy].merge! @deploy[name] if @deploy[name]
142
156
 
143
157
  pp_i = @publish_ports[name]&.reject { _1.class == String }
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.0.36'
3
+ VERSION = '0.0.38'
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.36
4
+ version: 0.0.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-25 00:00:00.000000000 Z
11
+ date: 2023-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake