Added the 'name' and 'args' field to the 'delegate' plugin's CNI config. When the port-mapper plugin invokes the 'delegate' plugin, the CNI config of the 'delegate' plugin needs to have the 'name' and the 'args' fields set. We are therefore updating the config during creation of the `PortMapper` object, and will use this config when the 'delegate' plugin is invoked.
Review: https://reviews.apache.org/r/51740/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7a9f1c48 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7a9f1c48 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7a9f1c48 Branch: refs/heads/master Commit: 7a9f1c485829c2aedb20adeaec4556bf73e74e48 Parents: 539d67f Author: Avinash sridharan <avin...@mesosphere.io> Authored: Wed Oct 12 09:53:33 2016 -0700 Committer: Jie Yu <yujie....@gmail.com> Committed: Wed Oct 12 10:59:45 2016 -0700 ---------------------------------------------------------------------- .../network/cni/plugins/port_mapper/port_mapper.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/7a9f1c48/src/slave/containerizer/mesos/isolators/network/cni/plugins/port_mapper/port_mapper.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/isolators/network/cni/plugins/port_mapper/port_mapper.cpp b/src/slave/containerizer/mesos/isolators/network/cni/plugins/port_mapper/port_mapper.cpp index 5caa6d7..5de777c 100644 --- a/src/slave/containerizer/mesos/isolators/network/cni/plugins/port_mapper/port_mapper.cpp +++ b/src/slave/containerizer/mesos/isolators/network/cni/plugins/port_mapper/port_mapper.cpp @@ -166,13 +166,13 @@ Try<Owned<PortMapper>, PluginError> PortMapper::create(const string& _cniConfig) // The port-mapper should always be used in conjunction with another // 'delegate' CNI plugin. - Result<JSON::Object> delegateConfig = + Result<JSON::Object> _delegateConfig = cniConfig->find<JSON::Object>("delegate"); - if (!delegateConfig.isSome()) { + if (!_delegateConfig.isSome()) { return PluginError( "Failed to get the required field 'delegate'" + - (delegateConfig.isError() ? delegateConfig.error() : "Not found"), + (_delegateConfig.isError() ? _delegateConfig.error() : "Not found"), ERROR_BAD_ARGS); } @@ -181,7 +181,7 @@ Try<Owned<PortMapper>, PluginError> PortMapper::create(const string& _cniConfig) // Make sure the 'delegate' plugin exists. Result<JSON::String> delegatePlugin = - delegateConfig->find<JSON::String>("type"); + _delegateConfig->find<JSON::String>("type"); if (!delegatePlugin.isSome()) { return PluginError( @@ -197,6 +197,11 @@ Try<Owned<PortMapper>, PluginError> PortMapper::create(const string& _cniConfig) ERROR_BAD_ARGS); } + // Add the 'name' and 'args' field to the 'delegate' config. + JSON::Object delegateConfig(_delegateConfig.get()); + delegateConfig.values["name"] = name.get(); + delegateConfig.values["args"] = args.get(); + return Owned<PortMapper>( new PortMapper( cniCommand.get(), @@ -207,7 +212,7 @@ Try<Owned<PortMapper>, PluginError> PortMapper::create(const string& _cniConfig) cniPath.get(), networkInfo.get(), delegatePlugin->value, - delegateConfig.get(), + delegateConfig, chain->value, excludeDevices)); }