summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..1756578
--- /dev/null
+++ b/main.go
@@ -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
+ }
+ }
+ }
+}