From ed80598936c50707a7899597832167c95f34df78 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 19 Oct 2020 13:02:04 -0500 Subject: [PATCH 1/2] Allow multiple env args to env stop command --- docs/coder_envs.md | 2 +- docs/coder_envs_stop.md | 21 ++++++++++++++++--- internal/cmd/cmd.go | 2 +- internal/cmd/envs.go | 46 ++++++++++++++++++++++++++++++----------- 4 files changed, 54 insertions(+), 17 deletions(-) diff --git a/docs/coder_envs.md b/docs/coder_envs.md index 5730eb52..af394d16 100644 --- a/docs/coder_envs.md +++ b/docs/coder_envs.md @@ -23,4 +23,4 @@ Perform operations on the Coder environments owned by the active user. * [coder](coder.md) - coder provides a CLI for working with an existing Coder Enterprise installation * [coder envs ls](coder_envs_ls.md) - list all environments owned by the active user -* [coder envs stop](coder_envs_stop.md) - stop a Coder environment by name +* [coder envs stop](coder_envs_stop.md) - stop Coder environments by name diff --git a/docs/coder_envs_stop.md b/docs/coder_envs_stop.md index 3ed3b2ee..1348a14c 100644 --- a/docs/coder_envs_stop.md +++ b/docs/coder_envs_stop.md @@ -1,13 +1,28 @@ ## coder envs stop -stop a Coder environment by name +stop Coder environments by name ### Synopsis -Stop a Coder environment by name +Stop Coder environments by name ``` -coder envs stop [environment_name] [flags] +coder envs stop [...environment_names] [flags] +``` + +### Examples + +``` +coder envs stop front-end-env +coder envs stop front-end-env backend-env + +# stop all of your environments +coder envs ls -o json | jq -c '.[].name' | xargs coder envs stop + +# stop all environments for a given user +coder envs --user charlie@coder.com ls -o json \ + | jq -c '.[].name' \ + | xargs coder envs --user charlie@coder.com stop ``` ### Options diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index ca6ecdad..665a0456 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -24,7 +24,7 @@ func Make() *cobra.Command { makeUsersCmd(), makeConfigSSHCmd(), makeSecretsCmd(), - makeEnvsCommand(), + envsCommand(), makeSyncCmd(), makeURLCmd(), makeResourceCmd(), diff --git a/internal/cmd/envs.go b/internal/cmd/envs.go index 49c05005..b2d146aa 100644 --- a/internal/cmd/envs.go +++ b/internal/cmd/envs.go @@ -7,12 +7,13 @@ import ( "cdr.dev/coder-cli/coder-sdk" "cdr.dev/coder-cli/internal/x/xtabwriter" "github.com/spf13/cobra" + "golang.org/x/sync/errgroup" "golang.org/x/xerrors" "go.coder.com/flog" ) -func makeEnvsCommand() *cobra.Command { +func envsCommand() *cobra.Command { var outputFmt string var user string cmd := &cobra.Command{ @@ -68,26 +69,47 @@ func makeEnvsCommand() *cobra.Command { func stopEnvCommand(user *string) *cobra.Command { return &cobra.Command{ - Use: "stop [environment_name]", - Short: "stop a Coder environment by name", - Long: "Stop a Coder environment by name", - Args: cobra.ExactArgs(1), + Use: "stop [...environment_names]", + Short: "stop Coder environments by name", + Long: "Stop Coder environments by name", + Example: `coder envs stop front-end-env +coder envs stop front-end-env backend-env + +# stop all of your environments +coder envs ls -o json | jq -c '.[].name' | xargs coder envs stop + +# stop all environments for a given user +coder envs --user charlie@coder.com ls -o json \ + | jq -c '.[].name' \ + | xargs coder envs --user charlie@coder.com stop`, + Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { client, err := newClient() if err != nil { return xerrors.Errorf("new client: %w", err) } - envName := args[0] - env, err := findEnv(cmd.Context(), client, envName, *user) - if err != nil { - return xerrors.Errorf("find environment by name: %w", err) + var egroup errgroup.Group + for _, envName := range args { + envName := envName + egroup.Go(func() error { + env, err := findEnv(cmd.Context(), client, envName, *user) + if err != nil { + return xerrors.Errorf("find environment by name: %w", err) + } + + if err = client.StopEnvironment(cmd.Context(), env.ID); err != nil { + flog.Error("failed to stop environment \"%s\": %v", env.Name, err) + return xerrors.Errorf("stop environment: %w", err) + } + flog.Success("Successfully stopped environment %q", envName) + return nil + }) } - if err = client.StopEnvironment(cmd.Context(), env.ID); err != nil { - return xerrors.Errorf("stop environment: %w", err) + if err = egroup.Wait(); err != nil { + return xerrors.Errorf("some stop operations failed: %w", err) } - flog.Success("Successfully stopped environment %q", envName) return nil }, } From 49b57e0656d094691eaf0f6cac30090f0300adb4 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 19 Oct 2020 13:14:23 -0500 Subject: [PATCH 2/2] fixup! Allow multiple env args to env stop command --- internal/cmd/envs.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/cmd/envs.go b/internal/cmd/envs.go index b2d146aa..35f9435e 100644 --- a/internal/cmd/envs.go +++ b/internal/cmd/envs.go @@ -95,6 +95,7 @@ coder envs --user charlie@coder.com ls -o json \ egroup.Go(func() error { env, err := findEnv(cmd.Context(), client, envName, *user) if err != nil { + flog.Error("failed to find environment by name \"%s\": %v", env.Name, err) return xerrors.Errorf("find environment by name: %w", err) } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy