internal/util/ec2.go (36 lines of code) (raw):

package util import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/service/ec2" "github.com/aws/aws-sdk-go-v2/service/ec2/types" ) type EniInfo struct { EniCount int32 PodsPerEniCount int32 } type EC2API interface { DescribeInstanceTypes(ctx context.Context, params *ec2.DescribeInstanceTypesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeInstanceTypesOutput, error) } type EC2Client struct { Client *ec2.Client } func (c *EC2Client) DescribeInstanceTypes(ctx context.Context, params *ec2.DescribeInstanceTypesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeInstanceTypesOutput, error) { return c.Client.DescribeInstanceTypes(ctx, params, optFns...) } func GetEniInfoForInstanceType(ec2API EC2API, instanceType string) (EniInfo, error) { describeResp, err := ec2API.DescribeInstanceTypes(context.Background(), &ec2.DescribeInstanceTypesInput{ InstanceTypes: []types.InstanceType{types.InstanceType(instanceType)}, }) if err != nil { return EniInfo{}, fmt.Errorf("error describing instance type %s: %w", instanceType, err) } if len(describeResp.InstanceTypes) > 0 { instanceTypeInfo := describeResp.InstanceTypes[0] return EniInfo{ EniCount: *instanceTypeInfo.NetworkInfo.MaximumNetworkInterfaces, PodsPerEniCount: *instanceTypeInfo.NetworkInfo.Ipv4AddressesPerInterface, }, nil } return EniInfo{}, fmt.Errorf("no instance found for type: %s", instanceType) }