func()

in pkg/cni/conf/confmanager.go [77:119]


func (mgr *Manager) Start(ctx context.Context) error {
	log := logger.GetLogger()
	defer func() {
		log.Info("Stopping cni configuration directory monitoring")
		if err := mgr.cniConfWatcher.Close(); err != nil {
			log.Error(err, "failed to close watcher")
		}
	}()

	log.Info("Installing cni configuration")
	if err := mgr.insertCNIPluginConf(); err != nil {
		if errors.Is(err, ErrMainCNINotFound) {
			log.Info("Main CNI config file is missing, continue to watch changes")
		} else {
			return err
		}
	}

	log.Info("Start to watch cni configuration changes", "conf directory", mgr.cniConfDir)
	for {
		select {
		case event := <-mgr.cniConfWatcher.Events:
			if strings.Contains(event.Name, mgr.cniConfFile) {
				// ignore our cni conf file change itself to avoid loop
				log.Info("Detected changes in cni configuration file, ignoring...", "change event", event)
				continue
			}
			log.Info("Detected changes in cni configuration directory, regenerating...", "change event", event)
			if err := mgr.insertCNIPluginConf(); err != nil {
				log.Error(err, "failed to regenerate cni conf")
			}
		case err := <-mgr.cniConfWatcher.Errors:
			if err != nil {
				log.Error(err, "failed to watch cni configuration directory changes")
			}
		case <-ctx.Done():
			if err := mgr.removeCNIPluginConf(); err != nil {
				log.Error(err, "failed to remove cni configuration file on exit")
			}
			return nil
		}
	}
}