Skip to content

Commit 89c7af1

Browse files
committed
Support legacy start and stop script format
1 parent 70ebaf3 commit 89c7af1

File tree

12 files changed

+763
-647
lines changed

12 files changed

+763
-647
lines changed

agent/agent.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -976,13 +976,13 @@ func (a *agent) runDERPMapSubscriber(ctx context.Context, network *tailnet.Conn)
976976
}
977977

978978
func (a *agent) runScript(ctx context.Context, script codersdk.WorkspaceAgentScript) (err error) {
979-
if script.Script == "" {
979+
if script.Source == "" {
980980
return nil
981981
}
982982

983983
logger := a.logger.With(slog.F("log_source", script.LogSourceDisplayName))
984984

985-
logger.Info(ctx, "running script", slog.F("script", script.Script))
985+
logger.Info(ctx, "running script", slog.F("script", script.Source))
986986
fileWriter, err := a.filesystem.OpenFile(filepath.Join(a.logDir, fmt.Sprintf("coder-%s-script.log", script.LogSourceDisplayName)), os.O_CREATE|os.O_RDWR, 0o600)
987987
if err != nil {
988988
return xerrors.Errorf("open %s script log file: %w", script.LogSourceDisplayName, err)
@@ -994,7 +994,7 @@ func (a *agent) runScript(ctx context.Context, script codersdk.WorkspaceAgentScr
994994
}
995995
}()
996996

997-
cmdPty, err := a.sshServer.CreateCommand(ctx, script.Script, nil)
997+
cmdPty, err := a.sshServer.CreateCommand(ctx, script.Source, nil)
998998
if err != nil {
999999
return xerrors.Errorf("%s script: create command: %w", script.LogSourceDisplayName, err)
10001000
}

agent/agent_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,7 +1209,7 @@ func TestAgent_Lifecycle(t *testing.T) {
12091209

12101210
_, client, _, _, _ := setupAgent(t, agentsdk.Manifest{
12111211
Scripts: []codersdk.WorkspaceAgentScript{{
1212-
Script: "sleep 3",
1212+
Source: "sleep 3",
12131213
Timeout: time.Nanosecond,
12141214
RunOnStart: true,
12151215
}},
@@ -1234,7 +1234,7 @@ func TestAgent_Lifecycle(t *testing.T) {
12341234

12351235
_, client, _, _, _ := setupAgent(t, agentsdk.Manifest{
12361236
Scripts: []codersdk.WorkspaceAgentScript{{
1237-
Script: "false",
1237+
Source: "false",
12381238
Timeout: 30 * time.Second,
12391239
RunOnStart: true,
12401240
}},
@@ -1259,7 +1259,7 @@ func TestAgent_Lifecycle(t *testing.T) {
12591259

12601260
_, client, _, _, _ := setupAgent(t, agentsdk.Manifest{
12611261
Scripts: []codersdk.WorkspaceAgentScript{{
1262-
Script: "true",
1262+
Source: "true",
12631263
Timeout: 30 * time.Second,
12641264
RunOnStart: true,
12651265
}},
@@ -1284,7 +1284,7 @@ func TestAgent_Lifecycle(t *testing.T) {
12841284

12851285
_, client, _, _, closer := setupAgent(t, agentsdk.Manifest{
12861286
Scripts: []codersdk.WorkspaceAgentScript{{
1287-
Script: "sleep 3",
1287+
Source: "sleep 3",
12881288
Timeout: 30 * time.Second,
12891289
RunOnStop: true,
12901290
}},
@@ -1325,7 +1325,7 @@ func TestAgent_Lifecycle(t *testing.T) {
13251325

13261326
_, client, _, _, closer := setupAgent(t, agentsdk.Manifest{
13271327
Scripts: []codersdk.WorkspaceAgentScript{{
1328-
Script: "sleep 3",
1328+
Source: "sleep 3",
13291329
Timeout: time.Nanosecond,
13301330
RunOnStop: true,
13311331
}},
@@ -1367,7 +1367,7 @@ func TestAgent_Lifecycle(t *testing.T) {
13671367

13681368
_, client, _, _, closer := setupAgent(t, agentsdk.Manifest{
13691369
Scripts: []codersdk.WorkspaceAgentScript{{
1370-
Script: "false",
1370+
Source: "false",
13711371
Timeout: 30 * time.Second,
13721372
RunOnStop: true,
13731373
}},
@@ -1417,11 +1417,11 @@ func TestAgent_Lifecycle(t *testing.T) {
14171417
DERPMap: derpMap,
14181418
Scripts: []codersdk.WorkspaceAgentScript{{
14191419
LogSourceDisplayName: "startup",
1420-
Script: "echo 1",
1420+
Source: "echo 1",
14211421
RunOnStart: true,
14221422
}, {
14231423
LogSourceDisplayName: "shutdown",
1424-
Script: "echo " + expected,
1424+
Source: "echo " + expected,
14251425
RunOnStop: true,
14261426
}},
14271427
},

agent/agentscripts/agentscripts.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ func (r *Runner) Init(scripts []codersdk.WorkspaceAgentScript) error {
6565
r.scripts = scripts
6666

6767
for _, script := range scripts {
68-
if script.Schedule == "" {
68+
if script.CRON == "" {
6969
continue
7070
}
7171
script := script
72-
_, err := r.cron.AddFunc(script.Schedule, func() {
72+
_, err := r.cron.AddFunc(script.CRON, func() {
7373
err := r.run(script)
7474
if err != nil {
7575
r.Logger.Warn(r.ctx, "run agent script on schedule", slog.Error(err))
@@ -114,7 +114,7 @@ func (r *Runner) Execute(filter func(script codersdk.WorkspaceAgentScript) bool)
114114
func (r *Runner) run(script codersdk.WorkspaceAgentScript) error {
115115
logger := r.Logger.With(slog.F("log_source", script.LogSourceDisplayName))
116116
ctx := r.ctx
117-
logger.Info(ctx, "running agent script", slog.F("script", script.Script))
117+
logger.Info(ctx, "running agent script", slog.F("script", script.Source))
118118
fileWriter, err := r.Filesystem.OpenFile(filepath.Join(r.LogDir, fmt.Sprintf("coder-%s-script.log", script.LogSourceDisplayName)), os.O_CREATE|os.O_RDWR, 0o600)
119119
if err != nil {
120120
return xerrors.Errorf("open %s script log file: %w", script.LogSourceDisplayName, err)
@@ -134,7 +134,7 @@ func (r *Runner) run(script codersdk.WorkspaceAgentScript) error {
134134
defer cancel()
135135
}
136136

137-
cmdPty, err := r.SSHServer.CreateCommand(ctx, script.Script, nil)
137+
cmdPty, err := r.SSHServer.CreateCommand(ctx, script.Source, nil)
138138
if err != nil {
139139
return xerrors.Errorf("%s script: create command: %w", script.LogSourceDisplayName, err)
140140
}

agent/agentscripts/agentscripts_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func TestExecuteBasic(t *testing.T) {
3232
defer runner.Close()
3333
err := runner.Init([]codersdk.WorkspaceAgentScript{{
3434
LogSourceDisplayName: "test",
35-
Script: "echo hello",
35+
Source: "echo hello",
3636
}})
3737
require.NoError(t, err)
3838
require.NoError(t, runner.Execute(func(script codersdk.WorkspaceAgentScript) bool {
@@ -47,7 +47,7 @@ func TestTimeout(t *testing.T) {
4747
runner := setup(t, nil)
4848
defer runner.Close()
4949
err := runner.Init([]codersdk.WorkspaceAgentScript{{
50-
Script: "sleep 3",
50+
Source: "sleep 3",
5151
Timeout: time.Nanosecond,
5252
}})
5353
require.NoError(t, err)

cli/cliui/agent_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,10 @@ func TestAgent(t *testing.T) {
288288

289289
var buf bytes.Buffer
290290
agent := codersdk.WorkspaceAgent{
291-
ID: uuid.New(),
292-
Status: codersdk.WorkspaceAgentConnecting,
293-
StartupScriptBehavior: codersdk.WorkspaceAgentStartupScriptBehaviorNonBlocking,
294-
CreatedAt: time.Now(),
295-
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
291+
ID: uuid.New(),
292+
Status: codersdk.WorkspaceAgentConnecting,
293+
CreatedAt: time.Now(),
294+
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
296295
}
297296
logs := make(chan []codersdk.WorkspaceAgentLog, 1)
298297

cli/ssh.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,11 @@ func (r *RootCmd) ssh() *clibase.Cmd {
143143
case "no":
144144
wait = false
145145
case "auto":
146-
switch workspaceAgent.StartupScriptBehavior {
147-
case codersdk.WorkspaceAgentStartupScriptBehaviorBlocking:
148-
wait = true
149-
case codersdk.WorkspaceAgentStartupScriptBehaviorNonBlocking:
150-
wait = false
151-
default:
152-
return xerrors.Errorf("unknown startup script behavior %q", workspaceAgent.StartupScriptBehavior)
146+
for _, script := range workspaceAgent.Scripts {
147+
if script.StartBlocksLogin {
148+
wait = true
149+
break
150+
}
153151
}
154152
default:
155153
return xerrors.Errorf("unknown wait value %q", waitEnum)

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,32 +1250,21 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
12501250

12511251
agentID := uuid.New()
12521252
dbAgent, err := db.InsertWorkspaceAgent(ctx, database.InsertWorkspaceAgentParams{
1253-
ID: agentID,
1254-
CreatedAt: dbtime.Now(),
1255-
UpdatedAt: dbtime.Now(),
1256-
ResourceID: resource.ID,
1257-
Name: prAgent.Name,
1258-
AuthToken: authToken,
1259-
AuthInstanceID: instanceID,
1260-
Architecture: prAgent.Architecture,
1261-
EnvironmentVariables: env,
1262-
Directory: prAgent.Directory,
1263-
OperatingSystem: prAgent.OperatingSystem,
1264-
StartupScript: sql.NullString{
1265-
String: prAgent.StartupScript,
1266-
Valid: prAgent.StartupScript != "",
1267-
},
1268-
ConnectionTimeoutSeconds: prAgent.GetConnectionTimeoutSeconds(),
1269-
TroubleshootingURL: prAgent.GetTroubleshootingUrl(),
1270-
MOTDFile: prAgent.GetMotdFile(),
1271-
StartupScriptBehavior: database.StartupScriptBehavior(prAgent.GetStartupScriptBehavior()),
1272-
StartupScriptTimeoutSeconds: prAgent.GetStartupScriptTimeoutSeconds(),
1273-
ShutdownScript: sql.NullString{
1274-
String: prAgent.ShutdownScript,
1275-
Valid: prAgent.ShutdownScript != "",
1276-
},
1277-
ShutdownScriptTimeoutSeconds: prAgent.GetShutdownScriptTimeoutSeconds(),
1278-
DisplayApps: convertDisplayApps(prAgent.GetDisplayApps()),
1253+
ID: agentID,
1254+
CreatedAt: dbtime.Now(),
1255+
UpdatedAt: dbtime.Now(),
1256+
ResourceID: resource.ID,
1257+
Name: prAgent.Name,
1258+
AuthToken: authToken,
1259+
AuthInstanceID: instanceID,
1260+
Architecture: prAgent.Architecture,
1261+
EnvironmentVariables: env,
1262+
Directory: prAgent.Directory,
1263+
OperatingSystem: prAgent.OperatingSystem,
1264+
ConnectionTimeoutSeconds: prAgent.GetConnectionTimeoutSeconds(),
1265+
TroubleshootingURL: prAgent.GetTroubleshootingUrl(),
1266+
MOTDFile: prAgent.GetMotdFile(),
1267+
DisplayApps: convertDisplayApps(prAgent.GetDisplayApps()),
12791268
})
12801269
if err != nil {
12811270
return xerrors.Errorf("insert agent: %w", err)

codersdk/workspaceagents.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,11 @@ type WorkspaceAgentLogSource struct {
190190
type WorkspaceAgentScript struct {
191191
LogSourceDisplayName string `json:"log_source_display_name"`
192192
LogSourceID uuid.UUID `json:"log_source_id" format:"uuid"`
193-
Script string `json:"script"`
194-
Schedule string `json:"schedule"`
193+
Source string `json:"source"`
194+
CRON string `json:"cron"`
195195
RunOnStart bool `json:"run_on_start"`
196196
RunOnStop bool `json:"run_on_stop"`
197-
LoginBeforeReady bool `json:"login_before_ready"`
197+
StartBlocksLogin bool `json:"start_blocks_login"`
198198
Timeout time.Duration `json:"timeout_seconds"`
199199
}
200200

@@ -767,10 +767,11 @@ const (
767767
)
768768

769769
type WorkspaceAgentLog struct {
770-
ID int64 `json:"id"`
771-
CreatedAt time.Time `json:"created_at" format:"date-time"`
772-
Output string `json:"output"`
773-
Level LogLevel `json:"level"`
770+
ID int64 `json:"id"`
771+
CreatedAt time.Time `json:"created_at" format:"date-time"`
772+
Output string `json:"output"`
773+
Level LogLevel `json:"level"`
774+
LogSourceID uuid.UUID `json:"log_source_id" format:"uuid"`
774775
}
775776

776777
type AgentSubsystem string

0 commit comments

Comments
 (0)