diff --git a/openstack/network/v2/_proxy.py b/openstack/network/v2/_proxy.py index 207b4c2d2..d45bd1a1a 100644 --- a/openstack/network/v2/_proxy.py +++ b/openstack/network/v2/_proxy.py @@ -748,9 +748,12 @@ class Proxy(proxy.BaseProxy): """ return self._update(_pool.Pool, pool, **attrs) - def create_pool_member(self, **attrs): + def create_pool_member(self, pool, **attrs): """Create a new pool member from attributes + :param pool: The pool can be either the ID of a pool or a + :class:`~openstack.network.v2.pool.Pool` instance that + the member will be created in. :param dict attrs: Keyword arguments which will be used to create a :class:`~openstack.network.v2.pool_member.PoolMember`, comprised of the properties on the PoolMember class. @@ -758,7 +761,10 @@ class Proxy(proxy.BaseProxy): :returns: The results of pool member creation :rtype: :class:`~openstack.network.v2.pool_member.PoolMember` """ - return self._create(_pool_member.PoolMember, **attrs) + pool_id = resource.Resource.get_id(pool) + return self._create(_pool_member.PoolMember, + path_args={'pool_id': pool_id}, + **attrs) def delete_pool_member(self, pool_member, pool, ignore_missing=True): """Delete a pool member @@ -837,19 +843,24 @@ class Proxy(proxy.BaseProxy): path_args={'pool_id': pool_id}, paginated=False, **query) - def update_pool_member(self, pool_member, **attrs): + def update_pool_member(self, pool_member, pool, **attrs): """Update a pool member :param pool_member: Either the ID of a pool member or a :class:`~openstack.network.v2.pool_member.PoolMember` instance. + :param pool: The pool can be either the ID of a pool or a + :class:`~openstack.network.v2.pool.Pool` instance that + the member belongs to. :attrs kwargs: The attributes to update on the pool member represented by ``value``. :returns: The updated pool member :rtype: :class:`~openstack.network.v2.pool_member.PoolMember` """ - return self._update(_pool_member.PoolMember, pool_member, **attrs) + pool_id = resource.Resource.get_id(pool) + return self._update(_pool_member.PoolMember, pool_member, + path_args={'pool_id': pool_id}, **attrs) def create_port(self, **attrs): """Create a new port from attributes diff --git a/openstack/tests/unit/network/v2/test_proxy.py b/openstack/tests/unit/network/v2/test_proxy.py index c525b9c43..bc79c5f45 100644 --- a/openstack/tests/unit/network/v2/test_proxy.py +++ b/openstack/tests/unit/network/v2/test_proxy.py @@ -240,7 +240,10 @@ class TestNetworkProxy(test_proxy_base.TestProxyBase): def test_pool_member_create_attrs(self): self.verify_create(self.proxy.create_pool_member, - pool_member.PoolMember) + pool_member.PoolMember, + method_kwargs={"pool": "test_id"}, + expected_kwargs={"path_args": { + "pool_id": "test_id"}}) def test_pool_member_delete(self): self.verify_delete(self.proxy.delete_pool_member, @@ -273,7 +276,8 @@ class TestNetworkProxy(test_proxy_base.TestProxyBase): def test_pool_member_update(self): self.verify_update(self.proxy.update_pool_member, - pool_member.PoolMember) + pool_member.PoolMember, + path_args={"pool_id": "test_id"}) def test_pool_create_attrs(self): self.verify_create(self.proxy.create_pool, pool.Pool) diff --git a/openstack/tests/unit/test_proxy_base.py b/openstack/tests/unit/test_proxy_base.py index a39a225b3..b2f557df3 100644 --- a/openstack/tests/unit/test_proxy_base.py +++ b/openstack/tests/unit/test_proxy_base.py @@ -20,6 +20,13 @@ class TestProxyBase(base.TestCase): super(TestProxyBase, self).setUp() self.session = mock.Mock() + def _add_path_args_for_verify(self, path_args, method_args, + expected_kwargs): + if path_args is not None: + for key in path_args: + method_args.append(path_args[key]) + expected_kwargs['path_args'] = path_args + def _verify(self, mock_method, test_method, method_args=None, method_kwargs=None, expected_args=None, expected_kwargs=None, @@ -134,10 +141,7 @@ class TestProxyBase(base.TestCase): method_args = ["name_or_id"] expected_kwargs = {} - if path_args is not None: - for key in path_args: - method_args.append(path_args[key]) - expected_kwargs = {"path_args": path_args} + self._add_path_args_for_verify(path_args, method_args, expected_kwargs) # TODO(briancurtin): if sub-tests worked in this mess of # test dependencies, the following would be a lot easier to work with. @@ -183,12 +187,14 @@ class TestProxyBase(base.TestCase): def verify_update(self, test_method, resource_type, mock_method="openstack.proxy.BaseProxy._update", - expected_result="result", **kwargs): + expected_result="result", path_args=None, **kwargs): the_kwargs = {"x": 1, "y": 2, "z": 3} method_args = ["resource_or_id"] - method_kwargs = the_kwargs + method_kwargs = the_kwargs.copy() expected_args = [resource_type, "resource_or_id"] - expected_kwargs = the_kwargs + expected_kwargs = the_kwargs.copy() + + self._add_path_args_for_verify(path_args, method_args, expected_kwargs) self._verify2(mock_method, test_method, expected_result=expected_result,