class Chef::Knife::Ec2EniList

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/ec2_eip_list.rb, line 29
def run
  validate_aws_config!
  custom_warnings!

  eni_list = [
    ui.color("ID", :bold),
    ui.color("Status", :bold),
    ui.color("AZ", :bold),
    ui.color("Public IP", :bold),
    ui.color("Private IPs", :bold),
    ui.color("IPv6 IPs", :bold),
    ui.color("Subnet ID", :bold),
    ui.color("VPC ID", :bold),
  ].flatten.compact

  output_column_count = eni_list.length

  if config[:format] == "summary"
    eni_hash.each_pair do |_k, v|
      eni_list << v["network_interface_id"]
      eni_list << v["status"]
      eni_list << v["availability_zone"]
      eni_list << v["public_ip"].to_s # to_s since it might be nil
      eni_list << v["private_ips"].join(",")
      eni_list << v["ipv_6_addresses"].join(",")
      eni_list << v["subnet_id"]
      eni_list << v["vpc_id"]
    end
    puts ui.list(eni_list, :uneven_columns_across, output_column_count)
  else
    output(format_for_display(eni_hash))
  end
end

Private Instance Methods

eni_hash() click to toggle source

build a hash of ENI we care about @return [Hash]

# File lib/chef/knife/ec2_eip_list.rb, line 67
def eni_hash
  all_data = {}
  ec2_connection.describe_network_interfaces.first.network_interfaces.each do |eni|
    eni_data = {}
    %w{network_interface_id status mac_address availability_zone subnet_id vpc_id ipv_6_addresses}.each do |id|
      eni_data[id] = eni.send(id)
    end

    # parse out the 1+ private IPs from the associations in the
    # Aws::EC2::Types::NetworkInterfacePrivateIpAddress struct
    eni_data["private_ips"] = eni.private_ip_addresses.map { |a| a["private_ip_address"] }

    # grab the 1 public ip from the Aws::EC2::Types::NetworkInterfaceAssociation struct if it exists
    eni_data["public_ip"] = ( eni.association.nil? ? nil : eni.association["public_ip"] )

    all_data[eni_data["network_interface_id"]] = eni_data
  end
  all_data
end