in pkg/ipamd/ipamd.go [350:405]
func New(k8sClient client.Client, withApiServer bool) (*IPAMContext, error) {
prometheusRegister()
c := &IPAMContext{}
c.k8sClient = k8sClient
c.networkClient = networkutils.New()
c.useCustomNetworking = UseCustomNetworkCfg()
c.manageENIsNonScheduleable = ManageENIsOnNonSchedulableNode()
c.useSubnetDiscovery = UseSubnetDiscovery()
c.enablePrefixDelegation = usePrefixDelegation()
c.enableIPv4 = isIPv4Enabled()
c.enableIPv6 = isIPv6Enabled()
c.disableENIProvisioning = disableENIProvisioning()
client, err := awsutils.New(c.useSubnetDiscovery, c.useCustomNetworking, disableLeakedENICleanup(), c.enableIPv4, c.enableIPv6)
if err != nil {
return nil, errors.Wrap(err, "ipamd: can not initialize with AWS SDK interface")
}
c.awsClient = client
c.primaryIP = make(map[string]string)
c.reconcileCooldownCache.cache = make(map[string]time.Time)
// WARM and Min IP/Prefix targets are ignored in IPv6 mode
c.warmENITarget = getWarmENITarget()
c.warmIPTarget = getWarmIPTarget()
c.minimumIPTarget = getMinimumIPTarget()
c.warmPrefixTarget = getWarmPrefixTarget()
c.enablePodENI = EnablePodENI()
c.enableManageUntaggedMode = enableManageUntaggedMode()
c.enablePodIPAnnotation = EnablePodIPAnnotation()
c.numNetworkCards = len(c.awsClient.GetNetworkCards())
c.networkPolicyMode, err = getNetworkPolicyMode()
if err != nil {
return nil, err
}
err = c.awsClient.FetchInstanceTypeLimits()
if err != nil {
log.Errorf("Failed to get ENI limits from file:vpc_ip_limits or EC2 for %s", c.awsClient.GetInstanceType())
return nil, err
}
// Validate if the configured combination of env variables is supported before proceeding further
if !c.isConfigValid() {
return nil, fmt.Errorf("ipamd: failed to validate configuration")
}
c.awsClient.InitCachedPrefixDelegation(c.enablePrefixDelegation)
c.myNodeName = os.Getenv(envNodeName)
checkpointer := datastore.NewJSONFile(dsBackingStorePath())
c.dataStore = datastore.NewDataStore(log, checkpointer, c.enablePrefixDelegation)
c.withApiServer = withApiServer
if err := c.nodeInit(); err != nil {
return nil, err
}
return c, nil
}