dry-stack 0.0.4 → 0.0.6

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: aceddb469a65daa05b5a996bc35bddc70337406c3b1c365288fd7fd5c355a3b8
4
+ data.tar.gz: 513f1e22fabba232a95d5084e936d9a488514f1c14181568b6b29a223132519c
5
5
  SHA512:
6
- metadata.gz: 8b0cb4055dfc95cbd774ddacf53a4d7d3a3d8225e92c1aa97d7b317279db51f085ce700872c6bc34ab4b857c1102b4f3090460213ccbeb6fe85768d27b687fa0
7
- data.tar.gz: cb635df42bf89ad2e08b33d2704348ac0091c087b36ec458d3f5aa0ceb5eda462339ee8b68fc7a17fde4464b1360b5f7ef94f1076d0531d041ff27e8557fd1e0
6
+ metadata.gz: 540953d9faed9eb9e31b8fddd6a227caeee5fe5381b2ecf7832817aeb9505313f4cbb0d77bb67627131cef6b15c2912e8af0e803a5fc65998b57d917f34037b0
7
+ data.tar.gz: 6f0cb5b9c706ef4f41a4af49d6bac8ca58e97c27ee163e33bf170c9dbbe34b59afb82bb11f7ca0da3f9aeb41ef7d38de91da15badfd46891be7affb042b9ba7c
data/bin/stack2.drs ADDED
@@ -0,0 +1,7 @@
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
@@ -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] }
@@ -40,13 +41,27 @@ module Dry
40
41
  services: YAML.load(@services.to_yaml),
41
42
  networks: YAML.load(@networks.to_yaml),
42
43
  }
44
+ if @ingress.any?
45
+ compose[:networks].merge! ingress_routing: {external: true, name: 'ingress-routing'}
46
+ end
43
47
 
44
48
  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? }
49
+ @ingress[name][:port] ||= service[:ports]&.first if @ingress[name]
50
+ service[:deploy] ||= {}
51
+ service[:deploy][:labels] = @ingress[name]&.map { |k, v| "ingress.#{k}=#{v}" }
52
+ if @ingress[name]
53
+ service[:networks] ||= []
54
+ service[:networks] << 'ingress_routing'
55
+ end
56
+
57
+ service[:ports] = @publish_ports[name]&.zip(service[:ports] || @publish_ports[name])&.map { _1.join ':' }
47
58
  end
48
59
 
49
- compose.delete_if { _2.nil? || _2.empty? }
60
+ prune = ->(o) {
61
+ o.each { prune[_2] } if o.is_a? Hash
62
+ o.delete_if { _2.nil? || (_2.respond_to?(:empty?) && _2.empty?) } if o.is_a? Hash
63
+ }
64
+ prune[compose]
50
65
  stringify(compose).to_yaml
51
66
  end
52
67
 
@@ -67,6 +82,10 @@ module Dry
67
82
  ServiceFunction.new(@services[name], &) if block_given?
68
83
  end
69
84
 
85
+ def Ingress(services)
86
+ @ingress.merge! services
87
+ end
88
+
70
89
  def Network(name, opts = {})
71
90
  @networks[name] ||= {}
72
91
  @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.6'
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.6
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