dry-stack 0.1.22 → 0.1.24

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dry-stack/stack.rb +53 -32
  3. data/lib/version.rb +1 -1
  4. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc36a4ac71daadd170966e113e368abcfbf9b48ffb6426e95930998d2be5dceb
4
- data.tar.gz: d6eb7c94d22cfc9856220de70323dfebadab317f9406b949460e228f801f0e46
3
+ metadata.gz: e89cc36be6a8e0f6db5be4eca8e8d297d9d3c3367b1b4405ceead26a132135ff
4
+ data.tar.gz: 9abda29bf7bd47cb965e8451fe28f1098ec6a693a6bb2abab27640f5a45b2cf7
5
5
  SHA512:
6
- metadata.gz: 9cc038e43d49094fdf0b8b622992b35de088dd9412808eb5ad188ce7998fcb7869f42924a607516907bf67fa8fa9c2ec6ecedda016785ace90470bab9636bffd
7
- data.tar.gz: dfd3c29783f27f0877a5ccefb6d72e01217610a1fa9e4d557dac2cced99a07fb21974d6253e273cd33f9c47d0a344eb8357b67a8f64c98eb78e532d28bee9357
6
+ metadata.gz: 9cd2a2fe089e113edc081cbbc61d62bb083bf2c6b6d6e27744b33185022d4c4908c0ac8984b7d0e46153a9e69e0bb4a567a50d3a9d1fc7ecd28129443afb153c
7
+ data.tar.gz: 0d1fa007595809ae419716597527ca9558efc8e11322454c11d9b2b220c6829c89366d707032f6bd333c854f54337d0052a58ee0ef48132a07ff7abfe4342736
@@ -184,48 +184,69 @@ module Dry
184
184
 
185
185
  ingress.each_with_index do |ing, index|
186
186
  ing[:port] ||= service[:ports]&.first
187
- service[:deploy][:labels] += [
188
- "traefik.http.routers.#{service_name}-#{index}.service=#{service_name}-#{index}",
189
- "traefik.http.services.#{service_name}-#{index}.loadbalancer.server.port=#{ing[:port]}"
190
- ]
191
-
192
- if opts[:traefik_tls]
187
+ if ing[:host_sni]
193
188
  domain = opts[:tls_domain] || 'example.com'
194
- domain = ing[:host].gsub('.*', ".#{domain}") if ing[:host]
189
+ domain = ing[:host_sni].gsub('.*', ".#{domain}")
195
190
  domain = ing[:tls_domain] if ing[:tls_domain]
196
- service[:deploy][:labels] += [
197
- "traefik.http.routers.#{service_name}-#{index}.tls=true",
198
- "traefik.http.routers.#{service_name}-#{index}.tls.certresolver=le",
199
- "traefik.http.routers.#{service_name}-#{index}.tls.domains[0].main=#{domain}"
200
- ]
201
- end
202
191
 
203
- rule = []
204
- rule << "HostRegexp(`{name:#{nginx_host2regexp ing[:host]}}`)" if ing[:host]
205
- rule << "ClientIP(#{[ing[:client_ip]].flatten.map{ "`#{_1}`" }.join ','})" if ing[:client_ip]
206
- rule << "PathPrefix(`#{nginx_host2regexp ing[:path]}`)" if ing[:path]
207
- rule << "#{ing[:rule]}" if ing[:rule]
192
+ ing[:passthrough] = true unless ing.key? :passthrough
208
193
 
209
- middlewares = []
194
+ service[:deploy][:labels] += [
195
+ "traefik.tcp.routers.#{service_name}-#{index}.tls=true",
196
+ "traefik.tcp.routers.#{service_name}-#{index}.tls.certresolver=le",
197
+ "traefik.tcp.routers.#{service_name}-#{index}.tls.domains[0].main=#{domain}",
210
198
 
211
- if ing[:basic_auth]
212
- ba_user, ba_password, salt = ing[:basic_auth].split ':'
213
- hashed_password = apr1_crypt ba_password, (salt || rand(36**8).to_s(36))
214
- service[:deploy][:labels] << "traefik.http.middlewares.#{service_name}-#{index}_auth.basicauth.users=#{ba_user}:#{hashed_password.gsub('$','$$')}"
215
- middlewares << "#{service_name}-#{index}_auth"
216
- end
199
+ "traefik.tcp.routers.#{service_name}-#{index}.service=#{service_name}-#{index}",
200
+ "traefik.tcp.services.#{service_name}-#{index}.loadbalancer.server.port=#{ing[:port]}",
217
201
 
218
- service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.rule=#{rule.join ' && '}"
202
+ "traefik.tcp.routers.#{service_name}-#{index}.rule=HostSNI(`#{domain}`)",
203
+ "traefik.tcp.routers.#{service_name}-#{index}.tls.passthrough=#{ing[:passthrough]}"
204
+ ]
219
205
 
220
- if ing[:path_sub]
221
- middlewares << "#{service_name}-#{index}-path_sub"
206
+ else
222
207
  service[:deploy][:labels] += [
223
- "traefik.http.middlewares.#{service_name}-#{index}-path_sub.replacepathregex.regex=#{ing[:path_sub][0]}",
224
- "traefik.http.middlewares.#{service_name}-#{index}-path_sub.replacepathregex.replacement=#{ing[:path_sub][1].gsub('$','$$')}"
208
+ "traefik.http.routers.#{service_name}-#{index}.service=#{service_name}-#{index}",
209
+ "traefik.http.services.#{service_name}-#{index}.loadbalancer.server.port=#{ing[:port]}"
225
210
  ]
226
- end
227
211
 
228
- service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.middlewares=#{middlewares.join ","}" unless middlewares.empty?
212
+ if opts[:traefik_tls]
213
+ domain = opts[:tls_domain] || 'example.com'
214
+ domain = ing[:host].gsub('.*', ".#{domain}") if ing[:host]
215
+ domain = ing[:tls_domain] if ing[:tls_domain]
216
+ service[:deploy][:labels] += [
217
+ "traefik.http.routers.#{service_name}-#{index}.tls=true",
218
+ "traefik.http.routers.#{service_name}-#{index}.tls.certresolver=le",
219
+ "traefik.http.routers.#{service_name}-#{index}.tls.domains[0].main=#{domain}"
220
+ ]
221
+ end
222
+
223
+ rule = []
224
+ rule << "HostRegexp(`{name:#{nginx_host2regexp ing[:host]}}`)" if ing[:host]
225
+ rule << "ClientIP(#{[ing[:client_ip]].flatten.map{ "`#{_1}`" }.join ','})" if ing[:client_ip]
226
+ rule << "PathPrefix(`#{ing[:path]}`)" if ing[:path]
227
+ rule << "#{ing[:rule]}" if ing[:rule]
228
+
229
+ middlewares = []
230
+
231
+ if ing[:basic_auth]
232
+ ba_user, ba_password, salt = ing[:basic_auth].split ':'
233
+ hashed_password = apr1_crypt ba_password, (salt || rand(36**8).to_s(36))
234
+ service[:deploy][:labels] << "traefik.http.middlewares.#{service_name}-#{index}_auth.basicauth.users=#{ba_user}:#{hashed_password.gsub('$','$$')}"
235
+ middlewares << "#{service_name}-#{index}_auth"
236
+ end
237
+
238
+ service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.rule=#{rule.join ' && '}"
239
+
240
+ if ing[:path_sub]
241
+ middlewares << "#{service_name}-#{index}-path_sub"
242
+ service[:deploy][:labels] += [
243
+ "traefik.http.middlewares.#{service_name}-#{index}-path_sub.replacepathregex.regex=#{ing[:path_sub][0]}",
244
+ "traefik.http.middlewares.#{service_name}-#{index}-path_sub.replacepathregex.replacement=#{ing[:path_sub][1].gsub('$','$$')}"
245
+ ]
246
+ end
247
+
248
+ service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.middlewares=#{middlewares.join ","}" unless middlewares.empty?
249
+ end
229
250
  end
230
251
  end
231
252
  service.delete :ingress
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.1.22'
3
+ VERSION = '0.1.24'
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.1.22
4
+ version: 0.1.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-29 00:00:00.000000000 Z
11
+ date: 2025-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -114,7 +114,7 @@ licenses:
114
114
  - Nonstandard
115
115
  metadata:
116
116
  source_code_uri: https://github.com/artyomb/dry-stack
117
- post_install_message:
117
+ post_install_message:
118
118
  rdoc_options: []
119
119
  require_paths:
120
120
  - lib
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  version: '0'
131
131
  requirements: []
132
132
  rubygems_version: 3.3.7
133
- signing_key:
133
+ signing_key:
134
134
  specification_version: 4
135
135
  summary: Dry docker swarm stack definition
136
136
  test_files: []