From fc3336c14017d3cd622a1ece354599893df659a1 Mon Sep 17 00:00:00 2001 From: Sam Park Date: Thu, 12 Aug 2021 05:26:34 +0000 Subject: [PATCH 1/5] Option to list all workspaces From an admin POV, this will be helpful for various reasons. --- internal/cmd/ceapi.go | 9 ++++++--- internal/cmd/workspaces.go | 17 +++++++++++++---- internal/cmd/workspaces_test.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/internal/cmd/ceapi.go b/internal/cmd/ceapi.go index c58b8161..e264b65c 100644 --- a/internal/cmd/ceapi.go +++ b/internal/cmd/ceapi.go @@ -215,10 +215,13 @@ func getWorkspacesByProvider(ctx context.Context, client coder.Client, wpName, u return nil, err } - workspaces, err = filterWorkspacesByUser(ctx, client, userEmail, workspaces) - if err != nil { - return nil, err + if userEmail != "" { + workspaces, err = filterWorkspacesByUser(ctx, client, userEmail, workspaces) + if err != nil { + return nil, err + } } + return workspaces, nil } diff --git a/internal/cmd/workspaces.go b/internal/cmd/workspaces.go index ff70b64d..0cfda0f9 100644 --- a/internal/cmd/workspaces.go +++ b/internal/cmd/workspaces.go @@ -70,6 +70,7 @@ const ( func lsWorkspacesCommand() *cobra.Command { var ( + all bool outputFmt string user string provider string @@ -85,11 +86,18 @@ func lsWorkspacesCommand() *cobra.Command { if err != nil { return err } - workspaces, err := getWorkspaces(ctx, client, user) - if err != nil { - return err + var workspaces []coder.Workspace + if !all { + var err error + workspaces, err = getWorkspaces(ctx, client, user) + if err != nil { + return err + } + } else { + // If the user gave the all flag, then filtering by user doesn't make sense. + user = "" } - if provider != "" { + if provider != "" || all { workspaces, err = getWorkspacesByProvider(ctx, client, provider, user) if err != nil { return err @@ -124,6 +132,7 @@ func lsWorkspacesCommand() *cobra.Command { }, } + cmd.Flags().BoolVar(&all, "all", false, "Get workspaces for all users") cmd.Flags().StringVar(&user, "user", coder.Me, "Specify the user whose resources to target") cmd.Flags().StringVarP(&outputFmt, "output", "o", humanOutput, "human | json") cmd.Flags().StringVarP(&provider, "provider", "p", "", "Filter workspaces by a particular workspace provider name.") diff --git a/internal/cmd/workspaces_test.go b/internal/cmd/workspaces_test.go index 5dd3d01b..89e5fd08 100644 --- a/internal/cmd/workspaces_test.go +++ b/internal/cmd/workspaces_test.go @@ -29,6 +29,34 @@ func Test_workspaces_ls(t *testing.T) { res.stdoutUnmarshals(t, &workspaces) } +func Test_workspaces_ls_all(t *testing.T) { + skipIfNoAuth(t) + for _, test := range []struct { + name string + command []string + assert func(r result) + }{ + { + name: "simple list", + command: []string{"workspaces", "ls", "--all"}, + assert: func(r result) { r.success(t) }, + }, + { + name: "list as json", + command: []string{"workspaces", "ls", "--all", "--output", "json"}, + assert: func(r result) { + var workspaces []coder.Workspace + r.stdoutUnmarshals(t, &workspaces) + }, + }, + } { + test := test + t.Run(test.name, func(t *testing.T) { + test.assert(execute(t, nil, test.command...)) + }) + } +} + func Test_workspaces_ls_by_provider(t *testing.T) { skipIfNoAuth(t) for _, test := range []struct { From 36ececbeb462a965830907f9dee888ec28debe46 Mon Sep 17 00:00:00 2001 From: goodspark Date: Thu, 12 Aug 2021 09:12:52 -0700 Subject: [PATCH 2/5] Update internal/cmd/workspaces.go Co-authored-by: Dean Sheather --- internal/cmd/workspaces.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cmd/workspaces.go b/internal/cmd/workspaces.go index 0cfda0f9..00db5c95 100644 --- a/internal/cmd/workspaces.go +++ b/internal/cmd/workspaces.go @@ -132,7 +132,7 @@ func lsWorkspacesCommand() *cobra.Command { }, } - cmd.Flags().BoolVar(&all, "all", false, "Get workspaces for all users") + cmd.Flags().BoolVar(&all, "all", false, "Get workspaces for all users (admin only)") cmd.Flags().StringVar(&user, "user", coder.Me, "Specify the user whose resources to target") cmd.Flags().StringVarP(&outputFmt, "output", "o", humanOutput, "human | json") cmd.Flags().StringVarP(&provider, "provider", "p", "", "Filter workspaces by a particular workspace provider name.") From e6709782b7cab433215696ac6ad52fe438f01cb4 Mon Sep 17 00:00:00 2001 From: Sam Park Date: Thu, 12 Aug 2021 16:19:56 +0000 Subject: [PATCH 3/5] Fixes --- internal/cmd/ceapi.go | 14 ++++++++------ internal/cmd/workspaces.go | 17 ++++++++++------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/internal/cmd/ceapi.go b/internal/cmd/ceapi.go index e264b65c..0c5ca004 100644 --- a/internal/cmd/ceapi.go +++ b/internal/cmd/ceapi.go @@ -32,6 +32,11 @@ func lookupUserOrgs(user *coder.User, orgs []coder.Organization) []coder.Organiz return userOrgs } +// getAllWorkspaces gets all workspaces for all users, on all providers. +func getAllWorkspaces(ctx context.Context, client coder.Client) ([]coder.Workspace, error) { + return client.Workspaces(ctx) +} + // getWorkspaces returns all workspaces for the user. func getWorkspaces(ctx context.Context, client coder.Client, email string) ([]coder.Workspace, error) { user, err := client.UserByEmail(ctx, email) @@ -215,13 +220,10 @@ func getWorkspacesByProvider(ctx context.Context, client coder.Client, wpName, u return nil, err } - if userEmail != "" { - workspaces, err = filterWorkspacesByUser(ctx, client, userEmail, workspaces) - if err != nil { - return nil, err - } + workspaces, err = filterWorkspacesByUser(ctx, client, userEmail, workspaces) + if err != nil { + return nil, err } - return workspaces, nil } diff --git a/internal/cmd/workspaces.go b/internal/cmd/workspaces.go index 00db5c95..6b1db957 100644 --- a/internal/cmd/workspaces.go +++ b/internal/cmd/workspaces.go @@ -87,21 +87,24 @@ func lsWorkspacesCommand() *cobra.Command { return err } var workspaces []coder.Workspace - if !all { + if all { var err error - workspaces, err = getWorkspaces(ctx, client, user) + workspaces, err = getAllWorkspaces(ctx, client) if err != nil { return err } - } else { - // If the user gave the all flag, then filtering by user doesn't make sense. - user = "" - } - if provider != "" || all { + } else if provider != "" { + var err error workspaces, err = getWorkspacesByProvider(ctx, client, provider, user) if err != nil { return err } + } else { + var err error + workspaces, err = getWorkspaces(ctx, client, user) + if err != nil { + return err + } } if len(workspaces) < 1 { clog.LogInfo("no workspaces found") From abc16840788941c0cbaf67b28630ea7fd047dbae Mon Sep 17 00:00:00 2001 From: goodspark Date: Thu, 12 Aug 2021 13:42:10 -0700 Subject: [PATCH 4/5] Update internal/cmd/workspaces.go Co-authored-by: Dean Sheather --- internal/cmd/workspaces.go | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/internal/cmd/workspaces.go b/internal/cmd/workspaces.go index 6b1db957..95c65e97 100644 --- a/internal/cmd/workspaces.go +++ b/internal/cmd/workspaces.go @@ -88,23 +88,14 @@ func lsWorkspacesCommand() *cobra.Command { } var workspaces []coder.Workspace if all { - var err error workspaces, err = getAllWorkspaces(ctx, client) - if err != nil { - return err - } } else if provider != "" { - var err error workspaces, err = getWorkspacesByProvider(ctx, client, provider, user) - if err != nil { - return err - } } else { - var err error workspaces, err = getWorkspaces(ctx, client, user) - if err != nil { - return err - } + } + if err != nil { + return err } if len(workspaces) < 1 { clog.LogInfo("no workspaces found") From 49ad4506cdf617a464b7342efa5b1c4dc6928947 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Thu, 12 Aug 2021 20:59:02 +0000 Subject: [PATCH 5/5] Fix lint --- internal/cmd/workspaces.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/cmd/workspaces.go b/internal/cmd/workspaces.go index 95c65e97..f4dd7e0f 100644 --- a/internal/cmd/workspaces.go +++ b/internal/cmd/workspaces.go @@ -86,12 +86,14 @@ func lsWorkspacesCommand() *cobra.Command { if err != nil { return err } + var workspaces []coder.Workspace - if all { + switch { + case all: workspaces, err = getAllWorkspaces(ctx, client) - } else if provider != "" { + case provider != "": workspaces, err = getWorkspacesByProvider(ctx, client, provider, user) - } else { + default: workspaces, err = getWorkspaces(ctx, client, user) } if err != nil { @@ -213,7 +215,7 @@ func (*wsPinger) logSuccess(timeStr, msg string) { fmt.Printf("%s: %s\n", color.New(color.Bold, color.FgGreen).Sprint(timeStr), msg) } -// Only return fatal errors +// Only return fatal errors. func (w *wsPinger) ping(ctx context.Context) error { ctx, cancelFunc := context.WithTimeout(ctx, time.Second*15) defer cancelFunc() 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