github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/plugins/serve.go (about)

     1  package plugins
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	log "github.com/hashicorp/go-hclog"
     8  	"github.com/hashicorp/nomad/plugins/device"
     9  	"github.com/hashicorp/nomad/plugins/drivers"
    10  )
    11  
    12  // PluginFactory returns a new plugin instance
    13  type PluginFactory func(log log.Logger) interface{}
    14  
    15  // PluginCtxFactory returns a new plugin instance, that takes in a context
    16  type PluginCtxFactory func(ctx context.Context, log log.Logger) interface{}
    17  
    18  // Serve is used to serve a new Nomad plugin
    19  func Serve(f PluginFactory) {
    20  	logger := log.New(&log.LoggerOptions{
    21  		Level:      log.Trace,
    22  		JSONFormat: true,
    23  	})
    24  
    25  	plugin := f(logger)
    26  	serve(plugin, logger)
    27  }
    28  
    29  // ServeCtx is used to serve a new Nomad plugin
    30  func ServeCtx(f PluginCtxFactory) {
    31  	ctx, cancel := context.WithCancel(context.Background())
    32  	defer cancel()
    33  
    34  	logger := log.New(&log.LoggerOptions{
    35  		Level:      log.Trace,
    36  		JSONFormat: true,
    37  	})
    38  
    39  	plugin := f(ctx, logger)
    40  	serve(plugin, logger)
    41  }
    42  func serve(plugin interface{}, logger log.Logger) {
    43  	switch p := plugin.(type) {
    44  	case device.DevicePlugin:
    45  		device.Serve(p, logger)
    46  	case drivers.DriverPlugin:
    47  		drivers.Serve(p, logger)
    48  	default:
    49  		fmt.Println("Unsupported plugin type")
    50  	}
    51  }