func()

in pkg/provider/ip/eni/eni.go [70:117]


func (e *eniManager) InitResources(ec2APIHelper api.EC2APIHelper) (*IPv4Resource, error) {
	e.lock.Lock()
	defer e.lock.Unlock()

	nwInterfaces, err := ec2APIHelper.GetInstanceNetworkInterface(aws.String(e.instance.InstanceID()))
	if err != nil {
		return nil, err
	}

	limits, found := vpc.Limits[e.instance.Type()]
	if !found {
		return nil, fmt.Errorf("unsupported instance type, error: %w", utils.ErrNotFound)
	}

	ipLimit := limits.IPv4PerInterface
	var availIPs []string
	var availPrefixes []string
	for _, nwInterface := range nwInterfaces {
		if nwInterface.PrivateIpAddresses != nil {
			eni := &eni{
				remainingCapacity: ipLimit,
				eniID:             *nwInterface.NetworkInterfaceId,
			}
			// loop through assigned IPv4 addresses and store into map
			for _, ip := range nwInterface.PrivateIpAddresses {
				if *ip.Primary != true {
					availIPs = append(availIPs, *ip.PrivateIpAddress)
					e.resourceToENIMap[*ip.PrivateIpAddress] = eni
				}
				eni.remainingCapacity--
			}
			// loop through assigned IPv4 prefixes and store into map
			if nwInterface.Ipv4Prefixes != nil {
				for _, prefix := range nwInterface.Ipv4Prefixes {
					availPrefixes = append(availPrefixes, *prefix.Ipv4Prefix)
					e.resourceToENIMap[*prefix.Ipv4Prefix] = eni
					eni.remainingCapacity--
				}
			}
			e.attachedENIs = append(e.attachedENIs, eni)
		}
	}
	ipV4Resource := IPv4Resource{
		PrivateIPv4Addresses: e.addSubnetMaskToIPSlice(availIPs),
		IPv4Prefixes:         availPrefixes,
	}
	return &ipV4Resource, nil
}