github.com/banmanh482/nomad@v0.11.8/helper/pluginutils/loader/instance.go (about) 1 package loader 2 3 import plugin "github.com/hashicorp/go-plugin" 4 5 // PluginInstance wraps an instance of a plugin. If the plugin is external, it 6 // provides methods to retrieve the ReattachConfig and to kill the plugin. 7 type PluginInstance interface { 8 // Internal returns if the plugin is internal 9 Internal() bool 10 11 // Kill kills the plugin if it is external. It is safe to call on internal 12 // plugins. 13 Kill() 14 15 // ReattachConfig returns the ReattachConfig and whether the plugin is internal 16 // or not. If the second return value is false, no ReattachConfig is 17 // possible to return. 18 ReattachConfig() (config *plugin.ReattachConfig, canReattach bool) 19 20 // Plugin returns the wrapped plugin instance. 21 Plugin() interface{} 22 23 // Exited returns whether the plugin has exited 24 Exited() bool 25 26 // ApiVersion returns the API version to be used with the plugin 27 ApiVersion() string 28 } 29 30 // internalPluginInstance wraps an internal plugin 31 type internalPluginInstance struct { 32 instance interface{} 33 apiVersion string 34 killFn func() 35 } 36 37 func (p *internalPluginInstance) Internal() bool { return true } 38 func (p *internalPluginInstance) Kill() { p.killFn() } 39 40 func (p *internalPluginInstance) ReattachConfig() (*plugin.ReattachConfig, bool) { return nil, false } 41 func (p *internalPluginInstance) Plugin() interface{} { return p.instance } 42 func (p *internalPluginInstance) Exited() bool { return false } 43 func (p *internalPluginInstance) ApiVersion() string { return p.apiVersion } 44 45 // externalPluginInstance wraps an external plugin 46 type externalPluginInstance struct { 47 client *plugin.Client 48 instance interface{} 49 apiVersion string 50 } 51 52 func (p *externalPluginInstance) Internal() bool { return false } 53 func (p *externalPluginInstance) Plugin() interface{} { return p.instance } 54 func (p *externalPluginInstance) Exited() bool { return p.client.Exited() } 55 func (p *externalPluginInstance) ApiVersion() string { return p.apiVersion } 56 57 func (p *externalPluginInstance) ReattachConfig() (*plugin.ReattachConfig, bool) { 58 return p.client.ReattachConfig(), true 59 } 60 61 func (p *externalPluginInstance) Kill() { 62 p.client.Kill() 63 }