diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 70 |
1 files changed, 70 insertions, 0 deletions
@@ -0,0 +1,70 @@ +package main + +import ( + "flag" + "os" + "syscall" + + "github.com/fsnotify/fsnotify" + log "github.com/sirupsen/logrus" + pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" +) + +func main() { + // Parse command-line arguments + flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) + flagLogLevel := flag.String("log-level", "info", "Define the logging level: error, info, debug.") + flag.Parse() + + switch *flagLogLevel { + case "debug": + log.SetLevel(log.DebugLevel) + case "info": + log.SetLevel(log.InfoLevel) + } + + log.Println("Starting FS watcher.") + watcher, err := newFSWatcher(pluginapi.DevicePluginPath) + if err != nil { + log.Printf("Failed to created FS watcher: %s.", err) + os.Exit(1) + } + defer watcher.Close() + + log.Println("Starting OS watcher.") + sigs := newOSWatcher(syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) + + restart := true + var devicePlugin *FPGADevicePlugin +L: + for { + if restart { + devicePlugin = NewFPGADevicePlugin() + restart = false + } + + select { + case update := <-devicePlugin.updateChan: + devicePlugin.checkDeviceUpdate(update) + + case event := <-watcher.Events: + if event.Name == pluginapi.KubeletSocket && event.Op&fsnotify.Create == fsnotify.Create { + log.Printf("inotify: %s created, restarting.", pluginapi.KubeletSocket) + restart = true + } + + case err := <-watcher.Errors: + log.Printf("inotify: %s", err) + + case s := <-sigs: + switch s { + case syscall.SIGHUP: + log.Println("Received SIGHUP, restarting.") + restart = true + default: + log.Printf("Received signal \"%v\", shutting down.", s) + break L + } + } + } +} |
