From ba0ed40ee91910cad155592bbdaae277cbacccda Mon Sep 17 00:00:00 2001 From: Filipe Constantinov Menezes Date: Wed, 25 Sep 2024 11:17:06 +0100 Subject: [PATCH] CLOUDP-273727 "atlas deployments search index describe" fails with unclear error message when local deployment is paused (#3284) --- .../options/deployment_opts_pre_run.go | 18 ++++++++++++++++-- .../cli/deployments/search/indexes/list.go | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/internal/cli/deployments/options/deployment_opts_pre_run.go b/internal/cli/deployments/options/deployment_opts_pre_run.go index 9fd230412e..3a6bc18a0d 100644 --- a/internal/cli/deployments/options/deployment_opts_pre_run.go +++ b/internal/cli/deployments/options/deployment_opts_pre_run.go @@ -17,6 +17,7 @@ package options import ( "context" "errors" + "fmt" "runtime" "slices" @@ -26,6 +27,8 @@ import ( atlasv2 "go.mongodb.org/atlas-sdk/v20240805001/admin" ) +var errDeploymentUnexpectedState = errors.New("deployment is in unexpected state") + func (opts *DeploymentOpts) listDeployments(ctx context.Context, projectID string) ([]Deployment, error) { var atlasDeployments, localDeployments []Deployment var atlasErr, localErr error @@ -72,9 +75,20 @@ func (opts *DeploymentOpts) SelectDeployments(ctx context.Context, projectID str } deployments = opts.filterDeploymentByName(deployments...) - deployments = opts.filterDeploymentByState(deployments, states...) + if opts.DeploymentName == "" { + deployments = opts.filterDeploymentByState(deployments, states...) + } + + d, err := opts.Select(deployments) + if err != nil { + return Deployment{}, err + } + + if len(states) > 0 && !slices.Contains(states, d.StateName) { + return Deployment{}, fmt.Errorf("%w: %s", errDeploymentUnexpectedState, d.StateName) + } - return opts.Select(deployments) + return d, nil } func isUnauthenticatedErr(err error) bool { diff --git a/internal/cli/deployments/search/indexes/list.go b/internal/cli/deployments/search/indexes/list.go index 8efbecb247..06ecea4731 100644 --- a/internal/cli/deployments/search/indexes/list.go +++ b/internal/cli/deployments/search/indexes/list.go @@ -43,7 +43,7 @@ type ListOpts struct { } func (opts *ListOpts) Run(ctx context.Context) error { - if _, err := opts.SelectDeployments(ctx, opts.ConfigProjectID()); err != nil { + if _, err := opts.SelectDeployments(ctx, opts.ConfigProjectID(), options.IdleState); err != nil { return err }