Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

feature: support filtering by workspace provider when listing environ… #282

Merged
merged 6 commits into from
Mar 11, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
suggested changes
  • Loading branch information
Faris Huskovic committed Mar 11, 2021
commit 714cb275a87234a289b5d55102c77decc05540f6
14 changes: 0 additions & 14 deletions ci/integration/envs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,20 +144,6 @@ func TestEnvsCLI(t *testing.T) {
tcli.StdoutMatches(regexp.QuoteMeta(name)),
)

// filter by provider that does not exist should fail
doesntExist := randString(10)
c.Run(ctx, fmt.Sprintf("coder envs ls --provider %s", doesntExist)).Assert(t,
tcli.Error(),
tcli.StderrMatches(regexp.QuoteMeta(fmt.Sprintf("fatal: no environments found for workspace provider %q", doesntExist))),
)

// filter by provider that does exist should succeed
var envs []coder.Environment
c.Run(ctx, "coder envs ls --provider built-in").Assert(t,
tcli.Success(),
tcli.StdoutJSONUnmarshal(&envs),
)

var env coder.Environment
c.Run(ctx, fmt.Sprintf(`coder envs ls -o json | jq '.[] | select(.name == "%s")'`, name)).Assert(t,
tcli.Success(),
Expand Down
2 changes: 1 addition & 1 deletion coder-sdk/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ func (c *DefaultClient) EnvironmentByID(ctx context.Context, id string) (*Enviro

func (c *DefaultClient) EnvironmentsByWorkspaceProvider(ctx context.Context, wpID string) ([]Environment, error) {
var envs []Environment
if err := c.requestBody(ctx, http.MethodGet, "/api/private/resource-pools/"+wpID+"/environments/", nil, &envs); err != nil {
if err := c.requestBody(ctx, http.MethodGet, "/api/private/resource-pools/"+wpID+"/environments", nil, &envs); err != nil {
return nil, err
}
return envs, nil
Expand Down
7 changes: 4 additions & 3 deletions docs/coder_envs_ls.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ coder envs ls [flags]
### Options

```
-h, --help help for ls
-o, --output string human | json (default "human")
--user string Specify the user whose resources to target (default "me")
-h, --help help for ls
-o, --output string human | json (default "human")
-p, --provider string Filter environments by a particular workspace provider name.
--user string Specify the user whose resources to target (default "me")
```

### Options inherited from parent commands
Expand Down
17 changes: 2 additions & 15 deletions internal/cmd/ceapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"golang.org/x/xerrors"

"cdr.dev/coder-cli/coder-sdk"
"cdr.dev/coder-cli/internal/coderutil"
"cdr.dev/coder-cli/pkg/clog"
)

Expand Down Expand Up @@ -203,22 +204,8 @@ func getUserOrgs(ctx context.Context, client coder.Client, email string) ([]code
return lookupUserOrgs(u, orgs), nil
}

func getProviderByName(ctx context.Context, client coder.Client, wpName string) (*coder.KubernetesProvider, error) {
providers, err := client.WorkspaceProviders(ctx)
if err != nil {
return nil, err
}

for _, provider := range providers.Kubernetes {
if provider.Name == wpName {
return &provider, nil
}
}
return nil, xerrors.Errorf("workspace provider %q not found", wpName)
}

func getEnvsByProvider(ctx context.Context, client coder.Client, wpName string) ([]coder.Environment, error) {
wp, err := getProviderByName(ctx, client, wpName)
wp, err := coderutil.ProviderByName(ctx, client, wpName)
if err != nil {
return nil, err
}
Expand Down
26 changes: 26 additions & 0 deletions internal/cmd/envs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,29 @@ func Test_envs_ls(t *testing.T) {
var envs []coder.Environment
res.stdoutUnmarshals(t, &envs)
}

func Test_envs_ls_by_provider(t *testing.T) {
for _, test := range []struct {
name string
command []string
assert func(r result)
}{
{
name: "simple list",
command: []string{"envs", "ls", "--provider", "built-in"},
assert: func(r result) { r.success(t) },
},
{
name: "list as json",
command: []string{"envs", "ls", "--provider", "built-in", "--output", "json"},
assert: func(r result) {
var envs []coder.Environment
r.stdoutUnmarshals(t, &envs)
},
},
} {
t.Run(test.name, func(t *testing.T) {
test.assert(execute(t, nil, test.command...))
})
}
}