Sha256: 99f81ae881023d2831e1c6b585a6ef4a253014e61b87fc0854eb8570ed378e4e

Contents?: true

Size: 1.94 KB

Versions: 6

Compression:

Stored size: 1.94 KB

Contents

require 'yaml'
require_relative '../../../util'

module Kontena::Cli::Stacks
  module YAML
    class ServiceExtender
      include Kontena::Util
      attr_reader :service_config

      # @param [Hash] service_config
      def initialize(service_config)
        @service_config = service_config
      end

      # @param [Hash] from
      # @return [Hash]
      def extend_from(from)
        service_config['environment'] = extend_env_vars(
          from['environment'],
          service_config['environment']
        )
        service_config['secrets'] = extend_secrets(
          from['secrets'],
          service_config['secrets']
        )
        build_args = extend_build_args(safe_dig(from, 'build', 'args'), safe_dig(service_config, 'build', 'args'))
        unless build_args.empty?
          service_config['build'] = {} unless service_config['build']
          service_config['build']['args'] = build_args
        end

        from.merge(service_config)
      end

      private

      # @param [Array] from
      # @param [Array] to
      # @return [Array]
      def extend_env_vars(from, to)
        env_vars = to || []
        if from
          from.each do |env|
            env_vars << env unless to && to.find do |key|
              key.split('=').first == env.split('=').first
            end
          end
        end
        env_vars
      end

      # @param [Array] from
      # @param [Array] to
      # @return [Array]
      def extend_secrets(from, to)
        secrets = to || []
        if from
          from.each do |from_secret|
            secrets << from_secret unless to && to.any? do |to_secret|
              to_secret['secret'] == from_secret['secret']
            end
          end
        end
        secrets
      end

      def extend_build_args(from, to)
        args = to || {}
        if from
          from.each do |k,v|
            args[k] = v unless args.has_key?(k)
          end
        end
        args
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kontena-cli-1.0.0.pre1 lib/kontena/cli/stacks/yaml/service_extender.rb
kontena-cli-0.17.0.pre5 lib/kontena/cli/stacks/yaml/service_extender.rb
kontena-cli-0.17.0.pre4 lib/kontena/cli/stacks/yaml/service_extender.rb
kontena-cli-0.17.0.pre3 lib/kontena/cli/stacks/yaml/service_extender.rb
kontena-cli-0.17.0.pre2 lib/kontena/cli/stacks/yaml/service_extender.rb
kontena-cli-0.17.0.pre1 lib/kontena/cli/stacks/yaml/service_extender.rb