diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index 572a257f92..19907e2f37 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -8,6 +8,7 @@ import ( "errors" "fmt" "io" + "os" "github.com/azure/azure-dev/cli/azd/cmd/actions" "github.com/azure/azure-dev/cli/azd/internal" @@ -158,6 +159,14 @@ func newEnvSelectAction(azdCtx *azdcontext.AzdContext, args []string) actions.Ac } func (e *envSelectAction) Run(ctx context.Context) (*actions.ActionResult, error) { + _, err := environment.GetEnvironment(e.azdCtx, e.args[0]) + if errors.Is(err, os.ErrNotExist) { + return nil, fmt.Errorf(`environment '%s' does not exist. You can create it with "azd env new %s"`, + e.args[0], e.args[0]) + } else if err != nil { + return nil, fmt.Errorf("ensuring environment exists: %w", err) + } + if err := e.azdCtx.SetDefaultEnvironmentName(e.args[0]); err != nil { return nil, fmt.Errorf("setting default environment: %w", err) } @@ -247,7 +256,7 @@ func newEnvNewFlags(cmd *cobra.Command, global *internal.GlobalCommandOptions) * func newEnvNewCmd() *cobra.Command { cmd := &cobra.Command{ Use: "new ", - Short: "Create a new environment.", + Short: "Create a new environment and set it as the default.", } cmd.Args = cobra.MaximumNArgs(1) diff --git a/cli/azd/cmd/testdata/TestUsage-azd-env-new.snap b/cli/azd/cmd/testdata/TestUsage-azd-env-new.snap index 3f32e0a1b2..40bf70f1ea 100644 --- a/cli/azd/cmd/testdata/TestUsage-azd-env-new.snap +++ b/cli/azd/cmd/testdata/TestUsage-azd-env-new.snap @@ -1,5 +1,5 @@ -Create a new environment. +Create a new environment and set it as the default. Usage azd env new [flags] diff --git a/cli/azd/cmd/testdata/TestUsage-azd-env.snap b/cli/azd/cmd/testdata/TestUsage-azd-env.snap index 3bba946f02..79d6198a35 100644 --- a/cli/azd/cmd/testdata/TestUsage-azd-env.snap +++ b/cli/azd/cmd/testdata/TestUsage-azd-env.snap @@ -12,7 +12,7 @@ Usage Available Commands get-values : Get all environment values. list : List environments. - new : Create a new environment. + new : Create a new environment and set it as the default. refresh : Refresh environment settings by using information from a previous infrastructure provision. select : Set the default environment. set : Manage your environment settings. diff --git a/cli/azd/test/functional/env_test.go b/cli/azd/test/functional/env_test.go index 87b748c20b..e156a68e1d 100644 --- a/cli/azd/test/functional/env_test.go +++ b/cli/azd/test/functional/env_test.go @@ -100,6 +100,11 @@ func Test_CLI_Env_Management(t *testing.T) { require.Len(t, environmentList, 2) requireIsDefault(t, environmentList, envName) + // Verify that trying to select an environment which does not exist fails. + res, err := cli.RunCommand(ctx, "env", "select", "does-not-exist") + require.Error(t, err) + require.Contains(t, res.Stdout, "environment 'does-not-exist' does not exist") + // Verify that running refresh with an explicit env name from an argument and from a flag leads to an error. _, err = cli.RunCommand(context.Background(), "env", "refresh", "-e", "from-flag", "from-arg") require.Error(t, err)