diff --git a/pkg/adaptation/adaptation.go b/pkg/adaptation/adaptation.go index a5a4fa0..e3f44de 100644 --- a/pkg/adaptation/adaptation.go +++ b/pkg/adaptation/adaptation.go @@ -335,18 +335,22 @@ func (r *Adaptation) startPlugins() (retErr error) { } }() + var errs []error for i, name := range names { - log.Infof(noCtx, "starting plugin %q...", name) + log.Infof(noCtx, "starting pre-installed NRI plugin %q...", name) id := ids[i] - p, err := r.newLaunchedPlugin(r.pluginPath, id, name, configs[i]) if err != nil { - return fmt.Errorf("failed to start NRI plugin %q: %w", name, err) + errs = append(errs, fmt.Errorf("[%s] %w", name, err)) + log.Warnf(noCtx, "failed to initialize pre-installed NRI plugin %q: %w", name, err) + continue } if err := p.start(r.name, r.version); err != nil { - return fmt.Errorf("failed to start NRI Plugin %q: %w", name, err) + errs = append(errs, fmt.Errorf("[%s] %w", name, err)) + log.Warnf(noCtx, "failed to start pre-installed NRI plugin %q: %w", name, err) + continue } plugins = append(plugins, p) @@ -354,12 +358,7 @@ func (r *Adaptation) startPlugins() (retErr error) { // Although the error returned by syncPlugins may not be nil, r.syncFn could still ignores this error and returns a nil error. // We need to make sure that the plugins are successfully synchronized in the `plugins` - syncPlugins := func(ctx context.Context, pods []*PodSandbox, containers []*Container) ([]*ContainerUpdate, error) { - var ( - errs []error - updates []*ContainerUpdate - ) - + syncPlugins := func(ctx context.Context, pods []*PodSandbox, containers []*Container) (updates []*ContainerUpdate, err error) { startedPlugins := plugins plugins = make([]*plugin, 0, len(plugins)) for _, plugin := range startedPlugins { @@ -367,15 +366,18 @@ func (r *Adaptation) startPlugins() (retErr error) { if err != nil { plugin.stop() errs = append(errs, fmt.Errorf("[%s] %w", plugin.name(), err)) - } else { - plugins = append(plugins, plugin) - updates = append(updates, us...) + log.Warnf(noCtx, "failed to synchronize pre-installed NRI plugin %q: %w", plugin.name(), err) + continue } + + plugins = append(plugins, plugin) + updates = append(updates, us...) + log.Infof(noCtx, "pre-installed NRI plugin %q synchronization success", plugin.name()) } return updates, errors.Join(errs...) } if err := r.syncFn(noCtx, syncPlugins); err != nil { - return fmt.Errorf("failed to synchronize NRI Plugins: %w", err) + return fmt.Errorf("failed to synchronize pre-installed NRI Plugins: %w", err) } r.plugins = plugins