dry-stack 0.1.10 → 0.1.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c88b6bc038fa30ed2b132c936cdae39d7cbc28a2fcfa0b303fc89fff05a53bb
4
- data.tar.gz: fcce7e5376b5fa037ac96c9becf52f889115636e20ba9f42a1d3f929fdc5ffec
3
+ metadata.gz: cbaeac98b043b8dccbbd59e01fd5777b7e9f6a94a7020e560750ee537c283e83
4
+ data.tar.gz: 7cb8549b37702848f761d7a56afb4baed6a73a419282415bd680aae2b76d7ebd
5
5
  SHA512:
6
- metadata.gz: 255a433586527977da9d6ff9f7c579bcd646adc91c0616eb09345f55c8e715eb8d430939331013a651b369cf3c8eb8e56bd5552b7430916e31d3a0846d760e77
7
- data.tar.gz: 9b749419d4c4ec2fe4b7ad330e7a3fddcd500757cd025ac6c90c48eafedf86708995c9f491e9e214c90feff71d48102d7e9f61820140d3980d38f25a24e5f399
6
+ metadata.gz: 20109696956962c30782c47495ffcf267e7c9360fd9793bff44e9dbd30cdec3efb2824b8ac729399f01b2abcc3544daa61c5b71c5ba31f6593af1ce34a41d5ea
7
+ data.tar.gz: a14a9a310271f6dfa43059ad027dc6f8e3ac18d8e776d952af24ce9a4de11e365d58ce25de5b46914e454665ebed1d8c432604048947a5451667d5de74ff3ac2
@@ -40,7 +40,6 @@ module Dry
40
40
  def safe_eval(drs, params)
41
41
  Dry::Stack(params[:name], params[:configuration]) do
42
42
  eval drs, self.binding
43
- @after_blocks&.each { instance_exec &_1 }
44
43
  end
45
44
  end
46
45
 
@@ -14,6 +14,8 @@ require_relative 'apache_specific_md5'
14
14
  # end
15
15
 
16
16
  module Dry
17
+ EMPTY_HASH = :empty_hash
18
+
17
19
  class ::Hash
18
20
  def deep_merge!(second)
19
21
  merger = proc { |_, v1, v2|
@@ -45,6 +47,10 @@ module Dry
45
47
  def Stack(name = nil, configuration = nil, &)
46
48
  Stack.last_stack = Stack.new name
47
49
  Stack.last_stack.instance_exec(&) if block_given?
50
+ Stack.last_stack.instance_exec do
51
+ @services_blocks&.each { instance_exec &_1 }
52
+ @after_blocks&.each { instance_exec &_1 }
53
+ end
48
54
  Stack.last_stack.apply_configuration configuration if configuration
49
55
  end
50
56
 
@@ -61,7 +67,7 @@ module Dry
61
67
  def config(name = nil, opts)= (@service[:configs] ||= []) << {source: name.to_s}.merge(opts)
62
68
  def logging(opts) = (@service[:logging] ||= {}).merge! opts
63
69
  def user(user) = @service[:user] = user # "${UID}:${GID}", "www-data:www-data"
64
- def network(names) = (@service[:networks] ||= []) << names
70
+ def network(name, opts = {}) = (@service[:networks][name] ||={}).merge! opts
65
71
  def ingress(ing) = ((@service[:ingress] ||=[]) << ing).flatten!
66
72
  end
67
73
 
@@ -147,7 +153,7 @@ module Dry
147
153
 
148
154
  compose[:services].each do |name, service|
149
155
 
150
- service[:image].gsub!(/:latest$/, '') # let docker swarm to create tag: :latest@sha265:0000...
156
+ service[:image].gsub!(/:latest$/, '') if service[:image] # let docker swarm to create tag: :latest@sha265:0000...
151
157
 
152
158
  ingress = [@ingress[name], service[:ingress] || [] ].flatten.compact
153
159
 
@@ -156,9 +162,9 @@ module Dry
156
162
  service[:deploy][:labels] += @labels.map { "#{_1}=#{_2}" }
157
163
 
158
164
  if ingress[0] && (opts[:ingress] || opts[:traefik] || opts[:traefik_tls])
159
- service[:networks] ||= []
160
- service[:networks] << 'default' if service[:networks].empty?
161
- service[:networks] << 'ingress_routing'
165
+ service[:networks] ||= {}
166
+ service[:networks][:default] ||= {} if service[:networks].empty?
167
+ service[:networks][:ingress_routing] ||= {}
162
168
  end
163
169
 
164
170
  ingress.each do |rule|
@@ -262,21 +268,15 @@ module Dry
262
268
  end
263
269
  end
264
270
 
265
- service[:networks]&.map! do |network|
266
- if network.is_a?(Hash)
267
- if network.key?(:name)
268
- n_name = network[:name].gsub('-','_').to_sym
269
- if n_name != :default
270
- (compose[:networks][n_name] ||= {}).merge! network
271
- end
272
- n_name
273
- else
274
- $stderr.puts ':name must be specified in network declaration'
275
- raise 'invalid network declaration'
276
- end
277
- else
278
- network
271
+ service[:networks]&.each do |name, network|
272
+ next unless network.is_a? Hash
273
+
274
+ if network[:name]
275
+ (compose[:networks][name] ||= {}).merge! network.except(:aliases).merge(name: network[:name])
279
276
  end
277
+ network.delete :external
278
+ network.delete :name
279
+ service[:networks][name] = EMPTY_HASH if network.empty?
280
280
  end
281
281
 
282
282
  service[:configs]&.each_with_index do |config, index|
@@ -307,14 +307,16 @@ module Dry
307
307
 
308
308
  prune = ->(o) {
309
309
  o.each { prune[_2] } if o.is_a? Hash
310
- o.delete_if { _2.nil? || (_2.respond_to?(:empty?) && _2.empty?) } if o.is_a? Hash
310
+ o.delete_if { _2.nil? || ( _2.respond_to?(:empty?) && _2.empty?) } if o.is_a? Hash
311
311
  }
312
312
  prune[compose]
313
313
 
314
314
  each_recursive _root: compose do |_path, node, v|
315
+
315
316
  v.transform_keys!(&:to_s) if v.is_a? Hash
316
317
  node.transform_keys!(&:to_s) if node.is_a? Hash
317
318
  _path.last[node] = v.to_s if v.is_a? Symbol
319
+ _path.last[node] = nil if v == EMPTY_HASH
318
320
 
319
321
  _path.last[node] = v.to_s if node.to_s == 'fluentd-async'
320
322
  end
@@ -332,11 +334,19 @@ module Dry
332
334
  (@after_blocks ||=[]) << block
333
335
  end
334
336
 
335
- def ServicesEach(name = nil, opts = {}, &block)
337
+ def BeforeService(name = nil, opts = {}, &block)
338
+ (@before_blocks ||=[]).push names: [name].flatten.compact, except: opts[:except],
339
+ block: ->(s_name) {
340
+ _ServiceImplementation s_name, opts, &block
341
+ }
342
+ end
343
+
344
+ def AfterService(name = nil, opts = {}, &block)
336
345
  After do
337
- name ||= @services.keys
338
- [name].flatten.each do |s_name|
339
- Service s_name, opts, &block
346
+ names = [name || @services.keys].flatten
347
+ names -= [opts[:except]].flatten if opts.key? :except
348
+ names.each do |s_name|
349
+ _ServiceImplementation s_name, opts, &block
340
350
  end
341
351
  end
342
352
  end
@@ -345,12 +355,26 @@ module Dry
345
355
  @publish_ports.merge! ports.to_h { |k, v| [k,[v].flatten] }
346
356
  end
347
357
 
348
- def Service(name, opts = {}, &)
358
+ def Service(name, opts = {}, &block)
359
+ @services_blocks ||=[]
360
+ (@services_blocks ||=[]).push -> { _ServiceDeferred(name, opts, &block) }
361
+ end
362
+
363
+ def _ServiceDeferred(name, opts = {}, &block)
364
+ (@before_blocks || []).each do |before|
365
+ next unless before[:names].empty? || before[:names].include?(name)
366
+ next if before[:except]&.include? name
367
+ before[:block].call(name)
368
+ end
369
+ _ServiceImplementation(name, opts, &block)
370
+ end
371
+
372
+ def _ServiceImplementation(name, opts = {}, &)
349
373
  opts = opts.dup
350
374
  opts[:ports] = [opts[:ports]].flatten if opts.key? :ports
351
375
  opts[:environment] = opts.delete(:env) if opts.key? :env
352
376
 
353
- service = @services[name.to_sym] ||= {environment: {}, deploy: {labels: []}}
377
+ service = @services[name.to_sym] ||= {environment: {}, deploy: {labels: []}, networks: {}}
354
378
  service.deep_merge! opts
355
379
  ServiceFunction.new(service, &) if block_given?
356
380
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.1.10'
3
+ VERSION = '0.1.12'
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.10
4
+ version: 0.1.12
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-31 00:00:00.000000000 Z
11
+ date: 2024-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake