@@ -52,6 +52,7 @@ func NewPluginReconciler(cl client.Client, scheme *runtime.Scheme, nodeName, nam
5252 artifactManager : artifact .NewManager (cl , namespace ),
5353 PluginsConfig : & PluginsConfig {},
5454 nodeName : nodeName ,
55+ crToConfigName : make (map [string ]string ),
5556 }
5657}
5758
@@ -63,6 +64,7 @@ type PluginReconciler struct {
6364 artifactManager * artifact.Manager
6465 PluginsConfig * PluginsConfig
6566 nodeName string
67+ crToConfigName map [string ]string
6668}
6769
6870// Reconcile is part of the main kubernetes reconciliation loop which aims to
@@ -165,6 +167,7 @@ func (r *PluginReconciler) handleDeletion(ctx context.Context, plugin *artifactv
165167
166168 // Remove the plugin configuration.
167169 r .PluginsConfig .removeConfig (plugin )
170+ delete (r .crToConfigName , plugin .Name )
168171
169172 // Write the updated configuration to the file.
170173 if err := r .removePluginConfig (ctx , plugin ); err != nil {
@@ -191,6 +194,13 @@ func (r *PluginReconciler) handleDeletion(ctx context.Context, plugin *artifactv
191194func (r * PluginReconciler ) ensurePluginConfig (ctx context.Context , plugin * artifactv1alpha1.Plugin ) error {
192195 logger := log .FromContext (ctx )
193196 logger .Info ("Ensuring plugin configuration" )
197+
198+ configName := resolveConfigName (plugin )
199+ if oldName , ok := r .crToConfigName [plugin .Name ]; ok && oldName != configName {
200+ r .PluginsConfig .removeByName (oldName )
201+ }
202+ r .crToConfigName [plugin .Name ] = configName
203+
194204 r .PluginsConfig .addConfig (plugin )
195205 // Convert the struct to string.
196206 pluginConfigString , err := r .PluginsConfig .toString ()
@@ -271,6 +281,13 @@ type PluginsConfig struct {
271281 LoadPlugins []string `yaml:"load_plugins,omitempty"`
272282}
273283
284+ func resolveConfigName (plugin * artifactv1alpha1.Plugin ) string {
285+ if plugin .Spec .Config != nil && plugin .Spec .Config .Name != "" {
286+ return plugin .Spec .Config .Name
287+ }
288+ return plugin .Name
289+ }
290+
274291func (pc * PluginsConfig ) addConfig (plugin * artifactv1alpha1.Plugin ) {
275292 config := PluginConfig {
276293 LibraryPath : artifact .Path (plugin .Name , priority .DefaultPriority , artifact .MediumOCI , artifact .TypePlugin ),
@@ -315,12 +332,10 @@ func (pc *PluginsConfig) addConfig(plugin *artifactv1alpha1.Plugin) {
315332}
316333
317334func (pc * PluginsConfig ) removeConfig (plugin * artifactv1alpha1.Plugin ) {
318- // Resolve the effective config name (same logic as addConfig).
319- name := plugin .Name
320- if plugin .Spec .Config != nil && plugin .Spec .Config .Name != "" {
321- name = plugin .Spec .Config .Name
322- }
335+ pc .removeByName (resolveConfigName (plugin ))
336+ }
323337
338+ func (pc * PluginsConfig ) removeByName (name string ) {
324339 for i , c := range pc .Configs {
325340 if c .Name == name {
326341 pc .Configs = append (pc .Configs [:i ], pc .Configs [i + 1 :]... )
@@ -337,7 +352,6 @@ func (pc *PluginsConfig) removeConfig(plugin *artifactv1alpha1.Plugin) {
337352}
338353
339354func (pc * PluginsConfig ) toString () (string , error ) {
340- // Convert the struct to YAML.
341355 data , err := yaml .Marshal (pc )
342356 if err != nil {
343357 return "" , err
0 commit comments