dry-stack 0.0.85 → 0.0.88

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 +17 -13
  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: f8f1e3847018ae24bd44d57813f7fb37afaa95e1a2697426eea8a40593dc07bd
4
- data.tar.gz: 5c64bd98e446a32f0edc36e98b5ef48e8812dc29183786e30f70263865dee2c2
3
+ metadata.gz: ae624210dd275eb7f62eb30f4023ea37dfde7689e84b80e9f98bf4d47f5d66b4
4
+ data.tar.gz: '0109ac07fea18f6f942ad66d71292fd52da1f27cc0b99c2834d1620b6bdb2c67'
5
5
  SHA512:
6
- metadata.gz: 06bf607c465894d9b640b04c9209cca967a7430958281ff45d61501f67705c715cd5afa6cf7d93532619b7f27947d1eb8b33e3ff217364e74bb888fad087460d
7
- data.tar.gz: bf1de07565b2adf380ae0189ea6f257c052793372c542070425bf779e087e8dd6f9183082852e84d6b59fe2c67d40313a65cc351cc855671a5ce744b1bf6cdf7
6
+ metadata.gz: 07a69b0fc65be43c138f561eabff1a38525ceea703b43c368c292bbcd350bdff283f64b74f992aef6f7b0b97761af6ff7e594ee07b634900b1780ef559bae281
7
+ data.tar.gz: fc51afc785660c574d971374b300da2ba8ce67f9673b1d700822867ba7baefc89de0addba17c52e5b3da56c32bb2b2617233cf3337f3ee64ad5e925309f46b9f
@@ -58,7 +58,6 @@ module Dry
58
58
  def logging(opts) = (@service[:logging] ||= {}).merge! opts
59
59
  def user(user) = @service[:user] = user # "${UID}:${GID}", "www-data:www-data"
60
60
  def network(names) = (@service[:networks] ||= []) << names
61
- def basic_auth(user_and_password) = @service[:basic_auth] = user_and_password
62
61
  def ingress(ing) = ((@service[:ingress] ||=[]) << ing).flatten!
63
62
  end
64
63
 
@@ -147,6 +146,8 @@ module Dry
147
146
 
148
147
  compose[:services].each do |name, service|
149
148
 
149
+ service[:image].gsub!(/:latest$/, '') # let docker swarm to create tag: :latest@sha265:0000...
150
+
150
151
  ingress = [@ingress[name], service[:ingress] || [] ].flatten.compact
151
152
 
152
153
  service[:deploy] ||= {}
@@ -173,14 +174,6 @@ module Dry
173
174
  ingress[0][:port] ||= service[:ports]&.first
174
175
 
175
176
  ingress.each_with_index do |ing, index|
176
-
177
- if service[:basic_auth]
178
- ba_user, ba_password, salt = service[:basic_auth].split ':'
179
- hashed_password = apr1_crypt ba_password, (salt || rand(36**8).to_s(36))
180
- service[:deploy][:labels] << "traefik.http.middlewares.#{service_name}-#{index}_auth.basicauth.users=#{ba_user}:#{hashed_password.gsub('$','$$')}"
181
- service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.middlewares=#{service_name}-#{index}_auth"
182
- end
183
-
184
177
  ing[:port] ||= service[:ports]&.first
185
178
  service[:deploy][:labels] += [
186
179
  "traefik.http.routers.#{service_name}-#{index}.service=#{service_name}-#{index}",
@@ -200,9 +193,18 @@ module Dry
200
193
 
201
194
  rule = []
202
195
  rule << "HostRegexp(`{name:#{nginx_host2regexp ing[:host]}}`)" if ing[:host]
196
+ rule << "ClientIP(#{[ing[:client_ip]].flatten.map{ "`#{_1}`" }.join ','})" if ing[:client_ip]
203
197
  rule << "PathPrefix(`#{nginx_host2regexp ing[:path]}`)" if ing[:path]
204
198
  rule << "#{ing[:rule]}" if ing[:rule]
205
199
 
200
+ if ing[:basic_auth]
201
+ ba_user, ba_password, salt = ing[:basic_auth].split ':'
202
+ hashed_password = apr1_crypt ba_password, (salt || rand(36**8).to_s(36))
203
+ service[:deploy][:labels] << "traefik.http.middlewares.#{service_name}-#{index}_auth.basicauth.users=#{ba_user}:#{hashed_password.gsub('$','$$')}"
204
+ service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.middlewares=#{service_name}-#{index}_auth"
205
+ end
206
+
207
+
206
208
  service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.rule=#{rule.join ' && '}"
207
209
 
208
210
  if ing[:path_sub]
@@ -214,7 +216,6 @@ module Dry
214
216
  end
215
217
  end
216
218
  end
217
- service.delete :basic_auth
218
219
  service.delete :ingress
219
220
 
220
221
  service[:environment] = @environment[name].merge(service[:environment]) if @environment[name]
@@ -269,15 +270,18 @@ module Dry
269
270
  end
270
271
 
271
272
  compose[:configs].update(compose[:configs]) do |name, config|
273
+ # total config name must be max 64 characters length. MD5 - 32 characters
274
+ short_name = name[0..30]
275
+
272
276
  if config[:file_content]
273
277
  md5 = Digest::MD5.hexdigest config[:file_content]
274
- fname = "./#{@name}.config.#{name}.#{md5}" # use MD5, when rn in parallel may have different content
278
+ fname = "./#{@name}.config.#{name}.#{md5}" # use MD5, when run in parallel may have different content
275
279
  File.write fname, config[:file_content]
276
- {name: "#{name}-#{md5}", file: fname}.merge config.except(:file_content)
280
+ {name: "#{short_name}-#{md5}", file: fname}.merge config.except(:file_content)
277
281
  elsif config[:file]
278
282
  body = File.read config[:file] rescue ''
279
283
  md5 = Digest::MD5.hexdigest body
280
- {name: "#{name}-#{md5}", file: fname}.merge config
284
+ {name: "#{short_name}-#{md5}", file: fname}.merge config
281
285
  else
282
286
  config
283
287
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.0.85'
3
+ VERSION = '0.0.88'
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.85
4
+ version: 0.0.88
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-04 00:00:00.000000000 Z
11
+ date: 2024-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake