dry-stack 0.0.7 → 0.0.8
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 +4 -4
- data/lib/dry-stack/command_compose.rb +2 -2
- data/lib/dry-stack/command_line.rb +6 -4
- data/lib/dry-stack/stack.rb +28 -7
- data/lib/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7966c8d4d90e8f6c2b7b9f011d59392c043e8349bdfaf32af64533d0ac8363e3
         | 
| 4 | 
            +
              data.tar.gz: c20e78cc4176fecbe03803089933b8cbb6ce5424e66156c7db0a24ab14ae27d8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 65c0854dcde519ad3fbb577c9a5098e92c436a349bab23af6a79fc0db28957391879feed79eacdd13f0e410ff54bfa34754ed8279a7d429ab2d1b280c5645b1e
         | 
| 7 | 
            +
              data.tar.gz: 695bfe12d7747d476500a6f927d99ff3bc6d1a86d18e5eb44aec532eb4f9ca1811d0d7a563b9d93492b335e5b7014ff1549a67c2981a8d7d427e8f03d063987e
         | 
| @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            require_relative 'command_line'
         | 
| 2 2 |  | 
| 3 3 | 
             
            Dry::CommandLine::COMMANDS[:to_compose] = Class.new do
         | 
| 4 | 
            -
              def run(stack, params | 
| 5 | 
            -
                yaml = stack.to_compose.lines[1..].join
         | 
| 4 | 
            +
              def run(stack, params)
         | 
| 5 | 
            +
                yaml = stack.to_compose(params).lines[1..].join
         | 
| 6 6 |  | 
| 7 7 | 
             
                # substitute ENV variables
         | 
| 8 8 | 
             
                params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml}\"")
         | 
| @@ -38,6 +38,8 @@ module Dry | |
| 38 38 | 
             
                      #  in all caps are required
         | 
| 39 39 | 
             
                      o.on('-s', '--stack STACK_NAME', 'Stack file')
         | 
| 40 40 | 
             
                      o.on('-e', '--env', 'Load .env file') { load_env }
         | 
| 41 | 
            +
                      o.on('',   '--ingress', 'Generate ingress labels') { true }
         | 
| 42 | 
            +
                      o.on('',   '--traefik', 'Generate traefik labels') { true }
         | 
| 41 43 | 
             
                      o.on('-n', '--no-env', 'Do not process env variables') { true }
         | 
| 42 44 | 
             
                      o.on('-h', '--help') { puts o; exit }
         | 
| 43 45 | 
             
                      o.parse! args, into: params
         | 
| @@ -49,10 +51,10 @@ module Dry | |
| 49 51 |  | 
| 50 52 | 
             
                      stack_text = $stdin.tty? ? File.read(params[:stack]) : STDIN.read
         | 
| 51 53 | 
             
                      Dry::Stack() { eval stack_text }
         | 
| 52 | 
            -
                      COMMANDS[command.to_sym].run Stack.last_stack, params | 
| 53 | 
            -
                    rescue => e
         | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 54 | 
            +
                      COMMANDS[command.to_sym].run Stack.last_stack, params
         | 
| 55 | 
            +
                    # rescue => e
         | 
| 56 | 
            +
                    #   puts e.message
         | 
| 57 | 
            +
                    #   exit 1
         | 
| 56 58 | 
             
                    end
         | 
| 57 59 | 
             
                  end
         | 
| 58 60 | 
             
                end
         | 
    
        data/lib/dry-stack/stack.rb
    CHANGED
    
    | @@ -27,7 +27,7 @@ module Dry | |
| 27 27 | 
             
                end
         | 
| 28 28 |  | 
| 29 29 | 
             
                def initialize(name)
         | 
| 30 | 
            -
                  @name = name
         | 
| 30 | 
            +
                  @name = name || 'stack'
         | 
| 31 31 | 
             
                  @services = {}
         | 
| 32 32 | 
             
                  @networks = {}
         | 
| 33 33 | 
             
                  @publish_ports = {}
         | 
| @@ -36,11 +36,17 @@ module Dry | |
| 36 36 |  | 
| 37 37 | 
             
                def stringify(hash) = hash.to_h { |k, v| [k.to_s, v.is_a?(Hash) ? stringify(v) : v] }
         | 
| 38 38 |  | 
| 39 | 
            -
                def  | 
| 40 | 
            -
                   | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 39 | 
            +
                def nginx_host2regexp(str)
         | 
| 40 | 
            +
                  str.to_s.gsub('.', '\.').gsub('*', '.*')
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                def to_compose(opts = {})
         | 
| 44 | 
            +
                  compose = {
         | 
| 45 | 
            +
                    name: @name.to_s, # https://docs.docker.com/compose/compose-file/#configs-top-level-element
         | 
| 46 | 
            +
                    services: YAML.load(@services.to_yaml),
         | 
| 47 | 
            +
                    networks: YAML.load(@networks.to_yaml),
         | 
| 43 48 | 
             
                  }
         | 
| 49 | 
            +
             | 
| 44 50 | 
             
                  if @ingress.any?
         | 
| 45 51 | 
             
                    compose[:networks].merge! ingress_routing: {external: true, name: 'ingress-routing'}
         | 
| 46 52 | 
             
                  end
         | 
| @@ -48,13 +54,28 @@ module Dry | |
| 48 54 | 
             
                  compose[:services].each do |name, service|
         | 
| 49 55 | 
             
                    @ingress[name][:port] ||= service[:ports]&.first if @ingress[name]
         | 
| 50 56 | 
             
                    service[:deploy] ||= {}
         | 
| 51 | 
            -
                    service[:deploy][:labels]  | 
| 52 | 
            -
             | 
| 57 | 
            +
                    service[:deploy][:labels] ||= []
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    if @ingress[name] && (opts[:ingress] || opts[:traefik])
         | 
| 53 60 | 
             
                      service[:networks] ||= []
         | 
| 54 61 | 
             
                      service[:networks] << 'default' if service[:networks].empty?
         | 
| 55 62 | 
             
                      service[:networks] << 'ingress_routing'
         | 
| 56 63 | 
             
                    end
         | 
| 57 64 |  | 
| 65 | 
            +
                    if @ingress[name] && opts[:ingress]
         | 
| 66 | 
            +
                      service[:deploy][:labels] = @ingress[name]&.map { |k, v| "ingress.#{k}=#{v}" }
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    if @ingress[name] && opts[:traefik]
         | 
| 70 | 
            +
                      service_name = "#{@name}_#{name}"
         | 
| 71 | 
            +
                      service[:deploy][:labels] += [
         | 
| 72 | 
            +
                        'traefik.enable=true',
         | 
| 73 | 
            +
                        "traefik.http.routers.nginx.service=#{service_name}",
         | 
| 74 | 
            +
                        "traefik.http.services.#{service_name}.loadbalancer.server.port=#{@ingress[name][:port]}",
         | 
| 75 | 
            +
                        "traefik.http.routers.nginx.rule=HostRegexp(`{name:#{nginx_host2regexp @ingress[name][:host]}}`)"
         | 
| 76 | 
            +
                      ]
         | 
| 77 | 
            +
                    end
         | 
| 78 | 
            +
             | 
| 58 79 | 
             
                    service[:ports] = @publish_ports[name]&.zip(service[:ports] || @publish_ports[name])&.map { _1.join ':' }
         | 
| 59 80 | 
             
                  end
         | 
| 60 81 |  | 
    
        data/lib/version.rb
    CHANGED
    
    
    
        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 | 
            +
              version: 0.0.8
         | 
| 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-11- | 
| 11 | 
            +
            date: 2022-11-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         |