in common/core/network.go [421:482]
func (plugin *netPlugin) Delete(args *cniSkel.CmdArgs) error {
logrus.Debugf("[cni-net] Processing DEL command with args {ContainerID:%v Netns:%v IfName:%v Args:%v Path:%v}",
args.ContainerID, args.Netns, args.IfName, args.Args, args.Path)
podConfig, err := cni.ParseCniArgs(args.Args)
k8sNamespace := ""
if err == nil {
k8sNamespace = string(podConfig.K8S_POD_NAMESPACE)
}
// Parse network configuration from stdin.
cniConfig, err := cni.ParseNetworkConfig(args.StdinData)
if err != nil {
logrus.Errorf("[cni-net] Failed to parse network configuration, err:%v", err)
return err
}
logrus.Debugf("[cni-net] Read network configuration %+v.", cniConfig)
if cniConfig.Ipam.Type != "" {
logrus.Debugf("[cni-net] Ipam detected, executing delegate call to delete ipam, %v", cniConfig.Ipam)
err := deallocateIpam(cniConfig, args.StdinData)
if err != nil {
logrus.Debugf("[cni-net] Failed during delete call for ipam, %v", err)
return fmt.Errorf("ipam deletion failed, %v", err)
}
}
// Convert cniConfig to NetworkInfo
networkInfo, err := cniConfig.GetNetworkInfo(k8sNamespace)
if err != nil {
logrus.Errorf("[cni-net] Failed to get network information from network configuration, err:%v.", err)
return err
}
epInfo, err := cniConfig.GetEndpointInfo(networkInfo, args.ContainerID, args.Netns)
if err != nil {
return err
}
endpointInfo, err := plugin.nm.GetEndpointByName(epInfo.Name, cniConfig.OptionalFlags.EnableDualStack)
if err != nil {
if hcn.IsNotFoundError(err) {
logrus.Debugf("[cni-net] Endpoint was not found error, err:%v", err)
return nil
}
logrus.Errorf("[cni-net] Failed while getting endpoint, err:%v", err)
return err
}
// Delete the endpoint.
err = plugin.nm.DeleteEndpoint(endpointInfo.ID)
if err != nil {
if hcn.IsNotFoundError(err) {
logrus.Debugf("[cni-net] Endpoint was not found error, err:%v", err)
return nil
} else {
logrus.Errorf("[cni-net] Failed to delete endpoint, err:%v", err)
return err
}
}
logrus.Debugf("[cni-net] DEL succeeded.")
return nil
}