Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Aug 30, 2024. It is now read-only.
/coder-v1-cliPublic archive

feat: Option to list all workspaces#416

Merged
cdrci merged 5 commits intocoder:masterfromgoodspark:ls-all-workspaces
Aug 12, 2021
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletionsinternal/cmd/ceapi.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -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)
Expand Down
21 changes: 13 additions & 8 deletionsinternal/cmd/workspaces.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -70,6 +70,7 @@ const (

func lsWorkspacesCommand() *cobra.Command {
var (
all bool
outputFmt string
user string
provider string
Expand All@@ -85,16 +86,19 @@ func lsWorkspacesCommand() *cobra.Command {
if err != nil {
return err
}
workspaces, err := getWorkspaces(ctx, client, user)

var workspaces []coder.Workspace
switch {
case all:
workspaces, err = getAllWorkspaces(ctx, client)
case provider != "":
workspaces, err = getWorkspacesByProvider(ctx, client, provider, user)
default:
workspaces, err = getWorkspaces(ctx, client, user)
}
if err != nil {
return err
}
if provider != "" {
workspaces, err = getWorkspacesByProvider(ctx, client, provider, user)
if err != nil {
return err
}
}
if len(workspaces) < 1 {
clog.LogInfo("no workspaces found")
workspaces = []coder.Workspace{} // ensures that json output still marshals
Expand DownExpand Up@@ -124,6 +128,7 @@ func lsWorkspacesCommand() *cobra.Command {
},
}

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.")
Expand DownExpand Up@@ -210,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()
Expand Down
28 changes: 28 additions & 0 deletionsinternal/cmd/workspaces_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -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) },
Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Sanity check: This isn't actually checking the output - just that the command exited with 0?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Essentially, yeah. This mini test framework "runs" the commands in-process and checks if the command fn returned an error.

},
{
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 {
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp