feat: add agentfake scaletest subcommand (#25072)

This PR builds on top of https://github.com/coder/coder/pull/25070 to
add a way of running the larger "fake agent" manager via the existing
CLI, pulling in the URL/credentials already set.

With this, we can run a pod per scaletest region to act as all the
workspaces in that region.


This is in a new subcommand `scaletest agentfake` currently.

---------

Signed-off-by: Callum Styan <callumstyan@gmail.com>
This commit is contained in:
Callum Styan
2026-05-15 14:36:54 -07:00
committed by GitHub
parent d9976768db
commit 191dd230ae
7 changed files with 112 additions and 12 deletions
+7 -7
View File
@@ -472,7 +472,7 @@ func (f *workspaceTargetFlags) getTargetedWorkspaces(ctx context.Context, client
return workspaces[targetStart:targetEnd], nil
}
func requireAdmin(ctx context.Context, client *codersdk.Client) (codersdk.User, error) {
func RequireAdmin(ctx context.Context, client *codersdk.Client) (codersdk.User, error) {
me, err := client.User(ctx, codersdk.Me)
if err != nil {
return codersdk.User{}, xerrors.Errorf("fetch current user: %w", err)
@@ -617,7 +617,7 @@ func (r *RootCmd) scaletestCleanup() *serpent.Command {
ctx := inv.Context()
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
@@ -851,7 +851,7 @@ func (r *RootCmd) scaletestCreateWorkspaces() *serpent.Command {
ctx := inv.Context()
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
@@ -1051,7 +1051,7 @@ func (r *RootCmd) scaletestCreateWorkspaces() *serpent.Command {
{
Flag: "no-wait-for-agents",
Env: "CODER_SCALETEST_NO_WAIT_FOR_AGENTS",
Description: `Do not wait for agents to start before marking the test as succeeded. This can be useful if you are running the test against a template that does not start the agent quickly.`,
Description: `Do not wait for agents to start before marking the test as succeeded. This can be useful if you are running the test against a template that does not start the agent quickly. This is REQUIRED for templates whose workspaces use coder_external_agent resources, since external agents never connect on their own; pair with "coder exp scaletest agentfake" to drive those agents.`,
Value: serpent.BoolOf(&noWaitForAgents),
},
{
@@ -1177,7 +1177,7 @@ func (r *RootCmd) scaletestWorkspaceUpdates() *serpent.Command {
defer stop()
ctx = notifyCtx
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
@@ -1473,7 +1473,7 @@ func (r *RootCmd) scaletestWorkspaceTraffic() *serpent.Command {
defer stop()
ctx = notifyCtx
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
@@ -1925,7 +1925,7 @@ func (r *RootCmd) scaletestAutostart() *serpent.Command {
defer stop()
ctx = notifyCtx
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
+1 -1
View File
@@ -90,7 +90,7 @@ Examples:
var userConfig createusers.Config
if bridge.RequestMode(mode) == bridge.RequestModeBridge {
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
+1 -1
View File
@@ -65,7 +65,7 @@ func (r *RootCmd) scaletestDynamicParameters() *serpent.Command {
return err
}
_, err = requireAdmin(ctx, client)
_, err = RequireAdmin(ctx, client)
if err != nil {
return err
}
+1 -1
View File
@@ -61,7 +61,7 @@ func (r *RootCmd) scaletestNotifications() *serpent.Command {
defer stop()
ctx = notifyCtx
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
+1 -1
View File
@@ -52,7 +52,7 @@ func (r *RootCmd) scaletestPrebuilds() *serpent.Command {
defer stop()
ctx = notifyCtx
me, err := requireAdmin(ctx, client)
me, err := RequireAdmin(ctx, client)
if err != nil {
return err
}
+1 -1
View File
@@ -67,7 +67,7 @@ After all runners connect, it waits for the baseline duration before triggering
return err
}
_, err = requireAdmin(ctx, client)
_, err = RequireAdmin(ctx, client)
if err != nil {
return err
}