Add pool_id param for pool_member related proxy methods
pool_id is needed for generating url of Neutron LBaaS pool_member resource. This patch added this parameter to all pool_member related methods in proxy layer. Change-Id: I95b094b25f1367770de035c93c4fe88428eef8dc
This commit is contained in:
@@ -18,7 +18,7 @@ from openstack.network.v2 import load_balancer
|
||||
from openstack.network.v2 import metering_label
|
||||
from openstack.network.v2 import metering_label_rule
|
||||
from openstack.network.v2 import network
|
||||
from openstack.network.v2 import pool
|
||||
from openstack.network.v2 import pool as _pool
|
||||
from openstack.network.v2 import pool_member
|
||||
from openstack.network.v2 import port
|
||||
from openstack.network.v2 import quota
|
||||
@@ -580,7 +580,7 @@ class Proxy(proxy.BaseProxy):
|
||||
:returns: The results of pool creation
|
||||
:rtype: :class:`~openstack.network.v2.pool.Pool`
|
||||
"""
|
||||
return self._create(pool.Pool, **attrs)
|
||||
return self._create(_pool.Pool, **attrs)
|
||||
|
||||
def delete_pool(self, value, ignore_missing=True):
|
||||
"""Delete a pool
|
||||
@@ -595,7 +595,7 @@ class Proxy(proxy.BaseProxy):
|
||||
|
||||
:returns: ``None``
|
||||
"""
|
||||
self._delete(pool.Pool, value, ignore_missing=ignore_missing)
|
||||
self._delete(_pool.Pool, value, ignore_missing=ignore_missing)
|
||||
|
||||
def find_pool(self, name_or_id):
|
||||
"""Find a single pool
|
||||
@@ -603,7 +603,7 @@ class Proxy(proxy.BaseProxy):
|
||||
:param name_or_id: The name or ID of a pool.
|
||||
:returns: One :class:`~openstack.network.v2.pool.Pool` or None
|
||||
"""
|
||||
return pool.Pool.find(self.session, name_or_id)
|
||||
return _pool.Pool.find(self.session, name_or_id)
|
||||
|
||||
def get_pool(self, value):
|
||||
"""Get a single pool
|
||||
@@ -615,7 +615,7 @@ class Proxy(proxy.BaseProxy):
|
||||
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||||
when no resource can be found.
|
||||
"""
|
||||
return self._get(pool.Pool, value)
|
||||
return self._get(_pool.Pool, value)
|
||||
|
||||
def pools(self):
|
||||
"""Return a generator of pools
|
||||
@@ -623,7 +623,7 @@ class Proxy(proxy.BaseProxy):
|
||||
:returns: A generator of pool objects
|
||||
:rtype: :class:`~openstack.network.v2.pool.Pool`
|
||||
"""
|
||||
return self._list(pool.Pool, paginated=False)
|
||||
return self._list(_pool.Pool, paginated=False)
|
||||
|
||||
def update_pool(self, value, **attrs):
|
||||
"""Update a pool
|
||||
@@ -636,7 +636,7 @@ class Proxy(proxy.BaseProxy):
|
||||
:returns: The updated pool
|
||||
:rtype: :class:`~openstack.network.v2.pool.Pool`
|
||||
"""
|
||||
return self._update(pool.Pool, value, **attrs)
|
||||
return self._update(_pool.Pool, value, **attrs)
|
||||
|
||||
def create_pool_member(self, **attrs):
|
||||
"""Create a new pool member from attributes
|
||||
@@ -650,12 +650,15 @@ class Proxy(proxy.BaseProxy):
|
||||
"""
|
||||
return self._create(pool_member.PoolMember, **attrs)
|
||||
|
||||
def delete_pool_member(self, value, ignore_missing=True):
|
||||
def delete_pool_member(self, member, pool, ignore_missing=True):
|
||||
"""Delete a pool member
|
||||
|
||||
:param value: The value can be either the ID of a pool member or a
|
||||
:class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
instance.
|
||||
:param member: The member can be 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.
|
||||
:param bool ignore_missing: When set to ``False``
|
||||
:class:`~openstack.exceptions.ResourceNotFound` will be
|
||||
raised when the pool member does not exist.
|
||||
@@ -664,52 +667,70 @@ class Proxy(proxy.BaseProxy):
|
||||
|
||||
:returns: ``None``
|
||||
"""
|
||||
self._delete(pool_member.PoolMember, value,
|
||||
pool = _pool.Pool.from_id(pool)
|
||||
self._delete(pool_member.PoolMember, member,
|
||||
path_args={'pool_id': pool.id},
|
||||
ignore_missing=ignore_missing)
|
||||
|
||||
def find_pool_member(self, name_or_id):
|
||||
def find_pool_member(self, member, pool):
|
||||
"""Find a single pool member
|
||||
|
||||
:param name_or_id: The name or ID of a pool member.
|
||||
:param member: The name or ID of a pool member.
|
||||
: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.
|
||||
:returns: One :class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
or None
|
||||
"""
|
||||
return pool_member.PoolMember.find(self.session, name_or_id)
|
||||
pool = _pool.Pool.from_id(pool)
|
||||
return pool_member.PoolMember.find(self.session, member,
|
||||
path_args={'pool_id': pool.id})
|
||||
|
||||
def get_pool_member(self, value):
|
||||
def get_pool_member(self, member, pool):
|
||||
"""Get a single pool member
|
||||
|
||||
:param value: The value can be the ID of a pool member or a
|
||||
:class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
instance.
|
||||
:param member: The member can be 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.
|
||||
|
||||
:returns: One :class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||||
when no resource can be found.
|
||||
"""
|
||||
return self._get(pool_member.PoolMember, value)
|
||||
pool = _pool.Pool.from_id(pool)
|
||||
return self._get(pool_member.PoolMember, member,
|
||||
path_args={'pool_id': pool.id})
|
||||
|
||||
def pool_members(self):
|
||||
def pool_members(self, pool):
|
||||
"""Return a generator of pool members
|
||||
|
||||
: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.
|
||||
|
||||
:returns: A generator of pool member objects
|
||||
:rtype: :class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
"""
|
||||
return self._list(pool_member.PoolMember, paginated=False)
|
||||
pool = _pool.Pool.from_id(pool)
|
||||
return self._list(pool_member.PoolMember,
|
||||
path_args={'pool_id': pool.id}, paginated=False)
|
||||
|
||||
def update_pool_member(self, value, **attrs):
|
||||
def update_pool_member(self, member, **attrs):
|
||||
"""Update a pool member
|
||||
|
||||
:param value: Either the id of a pool member or a
|
||||
:class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
instance.
|
||||
:param member: Either the ID of a pool member or a
|
||||
:class:`~openstack.network.v2.pool_member.PoolMember`
|
||||
instance.
|
||||
: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, value, **attrs)
|
||||
return self._update(pool_member.PoolMember, member, **attrs)
|
||||
|
||||
def create_port(self, **attrs):
|
||||
"""Create a new port from attributes
|
||||
|
||||
@@ -17,7 +17,7 @@ from openstack import resource
|
||||
class PoolMember(resource.Resource):
|
||||
resource_key = 'member'
|
||||
resources_key = 'members'
|
||||
base_path = '/pools/%(pool_id)s/members'
|
||||
base_path = '/lbaas/pools/%(pool_id)s/members'
|
||||
service = network_service.NetworkService()
|
||||
|
||||
# capabilities
|
||||
@@ -28,12 +28,21 @@ class PoolMember(resource.Resource):
|
||||
allow_list = True
|
||||
|
||||
# Properties
|
||||
# TODO(briancurtin): I can't find where this is documented.
|
||||
#: The IP address of the pool member.
|
||||
address = resource.prop('address')
|
||||
#: The administrative state of the pool member, which is up ``True`` or
|
||||
#: down ``False``. *Type: bool*
|
||||
admin_state_up = resource.prop('admin_state_up', type=bool)
|
||||
#: The project this pool member is associated with.
|
||||
project_id = resource.prop('tenant_id')
|
||||
#: The port on which the application is hosted.
|
||||
protocol_port = resource.prop('protocol_port', type=int)
|
||||
pool_id = resource.prop('pool_id')
|
||||
#: The status of the member. Indicates whether the member is operational.
|
||||
status = resource.prop('status')
|
||||
#: Subnet in which to access this pool member.
|
||||
subnet_id = resource.prop('subnet_id')
|
||||
#: A positive integer value that indicates the relative portion of traffic
|
||||
#: that this member should receive from the pool. For example, a member
|
||||
#: with a weight of 10 receives five times as much traffic as a member
|
||||
#: with weight of 2.
|
||||
weight = resource.prop('weight', type=int)
|
||||
|
||||
@@ -33,7 +33,7 @@ class TestPoolMember(testtools.TestCase):
|
||||
sot = pool_member.PoolMember()
|
||||
self.assertEqual('member', sot.resource_key)
|
||||
self.assertEqual('members', sot.resources_key)
|
||||
self.assertEqual('/pools/%(pool_id)s/members', sot.base_path)
|
||||
self.assertEqual('/lbaas/pools/%(pool_id)s/members', sot.base_path)
|
||||
self.assertEqual('network', sot.service.service_type)
|
||||
self.assertTrue(sot.allow_create)
|
||||
self.assertTrue(sot.allow_retrieve)
|
||||
|
||||
@@ -267,26 +267,31 @@ class TestNetworkProxy(test_proxy_base.TestProxyBase):
|
||||
|
||||
def test_pool_member_delete(self):
|
||||
self.verify_delete(self.proxy.delete_pool_member,
|
||||
pool_member.PoolMember, False)
|
||||
pool_member.PoolMember, False,
|
||||
{"pool": "test_id"}, {"pool_id": "test_id"})
|
||||
|
||||
def test_pool_member_delete_ignore(self):
|
||||
self.verify_delete(self.proxy.delete_pool_member,
|
||||
pool_member.PoolMember, True)
|
||||
pool_member.PoolMember, True,
|
||||
{"pool": "test_id"}, {"pool_id": "test_id"})
|
||||
|
||||
def test_pool_member_find(self):
|
||||
self.verify_find('openstack.network.v2.pool_member.PoolMember.find',
|
||||
self.proxy.find_pool_member)
|
||||
self.verify_find2('openstack.network.v2.pool_member.PoolMember.find',
|
||||
self.proxy.find_pool_member, {"pool_id": "test_id"})
|
||||
|
||||
def test_pool_member_get(self):
|
||||
self.verify_get2('openstack.proxy.BaseProxy._get',
|
||||
self.proxy.get_pool_member,
|
||||
method_args=["resource_or_id"],
|
||||
method_args=["resource_or_id", "test_id"],
|
||||
expected_args=[pool_member.PoolMember,
|
||||
"resource_or_id"])
|
||||
"resource_or_id"],
|
||||
expected_kwargs={"path_args": {"pool_id": "test_id"}})
|
||||
|
||||
def test_pool_members(self):
|
||||
self.verify_list(self.proxy.pool_members, pool_member.PoolMember,
|
||||
paginated=False)
|
||||
paginated=False, method_args=["test_id"],
|
||||
expected_kwargs={"path_args": {
|
||||
"pool_id": "test_id"}})
|
||||
|
||||
def test_pool_member_update(self):
|
||||
self.verify_update(self.proxy.update_pool_member,
|
||||
|
||||
@@ -85,12 +85,20 @@ class TestProxyBase(base.TestCase):
|
||||
**kwargs)
|
||||
|
||||
def verify_delete(self, test_method, resource_type, ignore,
|
||||
input_path_args=None, expected_path_args=None,
|
||||
mock_method="openstack.proxy.BaseProxy._delete"):
|
||||
method_kwargs = {"ignore_missing": ignore}
|
||||
if isinstance(input_path_args, dict):
|
||||
for key in input_path_args:
|
||||
method_kwargs[key] = input_path_args[key]
|
||||
expected_kwargs = {"ignore_missing": ignore}
|
||||
if expected_path_args:
|
||||
expected_kwargs["path_args"] = expected_path_args
|
||||
self._verify2(mock_method, test_method,
|
||||
method_args=["resource_or_id"],
|
||||
method_kwargs={"ignore_missing": ignore},
|
||||
method_kwargs=method_kwargs,
|
||||
expected_args=[resource_type, "resource_or_id"],
|
||||
expected_kwargs={"ignore_missing": ignore})
|
||||
expected_kwargs=expected_kwargs)
|
||||
|
||||
def verify_get(self, mock_method, test_method, **kwargs):
|
||||
self._verify(mock_method, test_method, expected_result="result",
|
||||
@@ -125,11 +133,22 @@ class TestProxyBase(base.TestCase):
|
||||
expected_args=["name_or_id"], expected_result="result",
|
||||
**kwargs)
|
||||
|
||||
def verify_find2(self, mock_method, test_method, path_args, **kwargs):
|
||||
method_args = ["name_or_id"]
|
||||
for key in path_args:
|
||||
method_args.append(path_args[key])
|
||||
|
||||
self._verify(mock_method, test_method,
|
||||
method_args=method_args,
|
||||
expected_args=["name_or_id"],
|
||||
expected_kwargs={"path_args": path_args},
|
||||
expected_result="result",
|
||||
**kwargs)
|
||||
|
||||
def verify_list(self, test_method, resource_type, paginated=False,
|
||||
**kwargs):
|
||||
expected_kwargs = kwargs.pop("expected_kwargs", {})
|
||||
expected_kwargs.update({"paginated": paginated})
|
||||
|
||||
self._verify2("openstack.proxy.BaseProxy._list",
|
||||
test_method,
|
||||
expected_args=[resource_type],
|
||||
|
||||
Reference in New Issue
Block a user