// stubAddPod is the handler for testing pod additions func stubAddPod(r *http.Request) (interface{}, error) { resp := cniapi.RspAddPod{} content, err := ioutil.ReadAll(r.Body) if err != nil { logger.Errorf("Failed to read request: %v", err) return resp, err } pInfo := cniapi.CNIPodAttr{} if err := json.Unmarshal(content, &pInfo); err != nil { return resp, err } // verify pod attributes are as expected. if pInfo.Name == "utPod" && pInfo.K8sNameSpace == "utK8sNS" && pInfo.InfraContainerID != "" && pInfo.IntfName != "" { _, err := nsToPID(pInfo.NwNameSpace) if err != nil { logger.Errorf("Failed to fetch pid from netns %s: %v", pInfo.NwNameSpace, err) } else { // respond with success resp.IPAddress = utPodIP resp.EndpointID = pInfo.InfraContainerID return resp, nil } } logger.Errorf("Failed pod %v", pInfo) return resp, fmt.Errorf("Failed to add pod") }
// addPod is the handler for pod additions func addPod(r *http.Request) (interface{}, error) { resp := cniapi.RspAddPod{} logEvent("add pod") content, err := ioutil.ReadAll(r.Body) if err != nil { log.Errorf("Failed to read request: %v", err) return resp, err } pInfo := cniapi.CNIPodAttr{} if err := json.Unmarshal(content, &pInfo); err != nil { return resp, err } // Get labels from the kube api server epReq, err := getEPSpec(&pInfo) if err != nil { log.Errorf("Error getting labels. Err: %v", err) return resp, err } ep, err := createEP(epReq) if err != nil { log.Errorf("Error creating ep. Err: %v", err) return resp, err } // convert netns to pid that netlink needs pid, err := nsToPID(pInfo.NwNameSpace) if err != nil { return resp, err } // Set interface attributes for the new port err = setIfAttrs(pid, ep.PortName, ep.IPAddress, pInfo.IntfName) if err != nil { log.Errorf("Error setting interface attributes. Err: %v", err) return resp, err } // Set default gateway err = setDefGw(pid, ep.Gateway, pInfo.IntfName) if err != nil { log.Errorf("Error setting default gateway. Err: %v", err) return resp, err } resp.IPAddress = ep.IPAddress resp.EndpointID = pInfo.InfraContainerID return resp, nil }
// addPod is the handler for pod additions func addPod(r *http.Request) (interface{}, error) { resp := cniapi.RspAddPod{} logEvent("add pod") content, err := ioutil.ReadAll(r.Body) if err != nil { log.Errorf("Failed to read request: %v", err) return resp, err } pInfo := cniapi.CNIPodAttr{} if err := json.Unmarshal(content, &pInfo); err != nil { return resp, err } // Get labels from the kube api server epReq, err := getEPSpec(&pInfo) if err != nil { log.Errorf("Error getting labels. Err: %v", err) setErrorResp(&resp, "Error getting labels", err) return resp, err } ep, err := createEP(epReq) if err != nil { log.Errorf("Error creating ep. Err: %v", err) setErrorResp(&resp, "Error creating EP", err) return resp, err } // convert netns to pid that netlink needs pid, err := nsToPID(pInfo.NwNameSpace) if err != nil { log.Errorf("Error moving to netns. Err: %v", err) setErrorResp(&resp, "Error moving to netns", err) return resp, err } // Set interface attributes for the new port err = setIfAttrs(pid, ep.PortName, ep.IPAddress, pInfo.IntfName) if err != nil { log.Errorf("Error setting interface attributes. Err: %v", err) setErrorResp(&resp, "Error setting interface attributes", err) return resp, err } // if Gateway is not specified on the nw, use the host gateway gwIntf := pInfo.IntfName gw := ep.Gateway if gw == "" { hostIf := netutils.GetHostIntfName(ep.PortName) hostIP, _ := netutils.HostIfToIP(hostIf) err = netPlugin.CreateHostAccPort(hostIf, ep.IPAddress, hostIP) if err != nil { log.Errorf("Error setting host access. Err: %v", err) } else { err = setIfAttrs(pid, hostIf, hostIP, "host1") if err != nil { log.Errorf("Move to pid %d failed", pid) } else { gw = hostGWIP gwIntf = "host1" // make sure service subnet points to eth0 svcSubnet := contivK8Config.SvcSubnet addStaticRoute(pid, svcSubnet, pInfo.IntfName) } } } // Set default gateway err = setDefGw(pid, gw, gwIntf) if err != nil { log.Errorf("Error setting default gateway. Err: %v", err) setErrorResp(&resp, "Error setting default gateway", err) return resp, err } resp.Result = 0 resp.IPAddress = ep.IPAddress resp.EndpointID = pInfo.InfraContainerID return resp, nil }