@@ -7,12 +7,13 @@ import (
7
7
"cdr.dev/coder-cli/coder-sdk"
8
8
"cdr.dev/coder-cli/internal/x/xtabwriter"
9
9
"github.com/spf13/cobra"
10
+ "golang.org/x/sync/errgroup"
10
11
"golang.org/x/xerrors"
11
12
12
13
"go.coder.com/flog"
13
14
)
14
15
15
- func makeEnvsCommand () * cobra.Command {
16
+ func envsCommand () * cobra.Command {
16
17
var outputFmt string
17
18
var user string
18
19
cmd := & cobra.Command {
@@ -68,26 +69,48 @@ func makeEnvsCommand() *cobra.Command {
68
69
69
70
func stopEnvCommand (user * string ) * cobra.Command {
70
71
return & cobra.Command {
71
- Use : "stop [environment_name]" ,
72
- Short : "stop a Coder environment by name" ,
73
- Long : "Stop a Coder environment by name" ,
74
- Args : cobra .ExactArgs (1 ),
72
+ Use : "stop [...environment_names]" ,
73
+ Short : "stop Coder environments by name" ,
74
+ Long : "Stop Coder environments by name" ,
75
+ Example : `coder envs stop front-end-env
76
+ coder envs stop front-end-env backend-env
77
+
78
+ # stop all of your environments
79
+ coder envs ls -o json | jq -c '.[].name' | xargs coder envs stop
80
+
81
+ # stop all environments for a given user
82
+ coder envs --user charlie@coder.com ls -o json \
83
+ | jq -c '.[].name' \
84
+ | xargs coder envs --user charlie@coder.com stop` ,
85
+ Args : cobra .MinimumNArgs (1 ),
75
86
RunE : func (cmd * cobra.Command , args []string ) error {
76
87
client , err := newClient ()
77
88
if err != nil {
78
89
return xerrors .Errorf ("new client: %w" , err )
79
90
}
80
91
81
- envName := args [0 ]
82
- env , err := findEnv (cmd .Context (), client , envName , * user )
83
- if err != nil {
84
- return xerrors .Errorf ("find environment by name: %w" , err )
92
+ var egroup errgroup.Group
93
+ for _ , envName := range args {
94
+ envName := envName
95
+ egroup .Go (func () error {
96
+ env , err := findEnv (cmd .Context (), client , envName , * user )
97
+ if err != nil {
98
+ flog .Error ("failed to find environment by name \" %s\" : %v" , env .Name , err )
99
+ return xerrors .Errorf ("find environment by name: %w" , err )
100
+ }
101
+
102
+ if err = client .StopEnvironment (cmd .Context (), env .ID ); err != nil {
103
+ flog .Error ("failed to stop environment \" %s\" : %v" , env .Name , err )
104
+ return xerrors .Errorf ("stop environment: %w" , err )
105
+ }
106
+ flog .Success ("Successfully stopped environment %q" , envName )
107
+ return nil
108
+ })
85
109
}
86
110
87
- if err = client . StopEnvironment ( cmd . Context (), env . ID ); err != nil {
88
- return xerrors .Errorf ("stop environment : %w" , err )
111
+ if err = egroup . Wait ( ); err != nil {
112
+ return xerrors .Errorf ("some stop operations failed : %w" , err )
89
113
}
90
- flog .Success ("Successfully stopped environment %q" , envName )
91
114
return nil
92
115
},
93
116
}
0 commit comments