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
}
}
}