@@ -19,6 +19,8 @@ import (
1919 "path/filepath"
2020 "time"
2121
22+ "github.com/coder/coder/provisioner/echo"
23+
2224 "github.com/briandowns/spinner"
2325 "github.com/coreos/go-systemd/daemon"
2426 "github.com/google/go-github/v43/github"
@@ -261,7 +263,7 @@ func server() *cobra.Command {
261263 }
262264 }
263265
264- handler , closeCoderd := coderd .New (options )
266+ coderDaemon := coderd .New (options )
265267 client := codersdk .New (localURL )
266268 if tlsEnable {
267269 // Secure transport isn't needed for locally communicating!
@@ -287,7 +289,7 @@ func server() *cobra.Command {
287289 errCh := make (chan error , 1 )
288290 provisionerDaemons := make ([]* provisionerd.Server , 0 )
289291 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 )
291293 if err != nil {
292294 return xerrors .Errorf ("create provisioner daemon: %w" , err )
293295 }
@@ -307,7 +309,7 @@ func server() *cobra.Command {
307309 // These errors are typically noise like "TLS: EOF". Vault does similar:
308310 // https://github.com/hashicorp/vault/blob/e2490059d0711635e529a4efcbaa1b26998d6e1c/command/server.go#L2714
309311 ErrorLog : log .New (io .Discard , "" , 0 ),
310- Handler : handler ,
312+ Handler : coderDaemon . Handler () ,
311313 BaseContext : func (_ net.Listener ) context.Context {
312314 return shutdownConnsCtx
313315 },
@@ -375,15 +377,15 @@ func server() *cobra.Command {
375377 signal .Notify (stopChan , os .Interrupt )
376378 select {
377379 case <- cmd .Context ().Done ():
378- closeCoderd ()
380+ coderDaemon . CloseWait ()
379381 return cmd .Context ().Err ()
380382 case err := <- tunnelErrChan :
381383 if err != nil {
382384 return err
383385 }
384386 case err := <- errCh :
385387 shutdownConns ()
386- closeCoderd ()
388+ coderDaemon . CloseWait ()
387389 return err
388390 case <- stopChan :
389391 }
@@ -447,7 +449,7 @@ func server() *cobra.Command {
447449
448450 _ , _ = fmt .Fprintf (cmd .OutOrStdout (), cliui .Styles .Prompt .String ()+ "Waiting for WebSocket connections to close...\n " )
449451 shutdownConns ()
450- closeCoderd ()
452+ coderDaemon . CloseWait ()
451453 return nil
452454 },
453455 }
@@ -541,7 +543,9 @@ func createFirstUser(cmd *cobra.Command, client *codersdk.Client, cfg config.Roo
541543 return nil
542544}
543545
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 ) {
545549 err := os .MkdirAll (cacheDir , 0700 )
546550 if err != nil {
547551 return nil , xerrors .Errorf ("mkdir %q: %w" , cacheDir , err )
@@ -566,14 +570,26 @@ func newProvisionerDaemon(ctx context.Context, client *codersdk.Client, logger s
566570 return nil , err
567571 }
568572
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 {
570588 Logger : logger ,
571589 PollInterval : 500 * time .Millisecond ,
572590 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 ,
577593 }), nil
578594}
579595
0 commit comments