class Awspec::Type::EksNodegroup

Constants

EKS_CLUSTER_TAG

the tags below are standard for EKS node groups instances

EKS_NODEGROUP_TAG
STATES

Attributes

cluster[RW]

Public Class Methods

new(group_name) click to toggle source
Calls superclass method
# File lib/awspec/type/eks_nodegroup.rb, line 41
def initialize(group_name)
  super
  @group_name = group_name
  @ec2_instances = []
  @sec_groups = Set.new
  @sec_groups_ids = Set.new
end

Public Instance Methods

has_security_group?(sec_group) click to toggle source
# File lib/awspec/type/eks_nodegroup.rb, line 66
def has_security_group?(sec_group)
  if @sec_groups.empty? || @sec_groups_ids.empty?
    ec2_instances = find_nodes

    ec2_instances.each do |ec2|
      ec2.sec_groups.each do |sg|
        @sec_groups.add(sg.name)
        @sec_groups_ids.add(sg.id)
      end
    end
  end

  @sec_groups.member?(sec_group) || @sec_groups_ids.member?(sec_group)
end
id() click to toggle source
# File lib/awspec/type/eks_nodegroup.rb, line 53
def id
  @id ||= resource_via_client.nodegroup_arn if resource_via_client
end
ready?() click to toggle source
# File lib/awspec/type/eks_nodegroup.rb, line 81
def ready?
  min_expected = resource_via_client.scaling_config.min_size
  ec2_instances = find_nodes
  running_counter = 0

  ec2_instances.each do |ec2|
    running_counter += 1 if ec2.state.eql?('running')
    break if running_counter == min_expected
  end

  running_counter >= min_expected
end
resource_via_client() click to toggle source
# File lib/awspec/type/eks_nodegroup.rb, line 49
def resource_via_client
  @resource_via_client ||= find_eks_nodegroup(cluster, @group_name)
end
subnets() click to toggle source
# File lib/awspec/type/eks_nodegroup.rb, line 61
def subnets
  ec2_instances = find_nodes
  Set.new(ec2_instances.map { |ec2| ec2.subnet_id })
end

Private Instance Methods

find_nodes() click to toggle source
# File lib/awspec/type/eks_nodegroup.rb, line 104
def find_nodes
  return @ec2_instances unless @ec2_instances.empty?

  result = ec2_client.describe_instances(
    {
      filters: [
        { name: EKS_CLUSTER_TAG, values: [cluster] },
        { name: EKS_NODEGROUP_TAG, values: [@group_name] }
      ]
    }
  )
  result.reservations.each do |reservation|
    reservation.instances.each do |instance|
      sec_groups = []

      instance.security_groups.map do |sg|
        sec_groups.push(EksNodeSecGroup.new(sg.group_id, sg.group_name))
      end

      @ec2_instances.push(
        EksNodeEC2.new(
          instance.instance_id,
          instance.state.name,
          instance.subnet_id,
          sec_groups
        )
      )
    end
  end

  @ec2_instances
end