func _main()

in cmd/aws-k8s-agent/main.go [92:165]


func _main() int {
	// Do not add anything before initializing logger
	log := logger.Get()

	log.Infof("Starting L-IPAMD %s  ...", version.Version)
	version.RegisterMetric()

	enabledPodEni := ipamd.EnablePodENI()
	enabledCustomNetwork := ipamd.UseCustomNetworkCfg()
	enabledPodAnnotation := ipamd.EnablePodIPAnnotation()
	withApiServer := false
	// Check API Server Connectivity
	if enabledPodEni || enabledCustomNetwork || enabledPodAnnotation {
		log.Info("SGP, custom networking or pod annotation feature is in use, waiting for API server connectivity to start IPAMD")
		if err := k8sapi.CheckAPIServerConnectivity(); err != nil {
			log.Errorf("Failed to check API server connectivity: %s", err)
			return 1
		} else {
			log.Info("API server connectivity established.")
			withApiServer = true
		}
	} else {
		log.Infof("Waiting to connect API server for upto %s...", pollTimeout)
		// Try a quick check first
		if err := k8sapi.CheckAPIServerConnectivityWithTimeout(pollInterval, pollTimeout); err != nil {
			log.Warn("Proceeding without API server connectivity, will run background API server connectivity check")
			withApiServer = false
		} else {
			log.Info("API server connectivity established.")
			withApiServer = true
		}
	}
	// Create Kubernetes client for API server requests
	k8sClient, err := k8sapi.CreateKubeClient(appName)
	if err != nil {
		log.Errorf("Failed to create kube client: %s", err)
	}
	// Create EventRecorder for use by IPAMD
	if err := eventrecorder.Init(k8sClient, withApiServer); err != nil {
		log.Errorf("Failed to create event recorder: %s", err)
		log.Warn("Skipping event recorder initialization")
	}
	ipamContext, err := ipamd.New(k8sClient, withApiServer)
	if err != nil {
		log.Errorf("Initialization failure: %v", err)
		return 1
	}

	// If not connected to API server yet, start background checks
	if !withApiServer {
		startBackgroundAPIServerCheck(ipamContext)
	}

	// Pool manager
	go ipamContext.StartNodeIPPoolManager()

	if !utils.GetBoolAsStringEnvVar(envDisableMetrics, false) {
		// Prometheus metrics
		go metrics.ServeMetrics(metricsPort)
	}

	// CNI introspection endpoints
	if !utils.GetBoolAsStringEnvVar(envDisableIntrospection, false) {
		go ipamContext.ServeIntrospection()
	}

	// Start the RPC listener
	err = ipamContext.RunRPCHandler(version.Version)
	if err != nil {
		log.Errorf("Failed to set up gRPC handler: %v", err)
		return 1
	}
	return 0
}