dry-stack 0.0.4 → 0.0.5

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: 4b5476c2fbc526efb9f2626a6324ef08de62db257f415dad79117cd6ba9e2112
4
- data.tar.gz: cbcd327643b6447815f1ca6c0119b0b4bedc2c07f382d7541be5f40372fed291
3
+ metadata.gz: b6b0981566e92e24a2da8878f387d0db385cf91c330bdbdf85cafd99f2c57561
4
+ data.tar.gz: f1a39d9413754ebe20c0249f9e7ea2c344c136387c0211ab9aa98c7fc37b4a24
5
5
  SHA512:
6
- metadata.gz: 8b0cb4055dfc95cbd774ddacf53a4d7d3a3d8225e92c1aa97d7b317279db51f085ce700872c6bc34ab4b857c1102b4f3090460213ccbeb6fe85768d27b687fa0
7
- data.tar.gz: cb635df42bf89ad2e08b33d2704348ac0091c087b36ec458d3f5aa0ceb5eda462339ee8b68fc7a17fde4464b1360b5f7ef94f1076d0531d041ff27e8557fd1e0
6
+ metadata.gz: b81863c9ebe1e517bdb3e3060e80673ea0ea870c307519c44ef0464bdd04f9aef5a0a18945973bc6d4fd97cb4dfe79822fa3d0511500366bcf05f7e360dbcad1
7
+ data.tar.gz: 3de0c4bd30868e4c82763d642e4b3904915ce3351dea066ae95b2933ee624aeded11bc4792afac46e8e6369797625c83ad15cf7be5d2bbcb9d1b8f20fb38b5ae
data/bin/stack2.drs ADDED
@@ -0,0 +1,8 @@
1
+ PublishPorts reports: 7000
2
+ Ingress reports: {host: 'reports.*', protocol: :http, port: 7000}
3
+
4
+ Service :admin, image: '$REGISTRY_HOST/frontend', env: { APP: 'admin' }, ports: 5000
5
+ Service :reports, image: '$REGISTRY_HOST/reports', env: { DB_URL: '$DB_URL' }
6
+
7
+ Network :default, attachable: true
8
+ Network :ingress_routing, external: true, name: 'ingress-routing'
@@ -31,6 +31,7 @@ module Dry
31
31
  @services = {}
32
32
  @networks = {}
33
33
  @publish_ports = {}
34
+ @ingress = {}
34
35
  end
35
36
 
36
37
  def stringify(hash) = hash.to_h { |k, v| [k.to_s, v.is_a?(Hash) ? stringify(v) : v] }
@@ -42,11 +43,18 @@ module Dry
42
43
  }
43
44
 
44
45
  compose[:services].each do |name, service|
45
- service[:ports] = @publish_ports[name]&.zip(service[:ports])&.map { _1.join ':' }
46
- service.delete_if { _2.nil? || _2.empty? }
46
+ @ingress[name][:port] ||= service[:ports]&.first if @ingress[name]
47
+ service[:deploy] ||= {}
48
+ service[:deploy][:labels] = @ingress[name]&.map { |k, v| "ingress.#{k}=#{v}" }
49
+
50
+ service[:ports] = @publish_ports[name]&.zip(service[:ports] || @publish_ports[name])&.map { _1.join ':' }
47
51
  end
48
52
 
49
- compose.delete_if { _2.nil? || _2.empty? }
53
+ prune = ->(o) {
54
+ o.each { prune[_2] } if o.is_a? Hash
55
+ o.delete_if { _2.nil? || (_2.respond_to?(:empty?) && _2.empty?) } if o.is_a? Hash
56
+ }
57
+ prune[compose]
50
58
  stringify(compose).to_yaml
51
59
  end
52
60
 
@@ -67,6 +75,10 @@ module Dry
67
75
  ServiceFunction.new(@services[name], &) if block_given?
68
76
  end
69
77
 
78
+ def Ingress(services)
79
+ @ingress.merge! services
80
+ end
81
+
70
82
  def Network(name, opts = {})
71
83
  @networks[name] ||= {}
72
84
  @networks[name].merge! opts
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
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.4
4
+ version: 0.0.5
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-10-31 00:00:00.000000000 Z
11
+ date: 2022-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -104,6 +104,7 @@ files:
104
104
  - bin/dry-stack
105
105
  - bin/stack.drs
106
106
  - bin/stack1.drs
107
+ - bin/stack2.drs
107
108
  - lib/dry-stack.rb
108
109
  - lib/dry-stack/command_compose.rb
109
110
  - lib/dry-stack/command_line.rb