Sha256: 981d0bd16cb174ecea525ecc9ac77b6461a0cef6db163b832932112f8239ba32

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

module Awsrm
  class AutoscallingGroup < Awsrm::Resource
    FILTER_MAP = {
      name: ->(value) { [value] },
      tags: ->(value) { AutoscallingGroup.tags2names(value) }
    }.freeze
    class << self
      def one(params)
        res = autoscaling_client.describe_auto_scaling_groups(
          auto_scaling_group_names: filters(params)
        )
        AutoscallingGroupReader.new(res.auto_scaling_groups.first) if check_one(res.auto_scaling_groups)
      end

      def all(params)
        res = autoscaling_client.describe_auto_scaling_groups(
          auto_scaling_group_names: filters(params)
        )
        res.auto_scaling_groups.map do |as|
          AutoscallingGroupReader.new(as)
        end
      end

      def filters(params)
        params.map do |key, value|
          raise UndefinedFilterParamError, key unless self::FILTER_MAP.key?(key)
          next self::FILTER_MAP[key].call(value) if self::FILTER_MAP[key].is_a?(Proc)
        end.flatten.uniq
      end

      def tags2names(tag_hash)
        tags = autoscaling_client.describe_tags.tags.flatten
        maps = tag_hash.map do |key, value|
          tags.map do |tag|
            tag.resource_id if tag.key == key.to_s && tag.value == value.to_s
          end.compact
        end
        maps.reduce do |memo, item|
          memo & item
        end
      end
    end

    class AutoscallingGroupReader < Awsrm::ResourceReader
      def id
        @resource.auto_scaling_group_name
      end

      def arn
        @resource.auto_scaling_group_arn
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
awsrm-0.0.1 lib/awsrm/autoscaling_group.rb