Allow user-provided update_payload_callback function
Manager API: add update_payload_cbk argument in update method in NsxLibIPSet class Policy API: add update_payload_cbk argument in update_with_conditions method in NsxPolicyGroupApi class Change-Id: I89ae7eb564b09fe15934efa48ab10b69e68de70a
This commit is contained in:
parent
243e93b081
commit
3535d93d3d
@ -576,6 +576,57 @@ class TestPolicyGroup(NsxPolicyLibTestCase):
|
|||||||
update_call.assert_called_once_with(
|
update_call.assert_called_once_with(
|
||||||
group_def.get_resource_path(), updated_group)
|
group_def.get_resource_path(), updated_group)
|
||||||
|
|
||||||
|
def test_update_with_conditions_callback(self):
|
||||||
|
|
||||||
|
def update_payload_cbk(revised_payload, payload):
|
||||||
|
revised_ips = revised_payload["expression"][0]["ip_addresses"]
|
||||||
|
new_ips = payload["conditions"][0].ip_addresses
|
||||||
|
updated_ips = revised_ips + new_ips
|
||||||
|
payload["conditions"] = [core_defs.IPAddressExpression(
|
||||||
|
updated_ips)]
|
||||||
|
|
||||||
|
domain_id = '111'
|
||||||
|
group_id = '222'
|
||||||
|
name = 'name'
|
||||||
|
new_name = 'new name'
|
||||||
|
description = 'desc'
|
||||||
|
new_description = 'new desc'
|
||||||
|
|
||||||
|
ips1 = ["1.1.1.1"]
|
||||||
|
ips2 = ["2.2.2.2"]
|
||||||
|
cond1_def = core_defs.IPAddressExpression(ips1)
|
||||||
|
cond2_def = core_defs.IPAddressExpression(ips2)
|
||||||
|
updated_cond_def = core_defs.IPAddressExpression(ips1 + ips2)
|
||||||
|
|
||||||
|
original_group = {
|
||||||
|
'id': group_id,
|
||||||
|
'resource_type': 'Group',
|
||||||
|
'display_name': name,
|
||||||
|
'description': description,
|
||||||
|
'expression': [cond1_def.get_obj_dict()]}
|
||||||
|
updated_group = {
|
||||||
|
'id': group_id,
|
||||||
|
'resource_type': 'Group',
|
||||||
|
'display_name': new_name,
|
||||||
|
'description': new_description,
|
||||||
|
'expression': [updated_cond_def.get_obj_dict()]}
|
||||||
|
group_def = core_defs.GroupDef(
|
||||||
|
domain_id=domain_id,
|
||||||
|
group_id=group_id,
|
||||||
|
conditions=[cond2_def],
|
||||||
|
tenant=TEST_TENANT)
|
||||||
|
with mock.patch.object(self.policy_api, "get",
|
||||||
|
return_value=original_group),\
|
||||||
|
mock.patch.object(self.policy_api.client,
|
||||||
|
"update") as update_call:
|
||||||
|
self.resourceApi.update_with_conditions(
|
||||||
|
domain_id, group_id, name=new_name,
|
||||||
|
description=new_description,
|
||||||
|
conditions=[cond2_def], tenant=TEST_TENANT,
|
||||||
|
update_payload_cbk=update_payload_cbk)
|
||||||
|
update_call.assert_called_once_with(
|
||||||
|
group_def.get_resource_path(), updated_group)
|
||||||
|
|
||||||
def test_unset(self):
|
def test_unset(self):
|
||||||
domain_id = '111'
|
domain_id = '111'
|
||||||
group_id = '222'
|
group_id = '222'
|
||||||
|
@ -368,6 +368,30 @@ class TestNsxLibIPSet(nsxlib_testcase.NsxClientTestCase):
|
|||||||
resource = 'ip-sets/%s' % fake_ip_set['id']
|
resource = 'ip-sets/%s' % fake_ip_set['id']
|
||||||
update.assert_called_with(resource, data, headers=None)
|
update.assert_called_with(resource, data, headers=None)
|
||||||
|
|
||||||
|
def test_update_ip_set_callback(self):
|
||||||
|
|
||||||
|
def update_payload_cbk(revised_payload, payload):
|
||||||
|
payload['ip_addresses'] = (revised_payload['ip_addresses'] +
|
||||||
|
payload['ip_addresses'])
|
||||||
|
|
||||||
|
fake_ip_set = test_constants.FAKE_IP_SET.copy()
|
||||||
|
new_ip_addresses = ['10.0.0.0']
|
||||||
|
updated_ip_addresses = fake_ip_set['ip_addresses'] + new_ip_addresses
|
||||||
|
data = {
|
||||||
|
'id': fake_ip_set['id'],
|
||||||
|
'display_name': fake_ip_set['display_name'],
|
||||||
|
'ip_addresses': updated_ip_addresses,
|
||||||
|
'resource_type': 'IPSet'
|
||||||
|
}
|
||||||
|
with mock.patch.object(self.nsxlib.client, 'get',
|
||||||
|
return_value=fake_ip_set):
|
||||||
|
with mock.patch.object(self.nsxlib.client, 'update') as update:
|
||||||
|
self.nsxlib.ip_set.update(
|
||||||
|
fake_ip_set['id'], ip_addresses=new_ip_addresses,
|
||||||
|
update_payload_cbk=update_payload_cbk)
|
||||||
|
resource = 'ip-sets/%s' % fake_ip_set['id']
|
||||||
|
update.assert_called_with(resource, data, headers=None)
|
||||||
|
|
||||||
|
|
||||||
class TestNsxLibNSGroup(nsxlib_testcase.NsxClientTestCase):
|
class TestNsxLibNSGroup(nsxlib_testcase.NsxClientTestCase):
|
||||||
"""Tests for vmware_nsxlib.v3.security.NsxLibNSGroup"""
|
"""Tests for vmware_nsxlib.v3.security.NsxLibNSGroup"""
|
||||||
|
@ -523,7 +523,8 @@ class NsxPolicyGroupApi(NsxPolicyResourceBase):
|
|||||||
def update_with_conditions(
|
def update_with_conditions(
|
||||||
self, domain_id, group_id,
|
self, domain_id, group_id,
|
||||||
name=IGNORE, description=IGNORE, conditions=IGNORE,
|
name=IGNORE, description=IGNORE, conditions=IGNORE,
|
||||||
tags=IGNORE, tenant=constants.POLICY_INFRA_TENANT):
|
tags=IGNORE, tenant=constants.POLICY_INFRA_TENANT,
|
||||||
|
update_payload_cbk=None):
|
||||||
group_def = self._init_def(domain_id=domain_id,
|
group_def = self._init_def(domain_id=domain_id,
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
name=name,
|
name=name,
|
||||||
@ -539,6 +540,17 @@ class NsxPolicyGroupApi(NsxPolicyResourceBase):
|
|||||||
def _update():
|
def _update():
|
||||||
# Get the current data of group
|
# Get the current data of group
|
||||||
group = self.policy_api.get(group_def)
|
group = self.policy_api.get(group_def)
|
||||||
|
if update_payload_cbk:
|
||||||
|
# The update_payload_cbk function takes two arguments.
|
||||||
|
# The first one is the result from the internal GET request.
|
||||||
|
# The second one is a dict of user-provided attributes,
|
||||||
|
# which can be changed inside the callback function and
|
||||||
|
# used as the new payload for the following PUT request.
|
||||||
|
# For example, users want to combine the new conditions
|
||||||
|
# passed to update_with_conditions() with the original
|
||||||
|
# conditions retrieved from the internal GET request
|
||||||
|
# instead of overriding the original conditions.
|
||||||
|
update_payload_cbk(group, group_def.attrs)
|
||||||
group_def.set_obj_dict(group)
|
group_def.set_obj_dict(group)
|
||||||
body = group_def.get_obj_dict()
|
body = group_def.get_obj_dict()
|
||||||
# Update the entire group at the NSX
|
# Update the entire group at the NSX
|
||||||
|
@ -648,7 +648,16 @@ class NsxLibIPSet(utils.NsxLibApiBase):
|
|||||||
return self.client.create(self.get_path(), body)
|
return self.client.create(self.get_path(), body)
|
||||||
|
|
||||||
def update(self, ip_set_id, display_name=None, description=None,
|
def update(self, ip_set_id, display_name=None, description=None,
|
||||||
ip_addresses=None, tags_update=None):
|
ip_addresses=None, tags_update=None, update_payload_cbk=None):
|
||||||
|
# The update_payload_cbk function takes two arguments.
|
||||||
|
# The first one is the result from the internal GET request.
|
||||||
|
# The second one is a dict of user-provided attributes,
|
||||||
|
# which can be changed inside the callback function and
|
||||||
|
# used as the new payload for the following PUT request.
|
||||||
|
# For example, users want to combine the new ip_addresses
|
||||||
|
# passed to update() with the original ip_addresses retrieved
|
||||||
|
# from the internal GET request instead of overriding the
|
||||||
|
# original ip_addresses.
|
||||||
ip_set = {}
|
ip_set = {}
|
||||||
if tags_update:
|
if tags_update:
|
||||||
ip_set['tags_update'] = tags_update
|
ip_set['tags_update'] = tags_update
|
||||||
@ -659,7 +668,8 @@ class NsxLibIPSet(utils.NsxLibApiBase):
|
|||||||
if ip_addresses is not None:
|
if ip_addresses is not None:
|
||||||
ip_set['ip_addresses'] = ip_addresses
|
ip_set['ip_addresses'] = ip_addresses
|
||||||
return self._update_resource(self.get_path(ip_set_id),
|
return self._update_resource(self.get_path(ip_set_id),
|
||||||
ip_set, retry=True)
|
ip_set, retry=True,
|
||||||
|
update_payload_cbk=update_payload_cbk)
|
||||||
|
|
||||||
def read(self, ip_set_id):
|
def read(self, ip_set_id):
|
||||||
return self.client.get('ip-sets/%s' % ip_set_id)
|
return self.client.get('ip-sets/%s' % ip_set_id)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user