2023-01-19 21:56:41 +00:00
package cli
import (
"fmt"
"time"
2023-03-23 22:42:20 +00:00
"github.com/coder/coder/cli/clibase"
2023-01-19 21:56:41 +00:00
"github.com/coder/coder/cli/cliui"
"github.com/coder/coder/codersdk"
)
2023-03-23 22:42:20 +00:00
func ( r * RootCmd ) restart ( ) * clibase . Cmd {
client := new ( codersdk . Client )
cmd := & clibase . Cmd {
2023-01-19 21:56:41 +00:00
Annotations : workspaceCommand ,
Use : "restart <workspace>" ,
Short : "Restart a workspace" ,
2023-03-23 22:42:20 +00:00
Middleware : clibase . Chain (
clibase . RequireNArgs ( 1 ) ,
r . InitClient ( client ) ,
) ,
Options : clibase . OptionSet {
cliui . SkipPromptOption ( ) ,
} ,
Handler : func ( inv * clibase . Invocation ) error {
ctx := inv . Context ( )
out := inv . Stdout
2023-01-19 21:56:41 +00:00
2023-03-23 22:42:20 +00:00
_ , err := cliui . Prompt ( inv , cliui . PromptOptions {
2023-01-19 21:56:41 +00:00
Text : "Confirm restart workspace?" ,
IsConfirm : true ,
} )
if err != nil {
return err
}
2023-03-23 22:42:20 +00:00
workspace , err := namedWorkspace ( inv . Context ( ) , client , inv . Args [ 0 ] )
2023-01-19 21:56:41 +00:00
if err != nil {
return err
}
build , err := client . CreateWorkspaceBuild ( ctx , workspace . ID , codersdk . CreateWorkspaceBuildRequest {
Transition : codersdk . WorkspaceTransitionStop ,
} )
if err != nil {
return err
}
err = cliui . WorkspaceBuild ( ctx , out , client , build . ID )
if err != nil {
return err
}
build , err = client . CreateWorkspaceBuild ( ctx , workspace . ID , codersdk . CreateWorkspaceBuildRequest {
Transition : codersdk . WorkspaceTransitionStart ,
} )
if err != nil {
return err
}
err = cliui . WorkspaceBuild ( ctx , out , client , build . ID )
if err != nil {
return err
}
_ , _ = fmt . Fprintf ( out , "\nThe %s workspace has been restarted at %s!\n" , cliui . Styles . Keyword . Render ( workspace . Name ) , cliui . Styles . DateTimeStamp . Render ( time . Now ( ) . Format ( time . Stamp ) ) )
return nil
} ,
}
return cmd
}