diff --git a/coder-sdk/interface.go b/coder-sdk/interface.go index 93043ee7..ef9995c1 100644 --- a/coder-sdk/interface.go +++ b/coder-sdk/interface.go @@ -232,4 +232,7 @@ type Client interface { // UnCordonWorkspaceProvider changes an existing cordoned providers status to 'Ready'; // allowing it to continue creating new workspaces and provisioning resources for them. UnCordonWorkspaceProvider(ctx context.Context, id string) error + + // RenameWorkspaceProvider changes an existing providers name field. + RenameWorkspaceProvider(ctx context.Context, id string, name string) error } diff --git a/coder-sdk/workspace_providers.go b/coder-sdk/workspace_providers.go index 673dc63e..28710867 100644 --- a/coder-sdk/workspace_providers.go +++ b/coder-sdk/workspace_providers.go @@ -123,3 +123,18 @@ func (c *DefaultClient) UnCordonWorkspaceProvider(ctx context.Context, id string } return nil } + +// RenameWorkspaceProviderReq defines the request parameters for changing a workspace provider name. +type RenameWorkspaceProviderReq struct { + Name string `json:"name"` +} + +// RenameWorkspaceProvider changes an existing cordoned providers name field. +func (c *DefaultClient) RenameWorkspaceProvider(ctx context.Context, id string, name string) error { + req := RenameWorkspaceProviderReq{Name: name} + err := c.requestBody(ctx, http.MethodPatch, "/api/private/resource-pools/"+id, req, nil) + if err != nil { + return err + } + return nil +} diff --git a/internal/cmd/providers.go b/internal/cmd/providers.go index 678327d3..46074933 100644 --- a/internal/cmd/providers.go +++ b/internal/cmd/providers.go @@ -29,6 +29,7 @@ func providersCmd() *cobra.Command { deleteProviderCmd(), cordonProviderCmd(), unCordonProviderCmd(), + renameProviderCmd(), ) return cmd } @@ -284,3 +285,35 @@ coder providers uncordon my-workspace-provider`, } return cmd } + +func renameProviderCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "rename [old_name] [new_name]", + Args: xcobra.ExactArgs(2), + Short: "rename a workspace provider.", + Long: "Changes the name field of an existing workspace provider.", + Example: `# rename a workspace provider from 'built-in' to 'us-east-1' +coder providers rename build-in us-east-1`, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := cmd.Context() + client, err := newClient(ctx) + if err != nil { + return err + } + + oldName := args[0] + newName := args[1] + provider, err := coderutil.ProviderByName(ctx, client, oldName) + if err != nil { + return err + } + + if err := client.RenameWorkspaceProvider(ctx, provider.ID, newName); err != nil { + return err + } + clog.LogSuccess(fmt.Sprintf("provider %s successfully renamed to %s", oldName, newName)) + return nil + }, + } + return cmd +}