@@ -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"
@@ -249,7 +251,7 @@ func server() *cobra.Command {
249
251
}
250
252
}
251
253
252
- handler , closeCoderd := coderd .New (options )
254
+ coderDaemon := coderd .New (options )
253
255
client := codersdk .New (localURL )
254
256
if tlsEnable {
255
257
// Secure transport isn't needed for locally communicating!
@@ -275,7 +277,7 @@ func server() *cobra.Command {
275
277
errCh := make (chan error , 1 )
276
278
provisionerDaemons := make ([]* provisionerd.Server , 0 )
277
279
for i := 0 ; uint8 (i ) < provisionerDaemonCount ; i ++ {
278
- daemonClose , err := newProvisionerDaemon (cmd .Context (), client , logger , cacheDir , errCh )
280
+ daemonClose , err := newProvisionerDaemon (cmd .Context (), coderDaemon , logger , cacheDir , errCh , dev )
279
281
if err != nil {
280
282
return xerrors .Errorf ("create provisioner daemon: %w" , err )
281
283
}
@@ -295,7 +297,7 @@ func server() *cobra.Command {
295
297
// These errors are typically noise like "TLS: EOF". Vault does similar:
296
298
// https://github.com/hashicorp/vault/blob/e2490059d0711635e529a4efcbaa1b26998d6e1c/command/server.go#L2714
297
299
ErrorLog : log .New (io .Discard , "" , 0 ),
298
- Handler : handler ,
300
+ Handler : coderDaemon . Handler () ,
299
301
BaseContext : func (_ net.Listener ) context.Context {
300
302
return shutdownConnsCtx
301
303
},
@@ -363,15 +365,15 @@ func server() *cobra.Command {
363
365
signal .Notify (stopChan , os .Interrupt )
364
366
select {
365
367
case <- cmd .Context ().Done ():
366
- closeCoderd ()
368
+ coderDaemon . CloseWait ()
367
369
return cmd .Context ().Err ()
368
370
case err := <- tunnelErrChan :
369
371
if err != nil {
370
372
return err
371
373
}
372
374
case err := <- errCh :
373
375
shutdownConns ()
374
- closeCoderd ()
376
+ coderDaemon . CloseWait ()
375
377
return err
376
378
case <- stopChan :
377
379
}
@@ -435,7 +437,7 @@ func server() *cobra.Command {
435
437
436
438
_ , _ = fmt .Fprintf (cmd .OutOrStdout (), cliui .Styles .Prompt .String ()+ "Waiting for WebSocket connections to close...\n " )
437
439
shutdownConns ()
438
- closeCoderd ()
440
+ coderDaemon . CloseWait ()
439
441
return nil
440
442
},
441
443
}
@@ -529,7 +531,8 @@ func createFirstUser(cmd *cobra.Command, client *codersdk.Client, cfg config.Roo
529
531
return nil
530
532
}
531
533
532
- func newProvisionerDaemon (ctx context.Context , client * codersdk.Client , logger slog.Logger , cacheDir string , errChan chan error ) (* provisionerd.Server , error ) {
534
+ func newProvisionerDaemon (ctx context.Context , coderDaemon coderd.CoderD ,
535
+ logger slog.Logger , cacheDir string , errChan chan error , dev bool ) (* provisionerd.Server , error ) {
533
536
err := os .MkdirAll (cacheDir , 0700 )
534
537
if err != nil {
535
538
return nil , xerrors .Errorf ("mkdir %q: %w" , cacheDir , err )
@@ -554,14 +557,26 @@ func newProvisionerDaemon(ctx context.Context, client *codersdk.Client, logger s
554
557
return nil , err
555
558
}
556
559
557
- return provisionerd .New (client .ListenProvisionerDaemon , & provisionerd.Options {
560
+ provisioners := provisionerd.Provisioners {
561
+ string (database .ProvisionerTypeTerraform ): proto .NewDRPCProvisionerClient (provisionersdk .Conn (terraformClient )),
562
+ }
563
+ // include echo provisioner when in dev mode
564
+ if dev {
565
+ echoClient , echoServer := provisionersdk .TransportPipe ()
566
+ go func () {
567
+ err := echo .Serve (ctx , & provisionersdk.ServeOptions {Listener : echoServer })
568
+ if err != nil {
569
+ errChan <- err
570
+ }
571
+ }()
572
+ provisioners [string (database .ProvisionerTypeEcho )] = proto .NewDRPCProvisionerClient (provisionersdk .Conn (echoClient ))
573
+ }
574
+ return provisionerd .New (coderDaemon .ListenProvisionerDaemon , & provisionerd.Options {
558
575
Logger : logger ,
559
576
PollInterval : 500 * time .Millisecond ,
560
577
UpdateInterval : 500 * time .Millisecond ,
561
- Provisioners : provisionerd.Provisioners {
562
- string (database .ProvisionerTypeTerraform ): proto .NewDRPCProvisionerClient (provisionersdk .Conn (terraformClient )),
563
- },
564
- WorkDirectory : tempDir ,
578
+ Provisioners : provisioners ,
579
+ WorkDirectory : tempDir ,
565
580
}), nil
566
581
}
567
582
0 commit comments