@@ -19,6 +19,8 @@ import (
19
19
"path/filepath"
20
20
"time"
21
21
22
+ "github.com/coder/coder/provisioner/echo"
23
+
22
24
"github.com/briandowns/spinner"
23
25
"github.com/coreos/go-systemd/daemon"
24
26
"github.com/google/go-github/v43/github"
@@ -261,7 +263,7 @@ func server() *cobra.Command {
261
263
}
262
264
}
263
265
264
- handler , closeCoderd := coderd .New (options )
266
+ coderDaemon := coderd .New (options )
265
267
client := codersdk .New (localURL )
266
268
if tlsEnable {
267
269
// Secure transport isn't needed for locally communicating!
@@ -287,7 +289,7 @@ func server() *cobra.Command {
287
289
errCh := make (chan error , 1 )
288
290
provisionerDaemons := make ([]* provisionerd.Server , 0 )
289
291
for i := 0 ; uint8 (i ) < provisionerDaemonCount ; i ++ {
290
- daemonClose , err := newProvisionerDaemon (cmd .Context (), client , logger , cacheDir , errCh )
292
+ daemonClose , err := newProvisionerDaemon (cmd .Context (), coderDaemon , logger , cacheDir , errCh , dev )
291
293
if err != nil {
292
294
return xerrors .Errorf ("create provisioner daemon: %w" , err )
293
295
}
@@ -307,7 +309,7 @@ func server() *cobra.Command {
307
309
// These errors are typically noise like "TLS: EOF". Vault does similar:
308
310
// https://github.com/hashicorp/vault/blob/e2490059d0711635e529a4efcbaa1b26998d6e1c/command/server.go#L2714
309
311
ErrorLog : log .New (io .Discard , "" , 0 ),
310
- Handler : handler ,
312
+ Handler : coderDaemon . Handler () ,
311
313
BaseContext : func (_ net.Listener ) context.Context {
312
314
return shutdownConnsCtx
313
315
},
@@ -375,15 +377,15 @@ func server() *cobra.Command {
375
377
signal .Notify (stopChan , os .Interrupt )
376
378
select {
377
379
case <- cmd .Context ().Done ():
378
- closeCoderd ()
380
+ coderDaemon . CloseWait ()
379
381
return cmd .Context ().Err ()
380
382
case err := <- tunnelErrChan :
381
383
if err != nil {
382
384
return err
383
385
}
384
386
case err := <- errCh :
385
387
shutdownConns ()
386
- closeCoderd ()
388
+ coderDaemon . CloseWait ()
387
389
return err
388
390
case <- stopChan :
389
391
}
@@ -447,7 +449,7 @@ func server() *cobra.Command {
447
449
448
450
_ , _ = fmt .Fprintf (cmd .OutOrStdout (), cliui .Styles .Prompt .String ()+ "Waiting for WebSocket connections to close...\n " )
449
451
shutdownConns ()
450
- closeCoderd ()
452
+ coderDaemon . CloseWait ()
451
453
return nil
452
454
},
453
455
}
@@ -541,7 +543,9 @@ func createFirstUser(cmd *cobra.Command, client *codersdk.Client, cfg config.Roo
541
543
return nil
542
544
}
543
545
544
- func newProvisionerDaemon (ctx context.Context , client * codersdk.Client , logger slog.Logger , cacheDir string , errChan chan error ) (* provisionerd.Server , error ) {
546
+ // nolint:revive
547
+ func newProvisionerDaemon (ctx context.Context , coderDaemon coderd.CoderD ,
548
+ logger slog.Logger , cacheDir string , errChan chan error , dev bool ) (* provisionerd.Server , error ) {
545
549
err := os .MkdirAll (cacheDir , 0700 )
546
550
if err != nil {
547
551
return nil , xerrors .Errorf ("mkdir %q: %w" , cacheDir , err )
@@ -566,14 +570,26 @@ func newProvisionerDaemon(ctx context.Context, client *codersdk.Client, logger s
566
570
return nil , err
567
571
}
568
572
569
- return provisionerd .New (client .ListenProvisionerDaemon , & provisionerd.Options {
573
+ provisioners := provisionerd.Provisioners {
574
+ string (database .ProvisionerTypeTerraform ): proto .NewDRPCProvisionerClient (provisionersdk .Conn (terraformClient )),
575
+ }
576
+ // include echo provisioner when in dev mode
577
+ if dev {
578
+ echoClient , echoServer := provisionersdk .TransportPipe ()
579
+ go func () {
580
+ err := echo .Serve (ctx , & provisionersdk.ServeOptions {Listener : echoServer })
581
+ if err != nil {
582
+ errChan <- err
583
+ }
584
+ }()
585
+ provisioners [string (database .ProvisionerTypeEcho )] = proto .NewDRPCProvisionerClient (provisionersdk .Conn (echoClient ))
586
+ }
587
+ return provisionerd .New (coderDaemon .ListenProvisionerDaemon , & provisionerd.Options {
570
588
Logger : logger ,
571
589
PollInterval : 500 * time .Millisecond ,
572
590
UpdateInterval : 500 * time .Millisecond ,
573
- Provisioners : provisionerd.Provisioners {
574
- string (database .ProvisionerTypeTerraform ): proto .NewDRPCProvisionerClient (provisionersdk .Conn (terraformClient )),
575
- },
576
- WorkDirectory : tempDir ,
591
+ Provisioners : provisioners ,
592
+ WorkDirectory : tempDir ,
577
593
}), nil
578
594
}
579
595
0 commit comments