mirror of
https://github.com/coder/coder.git
synced 2025-07-18 14:17:22 +00:00
fix(cli): ssh: auto-update workspace (#11773)
This commit is contained in:
25
cli/ssh.go
25
cli/ssh.go
@ -6,6 +6,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/exec"
|
||||
@ -575,13 +576,27 @@ func getWorkspaceAndAgent(ctx context.Context, inv *clibase.Invocation, client *
|
||||
codersdk.WorkspaceStatusStopped,
|
||||
)
|
||||
}
|
||||
// startWorkspace based on the last build parameters.
|
||||
|
||||
// Start workspace based on the last build parameters.
|
||||
// It's possible for a workspace build to fail due to the template requiring starting
|
||||
// workspaces with the active version.
|
||||
_, _ = fmt.Fprintf(inv.Stderr, "Workspace was stopped, starting workspace to allow connecting to %q...\n", workspace.Name)
|
||||
build, err := startWorkspace(inv, client, workspace, workspaceParameterFlags{}, WorkspaceStart)
|
||||
if err != nil {
|
||||
return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, xerrors.Errorf("unable to start workspace: %w", err)
|
||||
_, err = startWorkspace(inv, client, workspace, workspaceParameterFlags{}, WorkspaceStart)
|
||||
if cerr, ok := codersdk.AsError(err); ok && cerr.StatusCode() == http.StatusForbidden {
|
||||
_, _ = fmt.Fprintln(inv.Stdout, "Unable to start the workspace with template version from last build. The auto-update policy may require you to restart with the current active template version.")
|
||||
_, err = startWorkspace(inv, client, workspace, workspaceParameterFlags{}, WorkspaceUpdate)
|
||||
if err != nil {
|
||||
return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, xerrors.Errorf("start workspace with active template version: %w", err)
|
||||
}
|
||||
} else if err != nil {
|
||||
return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, xerrors.Errorf("start workspace with current template version: %w", err)
|
||||
}
|
||||
|
||||
// Refresh workspace state so that `outdated`, `build`,`template_*` fields are up-to-date.
|
||||
workspace, err = namedWorkspace(ctx, client, workspaceParts[0])
|
||||
if err != nil {
|
||||
return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, err
|
||||
}
|
||||
workspace.LatestBuild = build
|
||||
}
|
||||
if workspace.LatestBuild.Job.CompletedAt == nil {
|
||||
err := cliui.WorkspaceBuild(ctx, inv.Stderr, client, workspace.LatestBuild.ID)
|
||||
|
Reference in New Issue
Block a user