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 }