2022-03-22 19:17:50 +00:00
package cli
import (
2022-06-24 16:30:22 +00:00
"fmt"
2022-03-22 19:17:50 +00:00
"time"
2023-08-18 18:55:43 +00:00
"github.com/coder/coder/v2/cli/cliui"
"github.com/coder/coder/v2/codersdk"
2024-03-15 16:24:38 +00:00
"github.com/coder/serpent"
2022-03-22 19:17:50 +00:00
)
2022-05-02 16:08:52 +00:00
// nolint
2024-03-17 14:45:26 +00:00
func ( r * RootCmd ) deleteWorkspace ( ) * serpent . Command {
2022-09-06 17:07:00 +00:00
var orphan bool
2023-03-23 22:42:20 +00:00
client := new ( codersdk . Client )
2024-03-17 14:45:26 +00:00
cmd := & serpent . Command {
2022-05-09 22:42:02 +00:00
Annotations : workspaceCommand ,
Use : "delete <workspace>" ,
Short : "Delete a workspace" ,
2024-03-15 16:24:38 +00:00
Middleware : serpent . Chain (
serpent . RequireNArgs ( 1 ) ,
2023-03-23 22:42:20 +00:00
r . InitClient ( client ) ,
) ,
2024-03-15 16:24:38 +00:00
Handler : func ( inv * serpent . Invocation ) error {
2023-08-05 16:25:37 +00:00
workspace , err := namedWorkspace ( inv . Context ( ) , client , inv . Args [ 0 ] )
2022-05-20 15:59:04 +00:00
if err != nil {
return err
}
2023-08-05 16:25:37 +00:00
sinceLastUsed := time . Since ( workspace . LastUsedAt )
cliui . Infof ( inv . Stderr , "%v was last used %.0f days ago" , workspace . FullName ( ) , sinceLastUsed . Hours ( ) / 24 )
_ , err = cliui . Prompt ( inv , cliui . PromptOptions {
Text : "Confirm delete workspace?" ,
IsConfirm : true ,
Default : cliui . ConfirmNo ,
} )
2022-03-22 19:17:50 +00:00
if err != nil {
return err
}
2022-09-06 17:07:00 +00:00
var state [ ] byte
2023-03-23 22:42:20 +00:00
build , err := client . CreateWorkspaceBuild ( inv . Context ( ) , workspace . ID , codersdk . CreateWorkspaceBuildRequest {
2022-09-06 17:07:00 +00:00
Transition : codersdk . WorkspaceTransitionDelete ,
ProvisionerState : state ,
Orphan : orphan ,
2022-03-22 19:17:50 +00:00
} )
if err != nil {
return err
}
2022-06-24 16:30:22 +00:00
2023-03-23 22:42:20 +00:00
err = cliui . WorkspaceBuild ( inv . Context ( ) , inv . Stdout , client , build . ID )
2022-06-24 16:30:22 +00:00
if err != nil {
return err
}
2023-09-07 21:28:22 +00:00
_ , _ = fmt . Fprintf (
inv . Stdout ,
"\n%s has been deleted at %s!\n" , cliui . Keyword ( workspace . FullName ( ) ) ,
cliui . Timestamp ( time . Now ( ) ) ,
)
2022-06-24 16:30:22 +00:00
return nil
2022-03-22 19:17:50 +00:00
} ,
}
2024-03-15 16:24:38 +00:00
cmd . Options = serpent . OptionSet {
2023-03-23 22:42:20 +00:00
{
Flag : "orphan" ,
Description : "Delete a workspace without deleting its resources. This can delete a workspace in a broken state, but may also lead to unaccounted cloud resources." ,
2024-03-15 16:24:38 +00:00
Value : serpent . BoolOf ( & orphan ) ,
2023-03-23 22:42:20 +00:00
} ,
cliui . SkipPromptOption ( ) ,
}
2022-05-20 15:59:04 +00:00
return cmd
2022-03-22 19:17:50 +00:00
}