From a12a46bb8e9c801969b83e303e939837bf84daf6 Mon Sep 17 00:00:00 2001 From: Sumit Naiksatam Date: Mon, 12 Oct 2015 15:27:52 -0700 Subject: [PATCH] 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 --- gbpclient/gbp/v2_0/groupbasedpolicy.py | 22 +++++++++---------- .../tests/unit/test_cli20_externalpolicy.py | 7 ++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/gbpclient/gbp/v2_0/groupbasedpolicy.py b/gbpclient/gbp/v2_0/groupbasedpolicy.py index b21058a..62df439 100644 --- a/gbpclient/gbp/v2_0/groupbasedpolicy.py +++ b/gbpclient/gbp/v2_0/groupbasedpolicy.py @@ -1129,16 +1129,15 @@ class CreateExternalPolicy(neutronV20.CreateCommand): parsed_args.consumed_policy_rule_sets.pop(key)) if parsed_args.external_segments: - for external_segment in parsed_args.external_segments: - external_segment_id = neutronV20.find_resourceid_by_name_or_id( - self.get_client(), 'external_segment', external_segment) - parsed_args.external_segments.remove(external_segment) - parsed_args.external_segments.append(external_segment_id) + body[self.resource]['external_segments'] = [ + neutronV20.find_resourceid_by_name_or_id( + self.get_client(), + 'external_segment', + elem) for elem in parsed_args.external_segments] neutronV20.update_dict(parsed_args, body[self.resource], ['name', 'tenant_id', 'description', 'provided_policy_rule_sets', - 'external_segments', 'consumed_policy_rule_sets', 'shared']) return body @@ -1197,16 +1196,15 @@ class UpdateExternalPolicy(neutronV20.UpdateCommand): parsed_args.consumed_policy_rule_sets.pop(key)) if parsed_args.external_segments: - for external_segment in parsed_args.external_segments: - external_segment_id = neutronV20.find_resourceid_by_name_or_id( - self.get_client(), 'external_segment', external_segment) - parsed_args.external_segments.remove(external_segment) - parsed_args.external_segments.append(external_segment_id) + body[self.resource]['external_segments'] = [ + neutronV20.find_resourceid_by_name_or_id( + self.get_client(), + 'external_segment', + elem) for elem in parsed_args.external_segments] neutronV20.update_dict(parsed_args, body[self.resource], ['name', 'tenant_id', 'description', 'provided_policy_rule_sets', - 'external_segments', 'consumed_policy_rule_sets', 'shared']) return body diff --git a/gbpclient/tests/unit/test_cli20_externalpolicy.py b/gbpclient/tests/unit/test_cli20_externalpolicy.py index e9a6e21..d42c421 100644 --- a/gbpclient/tests/unit/test_cli20_externalpolicy.py +++ b/gbpclient/tests/unit/test_cli20_externalpolicy.py @@ -50,11 +50,13 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base): my_id = 'someid' provided_policy_rule_sets = "prs1=true,prs2=true" consumed_policy_rule_sets = "prs3=true,prs4=true" + external_segments = "ES1 ES2" shared = 'True' args = ['--tenant-id', tenant_id, '--description', description, '--provided-policy-rule-sets', provided_policy_rule_sets, '--consumed-policy-rule-sets', consumed_policy_rule_sets, + '--external-segments', external_segments, '--shared', shared, name] position_names = ['name', ] @@ -67,6 +69,8 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base): {'prs1': 'true', 'prs2': 'true'}, consumed_policy_rule_sets= {'prs3': 'true', 'prs4': 'true'}, + external_segments= + ['ES1', 'ES2'], shared=True) def test_list_external_policies(self): @@ -99,11 +103,13 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base): my_id = 'someid' provided_policy_rule_sets = "prs1=true,prs2=true" consumed_policy_rule_sets = "prs3=true,prs4=true" + external_segments = "ES1 ES2" shared = 'True' args = ['--name', name, '--description', description, '--provided-policy-rule-sets', provided_policy_rule_sets, '--consumed-policy-rule-sets', consumed_policy_rule_sets, + '--external-segments', external_segments, '--shared', shared, my_id] params = { @@ -111,6 +117,7 @@ class CLITestV20ExternalPolicyJSON(test_cli20.CLITestV20Base): 'description': description, 'provided_policy_rule_sets': {'prs1': 'true', 'prs2': 'true'}, 'consumed_policy_rule_sets': {'prs3': 'true', 'prs4': 'true'}, + 'external_segments': ['ES1', 'ES2'], 'shared': True } self._test_update_resource(resource, cmd, my_id, args, params)