Fix providing multiple ES for External Policy

There was a bug in processing the list of External Segments
specified by the user which was causing the name of the External
Segment to be sent to the backend. List comprehension in now being
used to build the list of UUIDs for the specified External Segments.

Change-Id: I7b79fccaffdc22e5f3a5f10b485803a0ba7634ff
Closes-bug: 1505402
(cherry picked from commit a12a46bb8e)
(cherry picked from commit bbcfd784f4)
This commit is contained in:
Sumit Naiksatam
2015-10-12 15:27:52 -07:00
parent b8e80eaf86
commit 85772ae2e6
2 changed files with 17 additions and 12 deletions

View File

@@ -1129,16 +1129,15 @@ class CreateExternalPolicy(neutronV20.CreateCommand):
parsed_args.consumed_policy_rule_sets.pop(key)) parsed_args.consumed_policy_rule_sets.pop(key))
if parsed_args.external_segments: if parsed_args.external_segments:
for external_segment in parsed_args.external_segments: body[self.resource]['external_segments'] = [
external_segment_id = neutronV20.find_resourceid_by_name_or_id( neutronV20.find_resourceid_by_name_or_id(
self.get_client(), 'external_segment', external_segment) self.get_client(),
parsed_args.external_segments.remove(external_segment) 'external_segment',
parsed_args.external_segments.append(external_segment_id) elem) for elem in parsed_args.external_segments]
neutronV20.update_dict(parsed_args, body[self.resource], neutronV20.update_dict(parsed_args, body[self.resource],
['name', 'tenant_id', 'description', ['name', 'tenant_id', 'description',
'provided_policy_rule_sets', 'provided_policy_rule_sets',
'external_segments',
'consumed_policy_rule_sets', 'shared']) 'consumed_policy_rule_sets', 'shared'])
return body return body
@@ -1197,16 +1196,15 @@ class UpdateExternalPolicy(neutronV20.UpdateCommand):
parsed_args.consumed_policy_rule_sets.pop(key)) parsed_args.consumed_policy_rule_sets.pop(key))
if parsed_args.external_segments: if parsed_args.external_segments:
for external_segment in parsed_args.external_segments: body[self.resource]['external_segments'] = [
external_segment_id = neutronV20.find_resourceid_by_name_or_id( neutronV20.find_resourceid_by_name_or_id(
self.get_client(), 'external_segment', external_segment) self.get_client(),
parsed_args.external_segments.remove(external_segment) 'external_segment',
parsed_args.external_segments.append(external_segment_id) elem) for elem in parsed_args.external_segments]
neutronV20.update_dict(parsed_args, body[self.resource], neutronV20.update_dict(parsed_args, body[self.resource],
['name', 'tenant_id', 'description', ['name', 'tenant_id', 'description',
'provided_policy_rule_sets', 'provided_policy_rule_sets',
'external_segments',
'consumed_policy_rule_sets', 'shared']) 'consumed_policy_rule_sets', 'shared'])
return body return body

View File

@@ -50,11 +50,13 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base):
my_id = 'someid' my_id = 'someid'
provided_policy_rule_sets = "prs1=true,prs2=true" provided_policy_rule_sets = "prs1=true,prs2=true"
consumed_policy_rule_sets = "prs3=true,prs4=true" consumed_policy_rule_sets = "prs3=true,prs4=true"
external_segments = "ES1 ES2"
shared = 'True' shared = 'True'
args = ['--tenant-id', tenant_id, args = ['--tenant-id', tenant_id,
'--description', description, '--description', description,
'--provided-policy-rule-sets', provided_policy_rule_sets, '--provided-policy-rule-sets', provided_policy_rule_sets,
'--consumed-policy-rule-sets', consumed_policy_rule_sets, '--consumed-policy-rule-sets', consumed_policy_rule_sets,
'--external-segments', external_segments,
'--shared', shared, '--shared', shared,
name] name]
position_names = ['name', ] position_names = ['name', ]
@@ -67,6 +69,8 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base):
{'prs1': 'true', 'prs2': 'true'}, {'prs1': 'true', 'prs2': 'true'},
consumed_policy_rule_sets= consumed_policy_rule_sets=
{'prs3': 'true', 'prs4': 'true'}, {'prs3': 'true', 'prs4': 'true'},
external_segments=
['ES1', 'ES2'],
shared=True) shared=True)
def test_list_external_policies(self): def test_list_external_policies(self):
@@ -99,11 +103,13 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base):
my_id = 'someid' my_id = 'someid'
provided_policy_rule_sets = "prs1=true,prs2=true" provided_policy_rule_sets = "prs1=true,prs2=true"
consumed_policy_rule_sets = "prs3=true,prs4=true" consumed_policy_rule_sets = "prs3=true,prs4=true"
external_segments = "ES1 ES2"
shared = 'True' shared = 'True'
args = ['--name', name, args = ['--name', name,
'--description', description, '--description', description,
'--provided-policy-rule-sets', provided_policy_rule_sets, '--provided-policy-rule-sets', provided_policy_rule_sets,
'--consumed-policy-rule-sets', consumed_policy_rule_sets, '--consumed-policy-rule-sets', consumed_policy_rule_sets,
'--external-segments', external_segments,
'--shared', shared, '--shared', shared,
my_id] my_id]
params = { params = {
@@ -111,6 +117,7 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base):
'description': description, 'description': description,
'provided_policy_rule_sets': {'prs1': 'true', 'prs2': 'true'}, 'provided_policy_rule_sets': {'prs1': 'true', 'prs2': 'true'},
'consumed_policy_rule_sets': {'prs3': 'true', 'prs4': 'true'}, 'consumed_policy_rule_sets': {'prs3': 'true', 'prs4': 'true'},
'external_segments': ['ES1', 'ES2'],
'shared': True 'shared': True
} }
self._test_update_resource(resource, cmd, my_id, args, params) self._test_update_resource(resource, cmd, my_id, args, params)