@@ -13,6 +13,7 @@ import (
13
13
"net/url"
14
14
"os"
15
15
"os/signal"
16
+ "path/filepath"
16
17
"strconv"
17
18
"time"
18
19
@@ -42,6 +43,7 @@ func start() *cobra.Command {
42
43
var (
43
44
accessURL string
44
45
address string
46
+ cacheDir string
45
47
dev bool
46
48
postgresURL string
47
49
provisionerDaemonCount uint8
@@ -164,7 +166,7 @@ func start() *cobra.Command {
164
166
165
167
provisionerDaemons := make ([]* provisionerd.Server , 0 )
166
168
for i := uint8 (0 ); i < provisionerDaemonCount ; i ++ {
167
- daemonClose , err := newProvisionerDaemon (cmd .Context (), client , logger )
169
+ daemonClose , err := newProvisionerDaemon (cmd .Context (), client , logger , cacheDir )
168
170
if err != nil {
169
171
return xerrors .Errorf ("create provisioner daemon: %w" , err )
170
172
}
@@ -312,6 +314,12 @@ func start() *cobra.Command {
312
314
}
313
315
root .Flags ().StringVarP (& accessURL , "access-url" , "" , os .Getenv ("CODER_ACCESS_URL" ), "Specifies the external URL to access Coder (uses $CODER_ACCESS_URL)." )
314
316
root .Flags ().StringVarP (& address , "address" , "a" , defaultAddress , "The address to serve the API and dashboard (uses $CODER_ADDRESS)." )
317
+ // systemd uses the CACHE_DIRECTORY environment variable!
318
+ defaultCacheDir := os .Getenv ("CACHE_DIRECTORY" )
319
+ if defaultCacheDir == "" {
320
+ defaultCacheDir = filepath .Join (os .TempDir (), ".coder-cache" )
321
+ }
322
+ root .Flags ().StringVarP (& cacheDir , "cache-dir" , "" , defaultCacheDir , "Specify a directory to cache binaries for provision operations." )
315
323
defaultDev , _ := strconv .ParseBool (os .Getenv ("CODER_DEV_MODE" ))
316
324
root .Flags ().BoolVarP (& dev , "dev" , "" , defaultDev , "Serve Coder in dev mode for tinkering (uses $CODER_DEV_MODE)." )
317
325
root .Flags ().StringVarP (& postgresURL , "postgres-url" , "" , "" ,
@@ -381,14 +389,15 @@ func createFirstUser(cmd *cobra.Command, client *codersdk.Client, cfg config.Roo
381
389
return nil
382
390
}
383
391
384
- func newProvisionerDaemon (ctx context.Context , client * codersdk.Client , logger slog.Logger ) (* provisionerd.Server , error ) {
392
+ func newProvisionerDaemon (ctx context.Context , client * codersdk.Client , logger slog.Logger , cacheDir string ) (* provisionerd.Server , error ) {
385
393
terraformClient , terraformServer := provisionersdk .TransportPipe ()
386
394
go func () {
387
395
err := terraform .Serve (ctx , & terraform.ServeOptions {
388
396
ServeOptions : & provisionersdk.ServeOptions {
389
397
Listener : terraformServer ,
390
398
},
391
- Logger : logger ,
399
+ CachePath : cacheDir ,
400
+ Logger : logger ,
392
401
})
393
402
if err != nil {
394
403
panic (err )
0 commit comments