Skip to content

Commit 287854a

Browse files
mtojekpull[bot]
authored andcommitted
feat: Add provisioner force-cancel flag (#4947)
* feat: Add provisionerd force cancel flag * Golden files * Fix: typesGenerated.ts * Use single struct for Provisioner config
1 parent ca03192 commit 287854a

File tree

7 files changed

+221
-189
lines changed

7 files changed

+221
-189
lines changed

cli/deployment/config.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,6 @@ func newConfig() *codersdk.DeploymentConfig {
151151
Flag: "in-memory",
152152
Hidden: true,
153153
},
154-
ProvisionerDaemons: &codersdk.DeploymentConfigField[int]{
155-
Name: "Provisioner Daemons",
156-
Usage: "Number of provisioner daemons to create on start. If builds are stuck in queued state for a long time, consider increasing this.",
157-
Flag: "provisioner-daemons",
158-
Default: 3,
159-
},
160154
PostgresURL: &codersdk.DeploymentConfigField[string]{
161155
Name: "Postgres Connection URL",
162156
Usage: "URL of a PostgreSQL database. If empty, PostgreSQL binaries will be downloaded from Maven (https://repo1.maven.org/maven2) and store all data in the config root. Access the built-in database with \"coder server postgres-builtin-url\".",
@@ -359,6 +353,20 @@ func newConfig() *codersdk.DeploymentConfig {
359353
Flag: "user-workspace-quota",
360354
Enterprise: true,
361355
},
356+
Provisioner: &codersdk.ProvisionerConfig{
357+
Daemons: &codersdk.DeploymentConfigField[int]{
358+
Name: "Provisioner Daemons",
359+
Usage: "Number of provisioner daemons to create on start. If builds are stuck in queued state for a long time, consider increasing this.",
360+
Flag: "provisioner-daemons",
361+
Default: 3,
362+
},
363+
ForceCancelInterval: &codersdk.DeploymentConfigField[time.Duration]{
364+
Name: "Force Cancel Interval",
365+
Usage: "Time to force cancel provisioning tasks that are stuck.",
366+
Flag: "provisioner-force-cancel-interval",
367+
Default: 10 * time.Minute,
368+
},
369+
},
362370
}
363371
}
364372

cli/deployment/config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestConfig(t *testing.T) {
4747
require.Equal(t, config.Pprof.Enable.Value, true)
4848
require.Equal(t, config.Prometheus.Address.Value, "hello-world")
4949
require.Equal(t, config.Prometheus.Enable.Value, true)
50-
require.Equal(t, config.ProvisionerDaemons.Value, 5)
50+
require.Equal(t, config.Provisioner.Daemons.Value, 5)
5151
require.Equal(t, config.SecureAuthCookie.Value, true)
5252
require.Equal(t, config.SSHKeygenAlgorithm.Value, "potato")
5353
require.Equal(t, config.Telemetry.Enable.Value, false)

cli/server.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -562,8 +562,8 @@ func Server(vip *viper.Viper, newAPI func(context.Context, *coderd.Options) (*co
562562
}
563563
}()
564564
provisionerdMetrics := provisionerd.NewMetrics(options.PrometheusRegistry)
565-
for i := 0; i < cfg.ProvisionerDaemons.Value; i++ {
566-
daemon, err := newProvisionerDaemon(ctx, coderAPI, provisionerdMetrics, logger, cfg.CacheDirectory.Value, errCh, false)
565+
for i := 0; i < cfg.Provisioner.Daemons.Value; i++ {
566+
daemon, err := newProvisionerDaemon(ctx, coderAPI, provisionerdMetrics, logger, cfg, errCh, false)
567567
if err != nil {
568568
return xerrors.Errorf("create provisioner daemon: %w", err)
569569
}
@@ -832,7 +832,7 @@ func newProvisionerDaemon(
832832
coderAPI *coderd.API,
833833
metrics provisionerd.Metrics,
834834
logger slog.Logger,
835-
cacheDir string,
835+
cfg *codersdk.DeploymentConfig,
836836
errCh chan error,
837837
dev bool,
838838
) (srv *provisionerd.Server, err error) {
@@ -843,9 +843,9 @@ func newProvisionerDaemon(
843843
}
844844
}()
845845

846-
err = os.MkdirAll(cacheDir, 0o700)
846+
err = os.MkdirAll(cfg.CacheDirectory.Value, 0o700)
847847
if err != nil {
848-
return nil, xerrors.Errorf("mkdir %q: %w", cacheDir, err)
848+
return nil, xerrors.Errorf("mkdir %q: %w", cfg.CacheDirectory.Value, err)
849849
}
850850

851851
terraformClient, terraformServer := provisionersdk.TransportPipe()
@@ -861,7 +861,7 @@ func newProvisionerDaemon(
861861
ServeOptions: &provisionersdk.ServeOptions{
862862
Listener: terraformServer,
863863
},
864-
CachePath: cacheDir,
864+
CachePath: cfg.CacheDirectory.Value,
865865
Logger: logger,
866866
})
867867
if err != nil && !xerrors.Is(err, context.Canceled) {
@@ -902,13 +902,14 @@ func newProvisionerDaemon(
902902
provisioners[string(database.ProvisionerTypeEcho)] = proto.NewDRPCProvisionerClient(provisionersdk.Conn(echoClient))
903903
}
904904
return provisionerd.New(coderAPI.ListenProvisionerDaemon, &provisionerd.Options{
905-
Logger: logger,
906-
PollInterval: 500 * time.Millisecond,
907-
UpdateInterval: 500 * time.Millisecond,
908-
Provisioners: provisioners,
909-
WorkDirectory: tempDir,
910-
TracerProvider: coderAPI.TracerProvider,
911-
Metrics: &metrics,
905+
Logger: logger,
906+
PollInterval: 500 * time.Millisecond,
907+
UpdateInterval: 500 * time.Millisecond,
908+
ForceCancelInterval: cfg.Provisioner.ForceCancelInterval.Value,
909+
Provisioners: provisioners,
910+
WorkDirectory: tempDir,
911+
TracerProvider: coderAPI.TracerProvider,
912+
Metrics: &metrics,
912913
}), nil
913914
}
914915

0 commit comments

Comments
 (0)