bridge: release IP in case of error

If there is an error after an IP has been allocated it is necesary
to release it.

Signed-off-by: Mauricio Vasquez B <mauricio.vasquez@polito.it>
This commit is contained in:
Mauricio Vasquez B
2018-03-09 22:29:41 -05:00
parent 4b296ba330
commit 3a7ee332be

View File

@ -19,6 +19,7 @@ import (
"errors"
"fmt"
"net"
"os"
"runtime"
"syscall"
@ -323,6 +324,8 @@ func enableIPForward(family int) error {
}
func cmdAdd(args *skel.CmdArgs) error {
var success bool = false
n, cniVersion, err := loadNetConf(args.StdinData)
if err != nil {
return err
@ -358,6 +361,15 @@ func cmdAdd(args *skel.CmdArgs) error {
return err
}
// release IP in case of failure
defer func() {
if !success {
os.Setenv("CNI_COMMAND", "DEL")
ipam.ExecDel(n.IPAM.Type, args.StdinData)
os.Setenv("CNI_COMMAND", "ADD")
}
}()
// Convert whatever the IPAM result was into the current Result type
result, err := current.NewResultFromResult(r)
if err != nil {
@ -454,6 +466,8 @@ func cmdAdd(args *skel.CmdArgs) error {
result.DNS = n.DNS
success = true
return types.PrintResult(result, cniVersion)
}