Merge pull request #60 from eyakubovich/fix-plugin-del
bug fix: exec of DEL cmd caused JSON decode error
This commit is contained in:
commit
2a58bd9379
@ -43,20 +43,18 @@ type CNIConfig struct {
|
||||
}
|
||||
|
||||
func (c *CNIConfig) AddNetwork(net *NetworkConfig, rt *RuntimeConf) (*types.Result, error) {
|
||||
return c.execPlugin("ADD", net, rt)
|
||||
pluginPath := invoke.FindInPath(net.Network.Type, c.Path)
|
||||
return invoke.ExecPluginWithResult(pluginPath, net.Bytes, c.args("ADD", rt))
|
||||
}
|
||||
|
||||
func (c *CNIConfig) DelNetwork(net *NetworkConfig, rt *RuntimeConf) error {
|
||||
_, err := c.execPlugin("DEL", net, rt)
|
||||
return err
|
||||
pluginPath := invoke.FindInPath(net.Network.Type, c.Path)
|
||||
return invoke.ExecPluginWithoutResult(pluginPath, net.Bytes, c.args("DEL", rt))
|
||||
}
|
||||
|
||||
// =====
|
||||
|
||||
func (c *CNIConfig) execPlugin(action string, conf *NetworkConfig, rt *RuntimeConf) (*types.Result, error) {
|
||||
pluginPath := invoke.FindInPath(conf.Network.Type, c.Path)
|
||||
|
||||
args := &invoke.Args{
|
||||
func (c *CNIConfig) args(action string, rt *RuntimeConf) *invoke.Args {
|
||||
return &invoke.Args{
|
||||
Command: action,
|
||||
ContainerID: rt.ContainerID,
|
||||
NetNS: rt.NetNS,
|
||||
@ -64,5 +62,4 @@ func (c *CNIConfig) execPlugin(action string, conf *NetworkConfig, rt *RuntimeCo
|
||||
IfName: rt.IfName,
|
||||
Path: strings.Join(c.Path, ":"),
|
||||
}
|
||||
return invoke.ExecPlugin(pluginPath, conf.Bytes, args)
|
||||
}
|
||||
|
@ -41,7 +41,23 @@ func pluginErr(err error, output []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func ExecPlugin(pluginPath string, netconf []byte, args CNIArgs) (*types.Result, error) {
|
||||
func ExecPluginWithResult(pluginPath string, netconf []byte, args CNIArgs) (*types.Result, error) {
|
||||
stdoutBytes, err := execPlugin(pluginPath, netconf, args)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res := &types.Result{}
|
||||
err = json.Unmarshal(stdoutBytes, res)
|
||||
return res, err
|
||||
}
|
||||
|
||||
func ExecPluginWithoutResult(pluginPath string, netconf []byte, args CNIArgs) error {
|
||||
_, err := execPlugin(pluginPath, netconf, args)
|
||||
return err
|
||||
}
|
||||
|
||||
func execPlugin(pluginPath string, netconf []byte, args CNIArgs) ([]byte, error) {
|
||||
if pluginPath == "" {
|
||||
return nil, fmt.Errorf("could not find %q plugin", filepath.Base(pluginPath))
|
||||
}
|
||||
@ -60,7 +76,5 @@ func ExecPlugin(pluginPath string, netconf []byte, args CNIArgs) (*types.Result,
|
||||
return nil, pluginErr(err, stdout.Bytes())
|
||||
}
|
||||
|
||||
res := &types.Result{}
|
||||
err := json.Unmarshal(stdout.Bytes(), res)
|
||||
return res, err
|
||||
return stdout.Bytes(), nil
|
||||
}
|
||||
|
@ -29,15 +29,14 @@ func ExecAdd(plugin string, netconf []byte) (*types.Result, error) {
|
||||
if os.Getenv("CNI_COMMAND") != "ADD" {
|
||||
return nil, fmt.Errorf("CNI_COMMAND is not ADD")
|
||||
}
|
||||
return invoke.ExecPlugin(invoke.Find(plugin), netconf, invoke.ArgsFromEnv())
|
||||
return invoke.ExecPluginWithResult(invoke.Find(plugin), netconf, invoke.ArgsFromEnv())
|
||||
}
|
||||
|
||||
func ExecDel(plugin string, netconf []byte) error {
|
||||
if os.Getenv("CNI_COMMAND") != "DEL" {
|
||||
return fmt.Errorf("CNI_COMMAND is not DEL")
|
||||
}
|
||||
_, err := invoke.ExecPlugin(invoke.Find(plugin), netconf, invoke.ArgsFromEnv())
|
||||
return err
|
||||
return invoke.ExecPluginWithoutResult(invoke.Find(plugin), netconf, invoke.ArgsFromEnv())
|
||||
}
|
||||
|
||||
// ConfigureIface takes the result of IPAM plugin and
|
||||
|
Loading…
x
Reference in New Issue
Block a user