diff --git a/api/pending_action.go b/api/pending_action.go index 212ba22ad..37dce3698 100644 --- a/api/pending_action.go +++ b/api/pending_action.go @@ -13,7 +13,7 @@ type ( } PendingActionHandler interface { - Execute(PendingAction, *Endpoint) error + Execute(PendingAction) error } ) diff --git a/api/pendingactions/handlers/clean_nap_with_override_policies.go b/api/pendingactions/handlers/clean_nap_with_override_policies.go index 667f9fe43..7aae5c56c 100644 --- a/api/pendingactions/handlers/clean_nap_with_override_policies.go +++ b/api/pendingactions/handlers/clean_nap_with_override_policies.go @@ -48,14 +48,20 @@ func NewHandlerCleanNAPWithOverridePolicies( } } -func (h *HandlerCleanNAPWithOverridePolicies) Execute(pendingAction portainer.PendingAction, endpoint *portainer.Endpoint) error { - if pendingAction.ActionData == nil { +func (h *HandlerCleanNAPWithOverridePolicies) Execute(pa portainer.PendingAction) error { + endpoint, err := h.dataStore.Endpoint().Endpoint(pa.EndpointID) + if err != nil { + log.Debug().Msgf("failed to retrieve environment %d: %v", pa.EndpointID, err) + return nil + } + + if pa.ActionData == nil { h.authorizationService.CleanNAPWithOverridePolicies(h.dataStore, endpoint, nil) return nil } var payload cleanNAPWithOverridePolicies - err := pendingAction.UnmarshallActionData(&payload) + err = pa.UnmarshallActionData(&payload) if err != nil { log.Error().Err(err).Msgf("Error unmarshalling endpoint group ID for cleaning NAP with override policies for environment %d", endpoint.ID) return fmt.Errorf("failed to unmarshal endpoint group ID for cleaning NAP with override policies for environment %d: %w", endpoint.ID, err) diff --git a/api/pendingactions/handlers/delete_k8s_registry_secrets.go b/api/pendingactions/handlers/delete_k8s_registry_secrets.go index 6f38bf4a4..c2348b0f6 100644 --- a/api/pendingactions/handlers/delete_k8s_registry_secrets.go +++ b/api/pendingactions/handlers/delete_k8s_registry_secrets.go @@ -6,6 +6,7 @@ import ( "github.com/portainer/portainer/api/internal/authorization" kubecli "github.com/portainer/portainer/api/kubernetes/cli" "github.com/portainer/portainer/api/pendingactions/actions" + "github.com/rs/zerolog/log" ) type ( @@ -46,13 +47,19 @@ func NewHandlerDeleteRegistrySecrets( } } -func (h *HandlerDeleteK8sRegistrySecrets) Execute(pa portainer.PendingAction, endpoint *portainer.Endpoint) error { - if endpoint == nil || pa.ActionData == nil { +func (h *HandlerDeleteK8sRegistrySecrets) Execute(pa portainer.PendingAction) error { + if pa.ActionData == nil { + return nil + } + + endpoint, err := h.dataStore.Endpoint().Endpoint(pa.EndpointID) + if err != nil { + log.Debug().Msgf("failed to retrieve environment %d: %v", pa.EndpointID, err) return nil } var registryData deleteK8sRegistrySecretsData - err := pa.UnmarshallActionData(®istryData) + err = pa.UnmarshallActionData(®istryData) if err != nil { return err } diff --git a/api/pendingactions/handlers/post_init_migrate_environment.go b/api/pendingactions/handlers/post_init_migrate_environment.go index cdbfe67eb..568152e02 100644 --- a/api/pendingactions/handlers/post_init_migrate_environment.go +++ b/api/pendingactions/handlers/post_init_migrate_environment.go @@ -40,7 +40,13 @@ func NewHandlerPostInitMigrateEnvironment( } } -func (h *HandlerPostInitMigrateEnvironment) Execute(_ portainer.PendingAction, endpoint *portainer.Endpoint) error { +func (h *HandlerPostInitMigrateEnvironment) Execute(pa portainer.PendingAction) error { + endpoint, err := h.dataStore.Endpoint().Endpoint(pa.EndpointID) + if err != nil { + log.Debug().Msgf("failed to retrieve environment %d: %v", pa.EndpointID, err) + return nil + } + postInitMigrator := postinit.NewPostInitMigrator( h.kubeFactory, h.dockerFactory, @@ -48,7 +54,7 @@ func (h *HandlerPostInitMigrateEnvironment) Execute(_ portainer.PendingAction, e h.assetsPath, h.kubernetesDeployer, ) - err := postInitMigrator.MigrateEnvironment(endpoint) + err = postInitMigrator.MigrateEnvironment(endpoint) if err != nil { log.Error().Err(err).Msgf("Error running post-init migrations for edge environment %d", endpoint.ID) return fmt.Errorf("failed running post-init migrations for edge environment %d: %w", endpoint.ID, err) diff --git a/api/pendingactions/pendingactions.go b/api/pendingactions/pendingactions.go index be5a466f0..dca095675 100644 --- a/api/pendingactions/pendingactions.go +++ b/api/pendingactions/pendingactions.go @@ -89,7 +89,7 @@ func (service *PendingActionsService) Execute(id portainer.EndpointID) { for _, pendingAction := range pendingActions { if pendingAction.EndpointID == id { log.Debug().Msgf("executing pending action id=%d, action=%s", pendingAction.ID, pendingAction.Action) - err := service.executePendingAction(pendingAction, endpoint) + err := service.executePendingAction(pendingAction) if err != nil { log.Warn().Msgf("failed to execute pending action: %v", err) return @@ -106,7 +106,7 @@ func (service *PendingActionsService) Execute(id portainer.EndpointID) { } } -func (service *PendingActionsService) executePendingAction(pendingAction portainer.PendingAction, endpoint *portainer.Endpoint) error { +func (service *PendingActionsService) executePendingAction(pendingAction portainer.PendingAction) error { defer func() { if r := recover(); r != nil { log.Error().Msgf("recovered from panic while executing pending action %s for environment %d: %v", pendingAction.Action, pendingAction.EndpointID, r) @@ -119,5 +119,5 @@ func (service *PendingActionsService) executePendingAction(pendingAction portain return nil } - return handler.Execute(pendingAction, endpoint) + return handler.Execute(pendingAction) }