From c21f77fd39b199a152caa5a1672f004f9052fd9a Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Fri, 20 Sep 2019 16:50:19 -0700 Subject: [PATCH] Require goplugin build flag to enable go plugin support (#6393) --- cmd/telegraf/telegraf.go | 36 ++---------------------------- internal/goplugin/noplugin.go | 9 ++++++++ internal/goplugin/plugin.go | 42 +++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 34 deletions(-) create mode 100644 internal/goplugin/noplugin.go create mode 100644 internal/goplugin/plugin.go diff --git a/cmd/telegraf/telegraf.go b/cmd/telegraf/telegraf.go index 4d4b62759ddaf..f865cee5149c6 100644 --- a/cmd/telegraf/telegraf.go +++ b/cmd/telegraf/telegraf.go @@ -10,9 +10,6 @@ import ( _ "net/http/pprof" // Comment this line to disable pprof endpoint. "os" "os/signal" - "path" - "path/filepath" - "plugin" "runtime" "strings" "syscall" @@ -21,6 +18,7 @@ import ( "github.com/influxdata/telegraf/agent" "github.com/influxdata/telegraf/internal" "github.com/influxdata/telegraf/internal/config" + "github.com/influxdata/telegraf/internal/goplugin" "github.com/influxdata/telegraf/logger" _ "github.com/influxdata/telegraf/plugins/aggregators/all" "github.com/influxdata/telegraf/plugins/inputs" @@ -116,36 +114,6 @@ func reloadLoop( } } -// loadExternalPlugins loads external plugins from shared libraries (.so, .dll, etc.) -// in the specified directory. -func loadExternalPlugins(rootDir string) error { - return filepath.Walk(rootDir, func(pth string, info os.FileInfo, err error) error { - // Stop if there was an error. - if err != nil { - return err - } - - // Ignore directories. - if info.IsDir() { - return nil - } - - // Ignore files that aren't shared libraries. - ext := strings.ToLower(path.Ext(pth)) - if ext != ".so" && ext != ".dll" { - return nil - } - - // Load plugin. - _, err = plugin.Open(pth) - if err != nil { - return fmt.Errorf("error loading %s: %s", pth, err) - } - - return nil - }) -} - func runAgent(ctx context.Context, inputFilters []string, outputFilters []string, @@ -317,7 +285,7 @@ func main() { // Load external plugins, if requested. if *fPlugins != "" { log.Printf("I! Loading external plugins from: %s", *fPlugins) - if err := loadExternalPlugins(*fPlugins); err != nil { + if err := goplugin.LoadExternalPlugins(*fPlugins); err != nil { log.Fatal("E! " + err.Error()) } } diff --git a/internal/goplugin/noplugin.go b/internal/goplugin/noplugin.go new file mode 100644 index 0000000000000..23d8634c46520 --- /dev/null +++ b/internal/goplugin/noplugin.go @@ -0,0 +1,9 @@ +// +build !goplugin + +package goplugin + +import "errors" + +func LoadExternalPlugins(rootDir string) error { + return errors.New("go plugin support is not enabled") +} diff --git a/internal/goplugin/plugin.go b/internal/goplugin/plugin.go new file mode 100644 index 0000000000000..7e58ec32e92c2 --- /dev/null +++ b/internal/goplugin/plugin.go @@ -0,0 +1,42 @@ +// +build goplugin + +package goplugin + +import ( + "fmt" + "os" + "path" + "path/filepath" + "plugin" + "strings" +) + +// loadExternalPlugins loads external plugins from shared libraries (.so, .dll, etc.) +// in the specified directory. +func LoadExternalPlugins(rootDir string) error { + return filepath.Walk(rootDir, func(pth string, info os.FileInfo, err error) error { + // Stop if there was an error. + if err != nil { + return err + } + + // Ignore directories. + if info.IsDir() { + return nil + } + + // Ignore files that aren't shared libraries. + ext := strings.ToLower(path.Ext(pth)) + if ext != ".so" && ext != ".dll" { + return nil + } + + // Load plugin. + _, err = plugin.Open(pth) + if err != nil { + return fmt.Errorf("error loading %s: %s", pth, err) + } + + return nil + }) +}