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

Commit 489be87

Browse files
committed
Add commands for workspace providers
1 parent 82f5615 commit 489be87

File tree

12 files changed

+377
-99
lines changed

12 files changed

+377
-99
lines changed

.golangci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ linters:
3939
- structcheck
4040
- stylecheck
4141
- typecheck
42-
- noctx
4342
- nolintlint
4443
- rowserrcheck
4544
- scopelint

coder-sdk/resourcepools.go

Lines changed: 0 additions & 65 deletions
This file was deleted.

coder-sdk/workspace_providers.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package coder
2+
3+
import (
4+
"context"
5+
"net/http"
6+
)
7+
8+
// WorkspaceProvider defines an entity capable of deploying and acting as an ingress for Coder environments.
9+
type WorkspaceProvider struct {
10+
ID string `json:"id"`
11+
Name string `json:"name"`
12+
Status WorkspaceProviderStatus `json:"status"`
13+
Local bool `json:"local"`
14+
ClusterAddress string `json:"cluster_address"`
15+
DefaultNamespace string `json:"default_namespace"`
16+
StorageClass string `json:"storage_class"`
17+
ClusterDomainSuffix string `json:"cluster_domain_suffix"`
18+
EnvproxyAccessURL string `json:"envproxy_access_url" validate:"required"`
19+
DevurlHost string `json:"devurl_host"`
20+
SSHEnabled bool `json:"ssh_enabled"`
21+
NamespaceWhitelist []string `json:"namespace_whitelist"`
22+
OrgWhitelist []string `json:"org_whitelist"`
23+
}
24+
25+
// WorkspaceProviderStatus represents the configuration state of a workspace provider.
26+
type WorkspaceProviderStatus string
27+
28+
// Workspace Provider statuses.
29+
const (
30+
WorkspaceProviderPending WorkspaceProviderStatus = "pending"
31+
WorkspaceProviderReady WorkspaceProviderStatus = "ready"
32+
)
33+
34+
// WorkspaceProviderByID fetches a workspace provider entity by its unique ID.
35+
func (c *Client) WorkspaceProviderByID(ctx context.Context, id string) (*WorkspaceProvider, error) {
36+
var wp WorkspaceProvider
37+
err := c.requestBody(ctx, http.MethodGet, "/api/private/resource-pools/"+id, nil, &wp)
38+
if err != nil {
39+
return nil, err
40+
}
41+
return &wp, nil
42+
}
43+
44+
// WorkspaceProviders fetches all workspace providers known to the Coder control plane.
45+
func (c *Client) WorkspaceProviders(ctx context.Context) ([]WorkspaceProvider, error) {
46+
var providers []WorkspaceProvider
47+
err := c.requestBody(ctx, http.MethodGet, "/api/private/resource-pools", nil, &providers)
48+
if err != nil {
49+
return nil, err
50+
}
51+
return providers, nil
52+
}
53+
54+
// CreateWorkspaceProviderReq defines the request parameters for creating a new workspace provider entity.
55+
type CreateWorkspaceProviderReq struct {
56+
Name string `json:"name"`
57+
}
58+
59+
// CreateWorkspaceProviderRes defines the response from creating a new workspace provider entity.
60+
type CreateWorkspaceProviderRes struct {
61+
ID string `json:"id"`
62+
Name string `json:"name"`
63+
Status WorkspaceProviderStatus `json:"status"`
64+
EnvproxyToken string `json:"envproxy_token"`
65+
}
66+
67+
// CreateWorkspaceProvider creates a new WorkspaceProvider entity.
68+
func (c *Client) CreateWorkspaceProvider(ctx context.Context, req CreateWorkspaceProviderReq) (*CreateWorkspaceProviderRes, error) {
69+
var res CreateWorkspaceProviderRes
70+
err := c.requestBody(ctx, http.MethodPost, "/api/private/resource-pools", req, &res)
71+
if err != nil {
72+
return nil, err
73+
}
74+
return &res, nil
75+
}
76+
77+
// DeleteWorkspaceProviderByID deletes a workspace provider entity from the Coder control plane.
78+
func (c *Client) DeleteWorkspaceProviderByID(ctx context.Context, id string) error {
79+
return c.requestBody(ctx, http.MethodDelete, "/api/private/resource-pools/"+id, nil, nil)
80+
}

docs/coder.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ coder provides a CLI for working with an existing Coder Enterprise installation
1717
* [coder images](coder_images.md) - Manage Coder images
1818
* [coder login](coder_login.md) - Authenticate this client for future operations
1919
* [coder logout](coder_logout.md) - Remove local authentication credentials if any exist
20+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
2021
* [coder sh](coder_sh.md) - Open a shell and execute commands in a Coder environment
2122
* [coder sync](coder_sync.md) - Establish a one way directory sync to a Coder environment
2223
* [coder tokens](coder_tokens.md) - manage Coder API tokens for the active user

docs/coder_providers.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## coder providers
2+
3+
Interact with Coder workspace providers
4+
5+
### Synopsis
6+
7+
Perform operations on the Coder Workspace Providers for the platform.
8+
9+
### Options
10+
11+
```
12+
-h, --help help for providers
13+
```
14+
15+
### Options inherited from parent commands
16+
17+
```
18+
-v, --verbose show verbose output
19+
```
20+
21+
### SEE ALSO
22+
23+
* [coder](coder.md) - coder provides a CLI for working with an existing Coder Enterprise installation
24+
* [coder providers create](coder_providers_create.md) - create a new workspace provider.
25+
* [coder providers ls](coder_providers_ls.md) - list workspace providers.
26+
* [coder providers rm](coder_providers_rm.md) - remove a workspace provider.
27+

docs/coder_providers_create.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## coder providers create
2+
3+
create a new workspace provider.
4+
5+
### Synopsis
6+
7+
Create a new Coder workspace provider.
8+
9+
```
10+
coder providers create [workspace_provider_name] [flags]
11+
```
12+
13+
### Examples
14+
15+
```
16+
# create a new workspace provider in a pending state
17+
coder providers create my-new-workspace-provider
18+
```
19+
20+
### Options
21+
22+
```
23+
-h, --help help for create
24+
```
25+
26+
### Options inherited from parent commands
27+
28+
```
29+
-v, --verbose show verbose output
30+
```
31+
32+
### SEE ALSO
33+
34+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
35+

docs/coder_providers_ls.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## coder providers ls
2+
3+
list workspace providers.
4+
5+
### Synopsis
6+
7+
List all Coder workspace providers.
8+
9+
```
10+
coder providers ls [flags]
11+
```
12+
13+
### Examples
14+
15+
```
16+
# list workspace providers
17+
coder providers ls
18+
```
19+
20+
### Options
21+
22+
```
23+
-h, --help help for ls
24+
```
25+
26+
### Options inherited from parent commands
27+
28+
```
29+
-v, --verbose show verbose output
30+
```
31+
32+
### SEE ALSO
33+
34+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
35+

docs/coder_providers_rm.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## coder providers rm
2+
3+
remove a workspace provider.
4+
5+
### Synopsis
6+
7+
Remove an existing Coder workspace provider.
8+
9+
```
10+
coder providers rm [workspace_provider_id] [flags]
11+
```
12+
13+
### Examples
14+
15+
```
16+
# remove a new workspace provider by id
17+
coder providers rm my-workspace-provider-id
18+
```
19+
20+
### Options
21+
22+
```
23+
-h, --help help for rm
24+
```
25+
26+
### Options inherited from parent commands
27+
28+
```
29+
-v, --verbose show verbose output
30+
```
31+
32+
### SEE ALSO
33+
34+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
35+

internal/cmd/cmd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func Make() *cobra.Command {
3737
resourceCmd(),
3838
completionCmd(),
3939
imgsCmd(),
40+
providersCmd(),
4041
genDocsCmd(app),
4142
)
4243
app.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "show verbose output")

internal/cmd/configssh.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,16 @@ func configSSH(configpath *string, remove *bool) func(cmd *cobra.Command, _ []st
104104
return xerrors.New("no environments found")
105105
}
106106

107-
envsWithPools, err := coderutil.EnvsWithPool(ctx, client, envs)
107+
envsWithProviders, err := coderutil.EnvsWithProvider(ctx, client, envs)
108108
if err != nil {
109-
return xerrors.Errorf("resolve env pools: %w", err)
109+
return xerrors.Errorf("resolve env workspace providers: %w", err)
110110
}
111111

112-
if !sshAvailable(envsWithPools) {
112+
if !sshAvailable(envsWithProviders) {
113113
return xerrors.New("SSH is disabled or not available for any environments in your Coder Enterprise deployment.")
114114
}
115115

116-
newConfig := makeNewConfigs(user.Username, envsWithPools, privateKeyFilepath)
116+
newConfig := makeNewConfigs(user.Username, envsWithProviders, privateKeyFilepath)
117117

118118
err = os.MkdirAll(filepath.Dir(*configpath), os.ModePerm)
119119
if err != nil {
@@ -157,9 +157,9 @@ func removeOldConfig(config string) (string, bool) {
157157
}
158158

159159
// sshAvailable returns true if SSH is available for at least one environment.
160-
func sshAvailable(envs []coderutil.EnvWithPool) bool {
160+
func sshAvailable(envs []coderutil.EnvWithWorkspaceProvider) bool {
161161
for _, env := range envs {
162-
if env.Pool.SSHEnabled {
162+
if env.WorkspaceProvider.SSHEnabled {
163163
return true
164164
}
165165
}
@@ -174,19 +174,19 @@ func writeSSHKey(ctx context.Context, client *coder.Client, privateKeyPath strin
174174
return ioutil.WriteFile(privateKeyPath, []byte(key.PrivateKey), 0600)
175175
}
176176

177-
func makeNewConfigs(userName string, envs []coderutil.EnvWithPool, privateKeyFilepath string) string {
177+
func makeNewConfigs(userName string, envs []coderutil.EnvWithWorkspaceProvider, privateKeyFilepath string) string {
178178
newConfig := fmt.Sprintf("\n%s\n%s\n\n", sshStartToken, sshStartMessage)
179179
for _, env := range envs {
180-
if !env.Pool.SSHEnabled {
181-
clog.LogWarn(fmt.Sprintf("SSH is not enabled for pool %q", env.Pool.Name),
180+
if !env.WorkspaceProvider.SSHEnabled {
181+
clog.LogWarn(fmt.Sprintf("SSH is not enabled for workspace provider %q", env.WorkspaceProvider.Name),
182182
clog.BlankLine,
183-
clog.Tipf("ask an infrastructure administrator to enable SSH for this resource pool"),
183+
clog.Tipf("ask an infrastructure administrator to enable SSH for this workspace provider"),
184184
)
185185
continue
186186
}
187-
u, err := url.Parse(env.Pool.AccessURL)
187+
u, err := url.Parse(env.WorkspaceProvider.EnvproxyAccessURL)
188188
if err != nil {
189-
clog.LogWarn("invalid access url", clog.Causef("malformed url: %q", env.Pool.AccessURL))
189+
clog.LogWarn("invalid access url", clog.Causef("malformed url: %q", env.WorkspaceProvider.EnvproxyAccessURL))
190190
continue
191191
}
192192
newConfig += makeSSHConfig(u.Host, userName, env.Env.Name, privateKeyFilepath)

0 commit comments

Comments
 (0)
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