dry-stack 0.0.3 → 0.0.5

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: 25076e926da29d61b22b6be14379e4e9e23af5bf1146c2c5d0ef64f917023a24
4
- data.tar.gz: 023ed0ce2c46e14303f1fefdba6811e2401a7c9ac08f4bb44e288cce30943dae
3
+ metadata.gz: b6b0981566e92e24a2da8878f387d0db385cf91c330bdbdf85cafd99f2c57561
4
+ data.tar.gz: f1a39d9413754ebe20c0249f9e7ea2c344c136387c0211ab9aa98c7fc37b4a24
5
5
  SHA512:
6
- metadata.gz: 4fc1f361dbde144d87b4a3c0d90b859940f0fca6d3f84c02fd28bf9a4849fb373e1bb8f8a3bc2d0665c22106ba642481e1b8c85adc71199e719c99b95249e8f2
7
- data.tar.gz: bc466a6b44eeab9f10a9596316f2b4563c63d42b8632e81f4cc90af87d1ba0117ea4d5079c8554f5c8d8ba3da44013ec1160a0a9560f9cbcf92e53960e06eea9
6
+ metadata.gz: b81863c9ebe1e517bdb3e3060e80673ea0ea870c307519c44ef0464bdd04f9aef5a0a18945973bc6d4fd97cb4dfe79822fa3d0511500366bcf05f7e360dbcad1
7
+ data.tar.gz: 3de0c4bd30868e4c82763d642e4b3904915ce3351dea066ae95b2933ee624aeded11bc4792afac46e8e6369797625c83ad15cf7be5d2bbcb9d1b8f20fb38b5ae
data/bin/stack.drs CHANGED
@@ -1,19 +1,16 @@
1
- Stack :simple_stack do
1
+ HttpFront services: {admin: 'admin.*', operator: 'operator.*', reports: 'reports.*',
2
+ navigator: 'navigator.*', backend: 'admin.*, operator.*, navigator.*'}
2
3
 
3
- HttpFront services: {admin: 'admin.*', operator: 'operator.*', reports: 'reports.*',
4
- navigator: 'navigator.*', backend: 'admin.*, operator.*, navigator.*'}
4
+ PublishPorts admin: 4000, operator: 4001, navigator: 4002, reports: 7000 # mode: ingress, protocol: tcp
5
5
 
6
- PublishPorts admin: 4000, operator: 4001, navigator: 4002, reports: 7000 # mode: ingress, protocol: tcp
6
+ Service :admin, image: 'frontend', env: {APP: 'admin'}, ports: 5000
7
+ Service :operator, image: 'frontend', env: {APP: 'operator'}, ports: 5000
8
+ Service :navigator, image: 'frontend', env: {APP: 'navigator'}, ports: 5000
7
9
 
8
- Service :admin, image: 'frontend', env: {APP: 'admin'}, ports: 5000
9
- Service :operator, image: 'frontend', env: {APP: 'operator'}, ports: 5000
10
- Service :navigator, image: 'frontend', env: {APP: 'navigator'}, ports: 5000
11
-
12
- Service :backend, image: 'backend', ports: 3000 do
13
- env APP_PORT: 3000, NODE_ENV: 'development', SKIP_GZ: true, DB_URL: '$DB_URL'
14
- end
10
+ Service :backend, image: 'backend', ports: 3000 do
11
+ env APP_PORT: 3000, NODE_ENV: 'development', SKIP_GZ: true, DB_URL: '$DB_URL'
12
+ end
15
13
 
16
- Service :reports, image: 'reports:0.1', env: {DB_URL: '$DB_URL'}, ports: 7000
14
+ Service :reports, image: 'reports:0.1', env: {DB_URL: '$DB_URL'}, ports: 7000
17
15
 
18
- Network :default, attachable: true
19
- end
16
+ Network :default, attachable: true
data/bin/stack1.drs ADDED
@@ -0,0 +1 @@
1
+ Service :reports, image: 'reports', ports: 7000, env: {DB_URL: '$DB_URL'}
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'
@@ -47,7 +47,8 @@ module Dry
47
47
  command = args.shift || ''
48
48
  raise "Unknown command: #{command}" unless COMMANDS.key?(command.to_sym)
49
49
 
50
- eval $stdin.tty? ? File.read(params[:stack]) : STDIN.read
50
+ stack_text = $stdin.tty? ? File.read(params[:stack]) : STDIN.read
51
+ Dry::Stack() { eval stack_text }
51
52
  COMMANDS[command.to_sym].run Stack.last_stack, params, args
52
53
  rescue => e
53
54
  puts e.message
@@ -4,7 +4,7 @@ require 'optparse'
4
4
 
5
5
  module Dry
6
6
 
7
- def Stack(name, &)
7
+ def Stack(name = nil, &)
8
8
  Stack.last_stack = Stack.new name
9
9
  Stack.last_stack.instance_exec(&) if block_given?
10
10
  end
@@ -12,6 +12,8 @@ module Dry
12
12
  class ServiceFunction
13
13
  def initialize(service, &); @service = service; instance_exec(&) end
14
14
  def env(variables)= @service[:environment].merge! variables
15
+ def image(name)= @service[:image] = name
16
+ def ports(ports)= ((@service[:ports] ||= []) << ports).flatten!
15
17
  end
16
18
 
17
19
  class Stack
@@ -19,11 +21,17 @@ module Dry
19
21
  attr_accessor :last_stack
20
22
  end
21
23
 
24
+ def Stack(name = nil, &)
25
+ Stack.last_stack = Stack.new name
26
+ Stack.last_stack.instance_exec(&) if block_given?
27
+ end
28
+
22
29
  def initialize(name)
23
30
  @name = name
24
31
  @services = {}
25
32
  @networks = {}
26
33
  @publish_ports = {}
34
+ @ingress = {}
27
35
  end
28
36
 
29
37
  def stringify(hash) = hash.to_h { |k, v| [k.to_s, v.is_a?(Hash) ? stringify(v) : v] }
@@ -35,11 +43,18 @@ module Dry
35
43
  }
36
44
 
37
45
  compose[:services].each do |name, service|
38
- service[:ports] = @publish_ports[name]&.zip(service[:ports])&.map { _1.join ':' }
39
- 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 ':' }
40
51
  end
41
52
 
42
- 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]
43
58
  stringify(compose).to_yaml
44
59
  end
45
60
 
@@ -60,6 +75,10 @@ module Dry
60
75
  ServiceFunction.new(@services[name], &) if block_given?
61
76
  end
62
77
 
78
+ def Ingress(services)
79
+ @ingress.merge! services
80
+ end
81
+
63
82
  def Network(name, opts = {})
64
83
  @networks[name] ||= {}
65
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.3'
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.3
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-29 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
@@ -103,6 +103,8 @@ extra_rdoc_files: []
103
103
  files:
104
104
  - bin/dry-stack
105
105
  - bin/stack.drs
106
+ - bin/stack1.drs
107
+ - bin/stack2.drs
106
108
  - lib/dry-stack.rb
107
109
  - lib/dry-stack/command_compose.rb
108
110
  - lib/dry-stack/command_line.rb