2022-08-26 09:28:38 +00:00
package cli
import (
"fmt"
"golang.org/x/xerrors"
2023-03-23 22:42:20 +00:00
"github.com/coder/coder/cli/clibase"
2022-08-26 09:28:38 +00:00
"github.com/coder/coder/cli/cliui"
"github.com/coder/coder/codersdk"
)
2023-03-23 22:42:20 +00:00
func ( r * RootCmd ) rename ( ) * clibase . Cmd {
client := new ( codersdk . Client )
cmd := & clibase . Cmd {
2022-08-26 09:28:38 +00:00
Annotations : workspaceCommand ,
Use : "rename <workspace> <new name>" ,
Short : "Rename a workspace" ,
2023-03-23 22:42:20 +00:00
Middleware : clibase . Chain (
clibase . RequireNArgs ( 2 ) ,
r . InitClient ( client ) ,
) ,
Handler : func ( inv * clibase . Invocation ) error {
workspace , err := namedWorkspace ( inv . Context ( ) , client , inv . Args [ 0 ] )
2022-08-26 09:28:38 +00:00
if err != nil {
return xerrors . Errorf ( "get workspace: %w" , err )
}
2023-03-23 22:42:20 +00:00
_ , _ = fmt . Fprintf ( inv . Stdout , "%s\n\n" ,
2022-12-19 20:11:10 +00:00
cliui . Styles . Wrap . Render ( "WARNING: A rename can result in data loss if a resource references the workspace name in the template (e.g volumes). Please backup any data before proceeding." ) ,
2022-08-26 09:28:38 +00:00
)
2023-03-23 22:42:20 +00:00
_ , _ = fmt . Fprintf ( inv . Stdout , "See: %s\n\n" , "https://coder.com/docs/coder-oss/latest/templates/resource-persistence#%EF%B8%8F-persistence-pitfalls" )
_ , err = cliui . Prompt ( inv , cliui . PromptOptions {
2022-08-26 09:28:38 +00:00
Text : fmt . Sprintf ( "Type %q to confirm rename:" , workspace . Name ) ,
Validate : func ( s string ) error {
if s == workspace . Name {
return nil
}
return xerrors . Errorf ( "Input %q does not match %q" , s , workspace . Name )
} ,
} )
if err != nil {
return err
}
2023-03-23 22:42:20 +00:00
err = client . UpdateWorkspace ( inv . Context ( ) , workspace . ID , codersdk . UpdateWorkspaceRequest {
Name : inv . Args [ 1 ] ,
2022-08-26 09:28:38 +00:00
} )
if err != nil {
return xerrors . Errorf ( "rename workspace: %w" , err )
}
2023-03-23 22:42:20 +00:00
_ , _ = fmt . Fprintf ( inv . Stdout , "Workspace %q renamed to %q\n" , workspace . Name , inv . Args [ 1 ] )
2022-08-26 09:28:38 +00:00
return nil
} ,
}
2023-03-23 22:42:20 +00:00
cmd . Options = append ( cmd . Options , cliui . SkipPromptOption ( ) )
2022-08-26 09:28:38 +00:00
return cmd
}