send capability args as protobuf message
authorMichael Cambria <mcambria@redhat.com>
Tue, 23 Apr 2019 19:01:12 +0000 (15:01 -0400)
committerMichael Cambria <mcambria@redhat.com>
Tue, 23 Apr 2019 19:01:12 +0000 (15:01 -0400)
api/api.proto
api/handler.go
client/main.go

index 028c06b..19468cc 100644 (file)
@@ -67,8 +67,8 @@ message CNIaddMsg {
   string netNS = 3;
   string ifName = 4;
   string cniArgs = 5;
-  //CNIcapArgs capArgs = 6;
-  string capArgs = 6;
+  CNIcapArgs capArgs = 6;
+  //string capArgs = 6;
 }
 
 message ADDresult {
@@ -82,8 +82,8 @@ message CNIcheckMsg {
   string netNS = 3;
   string ifName = 4;
   string cniArgs = 5;
-  //CNIcapArgs capArgs = 6;
-  string capArgs = 6;
+  CNIcapArgs capArgs = 6;
+  //string capArgs = 6;
 }
 
 message CHECKresult {
@@ -96,8 +96,8 @@ message CNIdelMsg {
   string netNS = 3;
   string ifName = 4;
   string cniArgs = 5;
-  //CNIcapArgs capArgs = 6;
-  string capArgs = 6;
+  CNIcapArgs capArgs = 6;
+  //string capArgs = 6;
 }
 
 message DELresult {
index a155eb9..e328f22 100644 (file)
@@ -11,6 +11,7 @@ import (
        "strings"
 
        //proto "github.com/golang/protobuf/proto"
+       //jsonpb "github.com/golang/protobuf/jsonpb"
 
        "github.com/containernetworking/cni/libcni"
 )
@@ -149,7 +150,7 @@ func parseArgs(args string) ([][2]string, error) {
        return result, nil
 }
 
-func cniCommon(conf string, netns string, ifName string, args string, capabilityArgsValue string) (*libcni.NetworkConfigList, *libcni.RuntimeConf, *libcni.CNIConfig, error) {
+func cniCommon(conf string, netns string, ifName string, args string, capabilityArgsValue *CNIcapArgs) (*libcni.NetworkConfigList, *libcni.RuntimeConf, *libcni.CNIConfig, error) {
 
        var err error
 
@@ -160,9 +161,19 @@ func cniCommon(conf string, netns string, ifName string, args string, capability
                return nil, nil, nil, err
        }
 
-       capabilityArgs := CNIcapArgs{}
-       if err := json.Unmarshal([]byte(capabilityArgsValue), &capabilityArgs); err != nil {
-       //if err := proto.Unmarshal([]byte(capabilityArgsValue), &capabilityArgs); err != nil {
+       // Example of how to walk a received protobuf message 
+       portMappings := capabilityArgsValue.GetPortMappings()
+       log.Printf(" portMappings = %v", portMappings)
+       for _, portMap := range portMappings {
+           log.Printf(" portMap = %v", portMap)
+       }
+
+       var capabilityArgs map[string]interface{}
+       data, err := json.Marshal(capabilityArgsValue)
+       if err != nil {
+               return nil, nil, nil, err
+       }
+       if err := json.Unmarshal(data, &capabilityArgs); err != nil {
                return nil, nil, nil, err
        }
 
@@ -203,7 +214,8 @@ func cniCommon(conf string, netns string, ifName string, args string, capability
                NetNS:          netns,
                IfName:         ifName,
                Args:           cniArgs,
-               //CapabilityArgs: capabilityArgs,
+               CapabilityArgs: capabilityArgs,
+               //CapabilityArgs: portMappings,
        }
 
 var f *os.File
index 3a679da..6822a74 100644 (file)
@@ -80,22 +80,23 @@ func main() {
           return
        }
 
-       var capArgs string
+       // //var capArgs string
        //var err error
-       //capabilityArgs := api.CNIcapArgs{}
+       capabilityArgs := api.CNIcapArgs{}
        capabilityArgsValue := os.Getenv(EnvCapabilityArgs)
        if len(capabilityArgsValue) > 0 {
                println("capabilityArgsValue: ", capabilityArgsValue)
-               //if err = proto.Unmarshal([]byte(capabilityArgsValue), &capabilityArgs); err != nil {
-               //      exit(err)
-               //}
+               if err = json.Unmarshal([]byte(capabilityArgsValue), &capabilityArgs); err != nil {
+                  fmt.Fprintf(os.Stderr, "  failed to unmarshal capabilitiesArgs, err = %v\n", err)
+                  return
+               }
                //data, err := proto.Marshal(&capabilityArgs)
                //println("data: %v", data)
                //if err != nil {
                //      exit(err)
                //}
                //capArgs = string(data)
-               capArgs = capabilityArgsValue
+               // // capArgs = capabilityArgsValue
        }
 
        args, okArgs := os.LookupEnv(EnvCNIArgs)
@@ -116,18 +117,18 @@ func main() {
 
        switch os.Args[1] {
        case CmdAdd:
-            gRPCsendAddTcp(string(confBytes), netns, ifName, args, capArgs)
+            gRPCsendAddTcp(string(confBytes), netns, ifName, args, capabilityArgs)
             os.Exit(0)
        case CmdCheck:
-            gRPCsendCheckTcp(string(confBytes), netns, ifName, args, capArgs)
+            gRPCsendCheckTcp(string(confBytes), netns, ifName, args, capabilityArgs)
             os.Exit(0)
        case CmdDel:
-            gRPCsendDelTcp(string(confBytes), netns, ifName, args, capArgs)
+            gRPCsendDelTcp(string(confBytes), netns, ifName, args, capabilityArgs)
             os.Exit(0)
        }
 }
 
-func gRPCsendAddTcp(conf string, netns string, ifName string, args string, capArgs string) error {
+func gRPCsendAddTcp(conf string, netns string, ifName string, args string, capArgs api.CNIcapArgs) error {
        var conn *grpc.ClientConn
 
        // Create the client TLS credentials
@@ -158,7 +159,7 @@ func gRPCsendAddTcp(conf string, netns string, ifName string, args string, capAr
               NetNS: netns,
               IfName: ifName,
               CniArgs: args,
-              CapArgs: capArgs,
+              CapArgs: &capArgs,
               }
        resultAdd, err := cni.CNIadd(context.Background(), &cniAddMsg)
        if err != nil {
@@ -170,7 +171,7 @@ func gRPCsendAddTcp(conf string, netns string, ifName string, args string, capAr
        return nil
 }
 
-func gRPCsendCheckTcp(conf string, netns string, ifName string, args string, capArgs string) error {
+func gRPCsendCheckTcp(conf string, netns string, ifName string, args string, capArgs api.CNIcapArgs) error {
        var conn *grpc.ClientConn
 
        // Create the client TLS credentials
@@ -201,7 +202,7 @@ func gRPCsendCheckTcp(conf string, netns string, ifName string, args string, cap
               NetNS: netns,
               IfName: ifName,
               CniArgs: args,
-              CapArgs: capArgs,
+              CapArgs: &capArgs,
               }
        resultCheck, err := cni.CNIcheck(context.Background(), &cniCheckMsg)
        if err != nil {
@@ -213,7 +214,7 @@ func gRPCsendCheckTcp(conf string, netns string, ifName string, args string, cap
        return nil
 }
 
-func gRPCsendDelTcp(conf string, netns string, ifName string, args string, capArgs string) error {
+func gRPCsendDelTcp(conf string, netns string, ifName string, args string, capArgs api.CNIcapArgs) error {
        var conn *grpc.ClientConn
 
        // Create the client TLS credentials
@@ -244,7 +245,7 @@ func gRPCsendDelTcp(conf string, netns string, ifName string, args string, capAr
               NetNS: netns,
               IfName: ifName,
               CniArgs: args,
-              CapArgs: capArgs,
+              CapArgs: &capArgs,
               }
        resultDel, err := cni.CNIdel(context.Background(), &cniDelMsg)
        if err != nil {
@@ -256,7 +257,7 @@ func gRPCsendDelTcp(conf string, netns string, ifName string, args string, capAr
        return nil
 }
 
-func gRPCsendAddUnix(conf string, netns string, ifName string, args string, capArgs string) error {
+func gRPCsendAddUnix(conf string, netns string, ifName string, args string, capArgs api.CNIcapArgs) error {
 
        var conn *grpc.ClientConn
 
@@ -288,7 +289,7 @@ func gRPCsendAddUnix(conf string, netns string, ifName string, args string, capA
               NetNS: netns,
               IfName: ifName,
               CniArgs: args,
-              CapArgs: capArgs,
+              CapArgs: &capArgs,
               }
        resultAdd, err := cni.CNIadd(context.Background(), &cniAddMsg)
        if err != nil {
@@ -300,7 +301,7 @@ func gRPCsendAddUnix(conf string, netns string, ifName string, args string, capA
        return nil
 }
 
-func gRPCsendCheckUnix(conf string, netns string, ifName string, args string, capArgs string) error {
+func gRPCsendCheckUnix(conf string, netns string, ifName string, args string, capArgs api.CNIcapArgs) error {
 
        var conn *grpc.ClientConn
 
@@ -332,7 +333,7 @@ func gRPCsendCheckUnix(conf string, netns string, ifName string, args string, ca
               NetNS: netns,
               IfName: ifName,
               CniArgs: args,
-              CapArgs: capArgs,
+              CapArgs: &capArgs,
               }
        resultCheck, err := cni.CNIcheck(context.Background(), &cniCheckMsg)
        if err != nil {
@@ -344,7 +345,7 @@ func gRPCsendCheckUnix(conf string, netns string, ifName string, args string, ca
        return nil
 }
 
-func gRPCsendDelUnix(conf string, netns string, ifName string, args string, capArgs string) error {
+func gRPCsendDelUnix(conf string, netns string, ifName string, args string, capArgs api.CNIcapArgs) error {
 
        var conn *grpc.ClientConn
 
@@ -376,7 +377,7 @@ func gRPCsendDelUnix(conf string, netns string, ifName string, args string, capA
               NetNS: netns,
               IfName: ifName,
               CniArgs: args,
-              CapArgs: capArgs,
+              CapArgs: &capArgs,
               }
        resultDel, err := cni.CNIdel(context.Background(), &cniDelMsg)
        if err != nil {