From 8dffa72e276cd58669f589f7d2693a046f644695 Mon Sep 17 00:00:00 2001 From: Ritu Sood Date: Sun, 17 Feb 2019 05:58:57 -0800 Subject: Add Routes to Pod Based on Pod annotations list ovnNetworkRoutes routes are added to the Pod namespace Change-Id: If6b8b6375d798dcbd45e51ccd5adae4b24369c5c Signed-off-by: Ritu Sood --- cmd/ovn4nfvk8s-cni/ovn4nfvk8s-cni.go | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'cmd/ovn4nfvk8s-cni/ovn4nfvk8s-cni.go') diff --git a/cmd/ovn4nfvk8s-cni/ovn4nfvk8s-cni.go b/cmd/ovn4nfvk8s-cni/ovn4nfvk8s-cni.go index 923363b..2722eaa 100644 --- a/cmd/ovn4nfvk8s-cni/ovn4nfvk8s-cni.go +++ b/cmd/ovn4nfvk8s-cni/ovn4nfvk8s-cni.go @@ -196,6 +196,53 @@ func addMultipleInterfaces(args *skel.CmdArgs, ovnAnnotation, namespace, podName return dstResult } +func addRoutes(args *skel.CmdArgs, ovnAnnotation string, dstResult types.Result) types.Result { + logrus.Infof("ovn4nfvk8s-cni: addRoutes ") + + var ovnAnnotatedMap []map[string]string + ovnAnnotatedMap, err := parseOvnNetworkObject(ovnAnnotation) + if err != nil { + logrus.Errorf("addLogicalPort : Error Parsing Ovn Route List %v", err) + return nil + } + + var result types.Result + var routes []*types.Route + for _, ovnNet := range ovnAnnotatedMap { + dst := ovnNet["dst"] + gw := ovnNet["gw"] + dev := ovnNet["dev"] + if dst == "" || gw == "" || dev == "" { + logrus.Errorf("failed in pod annotation key extract") + return nil + } + err = app.ConfigureRoute(args, dst, gw, dev) + if err != nil { + logrus.Errorf("Failed to configure interface in pod: %v", err) + return nil + } + dstAddr, dstAddrNet, _ := net.ParseCIDR(dst) + routes = append(routes, &types.Route{ + Dst: net.IPNet{IP: dstAddr, Mask: dstAddrNet.Mask}, + GW: net.ParseIP(gw), + }) + } + + result = ¤t.Result{ + Routes: routes, + } + // Build the result structure to pass back to the runtime + dstResult, err = mergeWithResult(result, dstResult) + if err != nil { + logrus.Errorf("Failed to merge results: %v", err) + return nil + } + logrus.Infof("addRoutes: %s", prettyPrint(dstResult)) + return dstResult + +} + + func cmdAdd(args *skel.CmdArgs) error { logrus.Infof("ovn4nfvk8s-cni: cmdAdd ") conf := &types.NetConf{} @@ -243,6 +290,13 @@ func cmdAdd(args *skel.CmdArgs) error { return fmt.Errorf("Error while obtaining pod annotations") } result := addMultipleInterfaces(args, ovnAnnotation, namespace, podName) + // Add Routes to the pod if annotation found for routes + ovnRouteAnnotation, ok := annotation["ovnNetworkRoutes"] + if ok { + logrus.Infof("ovn4nfvk8s-cni: ovnNetworkRoutes Annotation Found %+v", ovnRouteAnnotation) + result = addRoutes(args, ovnRouteAnnotation, result) + } + return result.Print() } -- cgit 1.2.3-korg