diff --git a/internal/stack/serverless.go b/internal/stack/serverless.go index 7119f6c7f0..02197a753d 100644 --- a/internal/stack/serverless.go +++ b/internal/stack/serverless.go @@ -125,6 +125,29 @@ func (sp *serverlessProvider) deleteProject(project *serverless.Project, options return sp.client.DeleteProject(project) } +func (sp *serverlessProvider) currentProjectWithClientsAndFleetEndpoint(config Config) (*serverless.Project, error) { + project, err := sp.currentProject(config) + if err != nil { + return nil, err + } + + err = sp.createClients(project) + if err != nil { + return nil, err + } + + fleetURL, found := config.Parameters[paramServerlessFleetURL] + if !found { + fleetURL, err = project.DefaultFleetServerURL(sp.kibanaClient) + if err != nil { + return nil, fmt.Errorf("failed to get fleet URL: %w", err) + } + } + project.Endpoints.Fleet = fleetURL + + return project, nil +} + func (sp *serverlessProvider) currentProject(config Config) (*serverless.Project, error) { projectID, found := config.Parameters[paramServerlessProjectID] if !found { @@ -147,20 +170,6 @@ func (sp *serverlessProvider) currentProject(config Config) (*serverless.Project project.Credentials.Username = config.ElasticsearchUsername project.Credentials.Password = config.ElasticsearchPassword - err = sp.createClients(project) - if err != nil { - return nil, err - } - - fleetURL := config.Parameters[paramServerlessFleetURL] - if true { - fleetURL, err = project.DefaultFleetServerURL(sp.kibanaClient) - if err != nil { - return nil, fmt.Errorf("failed to get fleet URL: %w", err) - } - } - project.Endpoints.Fleet = fleetURL - return project, nil } @@ -246,16 +255,11 @@ func (sp *serverlessProvider) BootUp(options Options) error { return fmt.Errorf("failed to create deployment: %w", err) } - project, err = sp.currentProject(config) + project, err = sp.currentProjectWithClientsAndFleetEndpoint(config) if err != nil { return fmt.Errorf("failed to retrieve latest project created: %w", err) } - err = sp.createClients(project) - if err != nil { - return err - } - logger.Infof("Creating agent policy") err = project.CreateAgentPolicy(options.StackVersion, sp.kibanaClient) if err != nil { @@ -327,9 +331,12 @@ func (sp *serverlessProvider) TearDown(options Options) error { return fmt.Errorf("failed to load configuration: %w", err) } + var errs error + err = sp.destroyLocalAgent() if err != nil { - return fmt.Errorf("failed to destroy local agent: %w", err) + logger.Errorf("failed to destroy local agent: %v", err) + errs = fmt.Errorf("failed to destroy local agent: %w", err) } project, err := sp.currentProject(config) @@ -341,11 +348,13 @@ func (sp *serverlessProvider) TearDown(options Options) error { err = sp.deleteProject(project, options) if err != nil { - return fmt.Errorf("failed to delete project: %w", err) + logger.Errorf("failed to delete project: %v", err) + errs = errors.Join(errs, fmt.Errorf("failed to delete project: %w", err)) } + logger.Infof("Project %s (%s) deleted", project.Name, project.ID) // TODO: if GeoIP database is specified, remove the geoip Bundle (if needed) - return nil + return errs } func (sp *serverlessProvider) destroyLocalAgent() error { @@ -377,7 +386,7 @@ func (sp *serverlessProvider) Status(options Options) ([]ServiceStatus, error) { return nil, fmt.Errorf("failed to load configuration: %w", err) } - project, err := sp.currentProject(config) + project, err := sp.currentProjectWithClientsAndFleetEndpoint(config) if errors.Is(serverless.ErrProjectNotExist, err) { return nil, nil }