From 47a1f6b66ed51440fa4cf587a8a183eeb592cff5 Mon Sep 17 00:00:00 2001 From: Michael Cambria Date: Tue, 23 Apr 2019 15:01:12 -0400 Subject: [PATCH] send capability args as protobuf message --- api/api.proto | 12 ++++++------ api/handler.go | 22 +++++++++++++++++----- client/main.go | 43 ++++++++++++++++++++++--------------------- 3 files changed, 45 insertions(+), 32 deletions(-) diff --git a/api/api.proto b/api/api.proto index 028c06b..19468cc 100644 --- a/api/api.proto +++ b/api/api.proto @@ -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 { diff --git a/api/handler.go b/api/handler.go index a155eb9..e328f22 100644 --- a/api/handler.go +++ b/api/handler.go @@ -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 diff --git a/client/main.go b/client/main.go index 3a679da..6822a74 100644 --- a/client/main.go +++ b/client/main.go @@ -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 { -- 2.44.0