Merge pull request #74 from rosenhouse/host-device-fixes

Host-device fixes
This commit is contained in:
Casey Callendrello 2017-09-13 11:41:14 +02:00 committed by GitHub
commit e256564546
2 changed files with 21 additions and 12 deletions

View File

@ -24,9 +24,10 @@ import (
"runtime" "runtime"
"strings" "strings"
"github.com/containernetworking/cni/pkg/ns"
"github.com/containernetworking/cni/pkg/skel" "github.com/containernetworking/cni/pkg/skel"
"github.com/containernetworking/cni/pkg/types/current"
"github.com/containernetworking/cni/pkg/version" "github.com/containernetworking/cni/pkg/version"
"github.com/containernetworking/plugins/pkg/ns"
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
) )
@ -64,6 +65,7 @@ func cmdAdd(args *skel.CmdArgs) error {
return fmt.Errorf("failed to open netns %q: %v", args.Netns, err) return fmt.Errorf("failed to open netns %q: %v", args.Netns, err)
} }
defer containerNs.Close() defer containerNs.Close()
defer (&current.Result{}).Print()
return addLink(cfg.Device, cfg.HWAddr, cfg.KernelPath, containerNs) return addLink(cfg.Device, cfg.HWAddr, cfg.KernelPath, containerNs)
} }
@ -77,6 +79,7 @@ func cmdDel(args *skel.CmdArgs) error {
return fmt.Errorf("failed to open netns %q: %v", args.Netns, err) return fmt.Errorf("failed to open netns %q: %v", args.Netns, err)
} }
defer containerNs.Close() defer containerNs.Close()
defer fmt.Println(`{}`)
return removeLink(cfg.Device, cfg.HWAddr, cfg.KernelPath, containerNs) return removeLink(cfg.Device, cfg.HWAddr, cfg.KernelPath, containerNs)
} }
@ -115,9 +118,7 @@ func getLink(devname, hwaddr, kernelpath string) (netlink.Link, error) {
} }
if len(devname) > 0 { if len(devname) > 0 {
if m, err := netlink.LinkByName(devname); err == nil { return netlink.LinkByName(devname)
return m, nil
}
} else if len(hwaddr) > 0 { } else if len(hwaddr) > 0 {
hwAddr, err := net.ParseMAC(hwaddr) hwAddr, err := net.ParseMAC(hwaddr)
if err != nil { if err != nil {

View File

@ -15,23 +15,27 @@
package main package main
import ( import (
"github.com/containernetworking/cni/pkg/ns" "fmt"
"math/rand"
"github.com/containernetworking/cni/pkg/skel" "github.com/containernetworking/cni/pkg/skel"
"github.com/containernetworking/cni/pkg/testutils" "github.com/containernetworking/plugins/pkg/ns"
"github.com/containernetworking/plugins/pkg/testutils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
) )
var ifname = "dummy0"
var _ = Describe("base functionality", func() { var _ = Describe("base functionality", func() {
var originalNS ns.NetNS var originalNS ns.NetNS
var ifname string
BeforeEach(func() { BeforeEach(func() {
var err error var err error
originalNS, err = ns.NewNS() originalNS, err = ns.NewNS()
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
ifname = fmt.Sprintf("dummy-%x", rand.Int31())
}) })
AfterEach(func() { AfterEach(func() {
@ -61,19 +65,23 @@ var _ = Describe("base functionality", func() {
targetNS, err := ns.NewNS() targetNS, err := ns.NewNS()
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
conf := `{ conf := fmt.Sprintf(`{
"cniVersion": "0.3.0", "cniVersion": "0.3.0",
"name": "cni-plugin-host-device-test", "name": "cni-plugin-host-device-test",
"type": "host-device", "type": "host-device",
"device": ifname "device": %q
}` }`, ifname)
args := &skel.CmdArgs{ args := &skel.CmdArgs{
ContainerID: "dummy", ContainerID: "dummy",
Netns: targetNS.Path(), Netns: targetNS.Path(),
IfName: ifname, IfName: ifname,
StdinData: []byte(conf), StdinData: []byte(conf),
} }
_, _, err = testutils.CmdAddWithResult(targetNS.Path(), ifname, []byte(conf), func() error { return cmdAdd(args) }) err = originalNS.Do(func(ns.NetNS) error {
defer GinkgoRecover()
_, _, err := testutils.CmdAddWithResult(targetNS.Path(), ifname, []byte(conf), func() error { return cmdAdd(args) })
return err
})
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
// assert that dummy0 is now in the target namespace // assert that dummy0 is now in the target namespace