Policy: support multiple services in a communication map

Change-Id: I982b04e428f86168838c114b233e646d332dde28
This commit is contained in:
Adit Sarfaty 2018-03-19 14:19:02 +02:00
parent f680a5acd2
commit 44d566d636
4 changed files with 29 additions and 26 deletions

View File

@ -205,7 +205,7 @@ class TestPolicyCommunicationMap(TestPolicyApi):
source_groups=["group1", source_groups=["group1",
"group2"], "group2"],
dest_groups=["group1"], dest_groups=["group1"],
service_id="service1") service_ids=["service1"])
self.entry2 = policy.CommunicationMapEntryDef( self.entry2 = policy.CommunicationMapEntryDef(
'd1', 'cm2', 'en2', 'd1', 'cm2', 'en2',
@ -213,7 +213,7 @@ class TestPolicyCommunicationMap(TestPolicyApi):
source_groups=["group1", source_groups=["group1",
"group2"], "group2"],
dest_groups=["group3"], dest_groups=["group3"],
service_id="service2") service_ids=["service2"])
self.expected_data1 = {'id': 'en1', self.expected_data1 = {'id': 'en1',
'display_name': None, 'display_name': None,

View File

@ -624,7 +624,7 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
map_id=map_id, map_id=map_id,
description=description, description=description,
sequence_number=seq_num, sequence_number=seq_num,
service_id=service_id, service_ids=[service_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
tenant=TEST_TENANT) tenant=TEST_TENANT)
@ -645,7 +645,7 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
name=name, name=name,
description=description, description=description,
sequence_number=seq_num, sequence_number=seq_num,
service_id=service_id, service_ids=[service_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
tenant=TEST_TENANT) tenant=TEST_TENANT)
@ -668,7 +668,7 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
self.resourceApi.create_or_overwrite(name, domain_id, self.resourceApi.create_or_overwrite(name, domain_id,
map_id=map_id, map_id=map_id,
description=description, description=description,
service_id=service_id, service_ids=[service_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
category=category, category=category,
@ -691,7 +691,7 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
name=name, name=name,
description=description, description=description,
sequence_number=1, sequence_number=1,
service_id=service_id, service_ids=[service_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
tenant=TEST_TENANT) tenant=TEST_TENANT)
@ -703,12 +703,14 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
description = 'desc' description = 'desc'
source_group = 'g1' source_group = 'g1'
dest_group = 'g2' dest_group = 'g2'
service_id = 'c1' service1_id = 'c1'
service2_id = 'c2'
with mock.patch.object(self.policy_api, with mock.patch.object(self.policy_api,
"create_with_parent") as api_call: "create_with_parent") as api_call:
self.resourceApi.create_or_overwrite(name, domain_id, self.resourceApi.create_or_overwrite(name, domain_id,
description=description, description=description,
service_id=service_id, service_ids=[service1_id,
service2_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
tenant=TEST_TENANT) tenant=TEST_TENANT)
@ -729,7 +731,7 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
name=name, name=name,
description=description, description=description,
sequence_number=1, sequence_number=1,
service_id=service_id, service_ids=[service1_id, service2_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
tenant=TEST_TENANT) tenant=TEST_TENANT)
@ -790,7 +792,8 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
description = 'new desc' description = 'new desc'
source_group = 'ng1' source_group = 'ng1'
dest_group = 'ng2' dest_group = 'ng2'
service_id = 'nc1' service1_id = 'nc1'
service2_id = 'nc2'
with mock.patch.object(self.policy_api, "get", with mock.patch.object(self.policy_api, "get",
return_value={}) as get_call,\ return_value={}) as get_call,\
mock.patch.object(self.policy_api, mock.patch.object(self.policy_api,
@ -798,7 +801,7 @@ class TestPolicyCommunicationMap(NsxPolicyLibTestCase):
self.resourceApi.update(domain_id, map_id, self.resourceApi.update(domain_id, map_id,
name=name, name=name,
description=description, description=description,
service_id=service_id, service_ids=[service1_id, service2_id],
source_groups=[source_group], source_groups=[source_group],
dest_groups=[dest_group], dest_groups=[dest_group],
tenant=TEST_TENANT) tenant=TEST_TENANT)

View File

@ -372,7 +372,7 @@ class CommunicationMapEntryDef(ResourceDef):
sequence_number=None, sequence_number=None,
source_groups=None, source_groups=None,
dest_groups=None, dest_groups=None,
service_id=None, service_ids=None,
action=policy_constants.ACTION_ALLOW, action=policy_constants.ACTION_ALLOW,
scope="ANY", scope="ANY",
name=None, name=None,
@ -390,8 +390,8 @@ class CommunicationMapEntryDef(ResourceDef):
self.scope = scope self.scope = scope
self.source_groups = self.get_groups_path(domain_id, source_groups) self.source_groups = self.get_groups_path(domain_id, source_groups)
self.dest_groups = self.get_groups_path(domain_id, dest_groups) self.dest_groups = self.get_groups_path(domain_id, dest_groups)
self.service_path = self.get_service_path( self.service_paths = [self.get_service_path(service_id) for service_id
service_id) if service_id else None in service_ids] if service_ids else []
self.parent_ids = (tenant, domain_id, map_id) self.parent_ids = (tenant, domain_id, map_id)
# convert groups and services to full path # convert groups and services to full path
@ -418,7 +418,7 @@ class CommunicationMapEntryDef(ResourceDef):
body['source_groups'] = self.source_groups body['source_groups'] = self.source_groups
body['destination_groups'] = self.dest_groups body['destination_groups'] = self.dest_groups
body['sequence_number'] = self.sequence_number body['sequence_number'] = self.sequence_number
body['services'] = [self.service_path] body['services'] = self.service_paths
body['scope'] = [self.scope] body['scope'] = [self.scope]
body['action'] = self.action body['action'] = self.action
return body return body
@ -428,10 +428,10 @@ class CommunicationMapEntryDef(ResourceDef):
if 'body' in kwargs: if 'body' in kwargs:
del kwargs['body'] del kwargs['body']
# Fix params that need special conversions # Fix params that need special conversions
if kwargs.get('service_id') is not None: if kwargs.get('service_ids') is not None:
service_path = self.get_service_path(kwargs['service_id']) body['services'] = [self.get_service_path(service_id) for
body['services'] = [service_path] service_id in kwargs['service_ids']]
del kwargs['service_id'] del kwargs['service_ids']
if kwargs.get('dest_groups') is not None: if kwargs.get('dest_groups') is not None:
groups = self.get_groups_path( groups = self.get_groups_path(

View File

@ -434,7 +434,7 @@ class NsxPolicyCommunicationMapApi(NsxPolicyResourceBase):
def create_or_overwrite(self, name, domain_id, map_id=None, def create_or_overwrite(self, name, domain_id, map_id=None,
description=None, precedence=0, description=None, precedence=0,
category=policy_constants.CATEGORY_DEFAULT, category=policy_constants.CATEGORY_DEFAULT,
sequence_number=None, service_id=None, sequence_number=None, service_ids=None,
action=policy_constants.ACTION_ALLOW, action=policy_constants.ACTION_ALLOW,
source_groups=None, dest_groups=None, source_groups=None, dest_groups=None,
tenant=policy_constants.POLICY_INFRA_TENANT): tenant=policy_constants.POLICY_INFRA_TENANT):
@ -447,10 +447,10 @@ class NsxPolicyCommunicationMapApi(NsxPolicyResourceBase):
end up with same sequence number. end up with same sequence number.
""" """
# Validate and convert inputs # Validate and convert inputs
if not service_id: if not service_ids:
# service-id must be provided # service-ids must be provided
err_msg = (_("Cannot create a communication map %(name)s without " err_msg = (_("Cannot create a communication map %(name)s without "
"service id") % {'name': name}) "services") % {'name': name})
raise exceptions.ManagerError(details=err_msg) raise exceptions.ManagerError(details=err_msg)
if map_id: if map_id:
# get the next available sequence number # get the next available sequence number
@ -477,7 +477,7 @@ class NsxPolicyCommunicationMapApi(NsxPolicyResourceBase):
sequence_number=sequence_number, sequence_number=sequence_number,
source_groups=source_groups, source_groups=source_groups,
dest_groups=dest_groups, dest_groups=dest_groups,
service_id=service_id, service_ids=service_ids,
action=action, action=action,
tenant=tenant) tenant=tenant)
@ -525,7 +525,7 @@ class NsxPolicyCommunicationMapApi(NsxPolicyResourceBase):
return self.policy_api.list(map_def)['results'] return self.policy_api.list(map_def)['results']
def update(self, domain_id, map_id, name=None, description=None, def update(self, domain_id, map_id, name=None, description=None,
sequence_number=None, service_id=None, action=None, sequence_number=None, service_ids=None, action=None,
source_groups=None, dest_groups=None, precedence=None, source_groups=None, dest_groups=None, precedence=None,
category=None, category=None,
tenant=policy_constants.POLICY_INFRA_TENANT): tenant=policy_constants.POLICY_INFRA_TENANT):
@ -554,7 +554,7 @@ class NsxPolicyCommunicationMapApi(NsxPolicyResourceBase):
entry_def.update_attributes_in_body( entry_def.update_attributes_in_body(
body=comm_entry, name=name, body=comm_entry, name=name,
description=description, description=description,
service_id=service_id, service_ids=service_ids,
source_groups=source_groups, source_groups=source_groups,
dest_groups=dest_groups, dest_groups=dest_groups,
sequence_number=sequence_number, sequence_number=sequence_number,