diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2018-01-12 10:14:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-12 10:14:44 -0500 |
commit | 3783c3fe21e00a6854c968f7e0c03e611acaa0fa (patch) | |
tree | c05cc1f83e4af69457b5b1fc7c0c17d97bbaacca | |
parent | 378bed4869dccc4a886a8888aa5cd7dc13cdaee2 (diff) | |
parent | 240e5789d409d82453b72f87862f7e71efa381e4 (diff) | |
download | podman-3783c3fe21e00a6854c968f7e0c03e611acaa0fa.tar.gz podman-3783c3fe21e00a6854c968f7e0c03e611acaa0fa.tar.bz2 podman-3783c3fe21e00a6854c968f7e0c03e611acaa0fa.zip |
Merge pull request #215 from mheon/update_cni
Update OCICNI vendor and plugin directories
-rw-r--r-- | libpod/networking.go | 3 | ||||
-rw-r--r-- | libpod/options.go | 2 | ||||
-rw-r--r-- | libpod/runtime.go | 6 | ||||
-rw-r--r-- | vendor/github.com/cri-o/ocicni/pkg/ocicni/noop.go | 24 | ||||
-rw-r--r-- | vendor/github.com/cri-o/ocicni/pkg/ocicni/ocicni.go | 64 | ||||
-rw-r--r-- | vendor/github.com/cri-o/ocicni/pkg/ocicni/types.go | 6 |
6 files changed, 40 insertions, 65 deletions
diff --git a/libpod/networking.go b/libpod/networking.go index 456830708..41bd65d25 100644 --- a/libpod/networking.go +++ b/libpod/networking.go @@ -38,7 +38,8 @@ func (r *Runtime) createNetNS(ctr *Container) (err error) { podNetwork := getPodNetwork(ctr.ID(), ctr.Name(), ctrNS.Path(), ctr.config.PortMappings) - if err := r.netPlugin.SetUpPod(podNetwork); err != nil { + _, err = r.netPlugin.SetUpPod(podNetwork) + if err != nil { return errors.Wrapf(err, "error configuring network namespace for container %s", ctr.ID()) } diff --git a/libpod/options.go b/libpod/options.go index cd1ad5eda..8097f3a64 100644 --- a/libpod/options.go +++ b/libpod/options.go @@ -275,7 +275,7 @@ func WithCNIPluginDir(dir string) RuntimeOption { return ErrRuntimeFinalized } - rt.config.CNIPluginDir = dir + rt.config.CNIPluginDir = []string{dir} return nil } diff --git a/libpod/runtime.go b/libpod/runtime.go index aed6acd86..d0aa481cf 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -51,7 +51,7 @@ type RuntimeConfig struct { MaxLogSize int64 NoPivotRoot bool CNIConfigDir string - CNIPluginDir string + CNIPluginDir []string } var ( @@ -73,7 +73,7 @@ var ( MaxLogSize: -1, NoPivotRoot: false, CNIConfigDir: "/etc/cni/net.d/", - CNIPluginDir: "/usr/libexec/cni", + CNIPluginDir: []string{"/usr/libexec/cni", "/opt/cni/bin"}, } ) @@ -173,7 +173,7 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) { } // Set up the CNI net plugin - netPlugin, err := ocicni.InitCNI(runtime.config.CNIConfigDir, runtime.config.CNIPluginDir) + netPlugin, err := ocicni.InitCNI(runtime.config.CNIConfigDir, runtime.config.CNIPluginDir...) if err != nil { return nil, errors.Wrapf(err, "error configuring CNI network plugin") } diff --git a/vendor/github.com/cri-o/ocicni/pkg/ocicni/noop.go b/vendor/github.com/cri-o/ocicni/pkg/ocicni/noop.go deleted file mode 100644 index 9f315a7c6..000000000 --- a/vendor/github.com/cri-o/ocicni/pkg/ocicni/noop.go +++ /dev/null @@ -1,24 +0,0 @@ -package ocicni - -type cniNoOp struct { -} - -func (noop *cniNoOp) Name() string { - return "CNINoOp" -} - -func (noop *cniNoOp) SetUpPod(network PodNetwork) error { - return nil -} - -func (noop *cniNoOp) TearDownPod(network PodNetwork) error { - return nil -} - -func (noop *cniNoOp) GetPodNetworkStatus(network PodNetwork) (string, error) { - return "", nil -} - -func (noop *cniNoOp) Status() error { - return nil -} diff --git a/vendor/github.com/cri-o/ocicni/pkg/ocicni/ocicni.go b/vendor/github.com/cri-o/ocicni/pkg/ocicni/ocicni.go index 03918bfa4..8c7ce5571 100644 --- a/vendor/github.com/cri-o/ocicni/pkg/ocicni/ocicni.go +++ b/vendor/github.com/cri-o/ocicni/pkg/ocicni/ocicni.go @@ -3,6 +3,7 @@ package ocicni import ( "errors" "fmt" + "os" "os/exec" "sort" "strings" @@ -139,33 +140,11 @@ func (plugin *cniNetworkPlugin) monitorNetDir() { <-plugin.monitorNetDirChan } -// InitCNI takes the plugin directory and cni directories where the cni files should be searched for -// Returns a valid plugin object and any error +// InitCNI takes the plugin directory and CNI directories where the CNI config +// files should be searched for. If no valid CNI configs exist, network requests +// will fail until valid CNI config files are present in the config directory. func InitCNI(pluginDir string, cniDirs ...string) (CNIPlugin, error) { - plugin := probeNetworkPluginsWithVendorCNIDirPrefix(pluginDir, cniDirs, "") - var err error - plugin.nsenterPath, err = exec.LookPath("nsenter") - if err != nil { - return nil, err - } - - // check if a default network exists, otherwise dump the CNI search and return a noop plugin - _, err = getDefaultCNINetwork(plugin.pluginDir, plugin.cniDirs, plugin.vendorCNIDirPrefix) - if err != nil { - if err != errMissingDefaultNetwork { - logrus.Warningf("Error in finding usable CNI plugin - %v", err) - // create a noop plugin instead - return &cniNoOp{}, nil - } - - // We do not have a default network, we start the monitoring thread. - go plugin.monitorNetDir() - } - - return plugin, nil -} - -func probeNetworkPluginsWithVendorCNIDirPrefix(pluginDir string, cniDirs []string, vendorCNIDirPrefix string) *cniNetworkPlugin { + vendorCNIDirPrefix := "" plugin := &cniNetworkPlugin{ defaultNetwork: nil, loNetwork: getLoNetwork(cniDirs, vendorCNIDirPrefix), @@ -176,11 +155,26 @@ func probeNetworkPluginsWithVendorCNIDirPrefix(pluginDir string, cniDirs []strin pods: make(map[string]*podLock), } - // sync NetworkConfig in best effort during probing. + var err error + plugin.nsenterPath, err = exec.LookPath("nsenter") + if err != nil { + return nil, err + } + + // Fail loudly if plugin directory doesn't exist, because fsnotify watcher + // won't be able to watch it. + if _, err := os.Stat(pluginDir); err != nil { + return nil, err + } + if err := plugin.syncNetworkConfig(); err != nil { - logrus.Error(err) + // We do not have a valid default network, so start the + // monitoring thread. Network setup/teardown requests + // will fail until we have a valid default network. + go plugin.monitorNetDir() } - return plugin + + return plugin, nil } func getDefaultCNINetwork(pluginDir string, cniDirs []string, vendorCNIDirPrefix string) (*cniNetwork, error) { @@ -308,9 +302,9 @@ func (plugin *cniNetworkPlugin) Name() string { return CNIPluginName } -func (plugin *cniNetworkPlugin) SetUpPod(podNetwork PodNetwork) error { +func (plugin *cniNetworkPlugin) SetUpPod(podNetwork PodNetwork) (cnitypes.Result, error) { if err := plugin.checkInitialized(); err != nil { - return err + return nil, err } plugin.podLock(podNetwork).Lock() @@ -319,16 +313,16 @@ func (plugin *cniNetworkPlugin) SetUpPod(podNetwork PodNetwork) error { _, err := plugin.loNetwork.addToNetwork(podNetwork) if err != nil { logrus.Errorf("Error while adding to cni lo network: %s", err) - return err + return nil, err } - _, err = plugin.getDefaultNetwork().addToNetwork(podNetwork) + result, err := plugin.getDefaultNetwork().addToNetwork(podNetwork) if err != nil { logrus.Errorf("Error while adding to cni network: %s", err) - return err + return nil, err } - return err + return result, err } func (plugin *cniNetworkPlugin) TearDownPod(podNetwork PodNetwork) error { diff --git a/vendor/github.com/cri-o/ocicni/pkg/ocicni/types.go b/vendor/github.com/cri-o/ocicni/pkg/ocicni/types.go index a272e92e7..60816d179 100644 --- a/vendor/github.com/cri-o/ocicni/pkg/ocicni/types.go +++ b/vendor/github.com/cri-o/ocicni/pkg/ocicni/types.go @@ -1,5 +1,9 @@ package ocicni +import ( + "github.com/containernetworking/cni/pkg/types" +) + const ( // DefaultInterfaceName is the string to be used for the interface name inside the net namespace DefaultInterfaceName = "eth0" @@ -49,7 +53,7 @@ type CNIPlugin interface { // SetUpPod is the method called after the sandbox container of // the pod has been created but before the other containers of the // pod are launched. - SetUpPod(network PodNetwork) error + SetUpPod(network PodNetwork) (types.Result, error) // TearDownPod is the method called before a pod's sandbox container will be deleted TearDownPod(network PodNetwork) error |