Skip to content

Commit 16384f8

Browse files
authored
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 f6130e2 commit 16384f8

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy