Sha256: 447109acfe43c5d5f5579e51ab5079ddf6700d664a297f3752822ad247d41bb1

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true
module Hako
  module Schedulers
    class EcsDefinitionComparator
      def initialize(expected_container)
        @expected_container = expected_container
      end

      CONTAINER_KEYS = %i[image cpu memory links docker_labels].freeze
      PORT_MAPPING_KEYS = %i[container_port host_port protocol].freeze
      ENVIRONMENT_KEYS = %i[name value].freeze
      MOUNT_POINT_KEYS = %i[source_volume container_path read_only].freeze

      def different?(actual_container)
        unless actual_container
          return true
        end
        if different_members?(@expected_container, actual_container, CONTAINER_KEYS)
          return true
        end
        if @expected_container[:port_mappings].size != actual_container.port_mappings.size
          return true
        end
        @expected_container[:port_mappings].zip(actual_container.port_mappings) do |e, a|
          if different_members?(e, a, PORT_MAPPING_KEYS)
            return true
          end
        end
        if @expected_container[:environment].size != actual_container.environment.size
          return true
        end
        @expected_container[:environment].zip(actual_container.environment) do |e, a|
          if different_members?(e, a, ENVIRONMENT_KEYS)
            return true
          end
        end

        if @expected_container[:mount_points].size != actual_container.mount_points.size
          return true
        end
        @expected_container[:mount_points].zip(actual_container.mount_points) do |e, a|
          if different_members?(e, a, MOUNT_POINT_KEYS)
            return true
          end
        end

        false
      end

      private

      def different_members?(expected, actual, keys)
        keys.each do |key|
          if actual.public_send(key) != expected[key]
            return true
          end
        end
        false
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hako-0.11.1 lib/hako/schedulers/ecs_definition_comparator.rb