pkg/skel: allow arg requriements specified by CMD
authorStefan Junker <mail@stefanjunker.de>
Fri, 27 May 2016 08:56:24 +0000 (10:56 +0200)
committerStefan Junker <mail@stefanjunker.de>
Fri, 27 May 2016 08:56:24 +0000 (10:56 +0200)
pkg/skel/skel.go

index 7347b07..1f9438c 100644 (file)
@@ -36,28 +36,72 @@ type CmdArgs struct {
        StdinData   []byte
 }
 
+type reqForCmdEntry map[string]bool
+
 // PluginMain is the "main" for a plugin. It accepts
 // two callback functions for add and del commands.
 func PluginMain(cmdAdd, cmdDel func(_ *CmdArgs) error) {
        var cmd, contID, netns, ifName, args, path string
 
        vars := []struct {
-               name string
-               val  *string
-               req  bool
+               name      string
+               val       *string
+               reqForCmd reqForCmdEntry
        }{
-               {"CNI_COMMAND", &cmd, true},
-               {"CNI_CONTAINERID", &contID, false},
-               {"CNI_NETNS", &netns, true},
-               {"CNI_IFNAME", &ifName, true},
-               {"CNI_ARGS", &args, false},
-               {"CNI_PATH", &path, true},
+               {
+                       "CNI_COMMAND",
+                       &cmd,
+                       reqForCmdEntry{
+                               "ADD": true,
+                               "DEL": true,
+                       },
+               },
+               {
+                       "CNI_CONTAINERID",
+                       &contID,
+                       reqForCmdEntry{
+                               "ADD": false,
+                               "DEL": false,
+                       },
+               },
+               {
+                       "CNI_NETNS",
+                       &netns,
+                       reqForCmdEntry{
+                               "ADD": true,
+                               "DEL": true,
+                       },
+               },
+               {
+                       "CNI_IFNAME",
+                       &ifName,
+                       reqForCmdEntry{
+                               "ADD": true,
+                               "DEL": true,
+                       },
+               },
+               {
+                       "CNI_ARGS",
+                       &args,
+                       reqForCmdEntry{
+                               "ADD": false,
+                               "DEL": false,
+                       },
+               },
+               {
+                       "CNI_PATH",
+                       &path,
+                       reqForCmdEntry{
+                               "ADD": true,
+                               "DEL": true,
+                       },
+               },
        }
 
        argsMissing := false
        for _, v := range vars {
                *v.val = os.Getenv(v.name)
-               if v.req && *v.val == "" {
+               if v.reqForCmd[cmd] && *v.val == "" {
                        log.Printf("%v env variable missing", v.name)
                        argsMissing = true
                }