// deletePod is the handler for pod deletes func deletePod(r *http.Request) (interface{}, error) { resp := cniapi.RspAddPod{} logEvent("del 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 } netPlugin.DeleteHostAccPort(epReq.EndpointID) err = epCleanUp(epReq) resp.Result = 0 resp.EndpointID = pInfo.InfraContainerID return resp, err }
// 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 }
func setErrorResp(resp *cniapi.RspAddPod, msg string, err error) { resp.Result = 1 resp.ErrMsg = msg resp.ErrInfo = fmt.Sprintf("Err: %v", err) }