diff --git a/neutronclient/osc/v2/fwaas/firewallpolicy.py b/neutronclient/osc/v2/fwaas/firewallpolicy.py index 5ac097145..288bac098 100644 --- a/neutronclient/osc/v2/fwaas/firewallpolicy.py +++ b/neutronclient/osc/v2/fwaas/firewallpolicy.py @@ -54,20 +54,20 @@ def _get_common_attrs(client_manager, parsed_args, is_create=True): ).id if parsed_args.firewall_rule and parsed_args.no_firewall_rule: _firewall_rules = [] - for f in set(parsed_args.firewall_rule): + for f in parsed_args.firewall_rule: _firewall_rules.append(client.find_resource( const.FWR, f, cmd_resource=const.CMD_FWR)['id']) - attrs[const.FWRS] = sorted(_firewall_rules) + attrs[const.FWRS] = _firewall_rules elif parsed_args.firewall_rule: rules = [] - for f in set(parsed_args.firewall_rule): - rules.append(client.find_resource( - const.FWR, f, cmd_resource=const.CMD_FWR)['id']) if not is_create: rules += client.find_resource( const.FWP, parsed_args.firewall_policy, cmd_resource=const.CMD_FWP)[const.FWRS] - attrs[const.FWRS] = sorted(set(rules)) + for f in parsed_args.firewall_rule: + rules.append(client.find_resource( + const.FWR, f, cmd_resource=const.CMD_FWR)['id']) + attrs[const.FWRS] = rules elif parsed_args.no_firewall_rule: attrs[const.FWRS] = [] if parsed_args.audited: @@ -395,14 +395,14 @@ class UnsetFirewallPolicy(command.Command): client = client_manager.neutronclient if parsed_args.firewall_rule: - old = client.find_resource( + current = client.find_resource( const.FWP, parsed_args.firewall_policy, cmd_resource=const.CMD_FWP)[const.FWRS] - new = [] + removed = [] for f in set(parsed_args.firewall_rule): - new.append(client.find_resource( + removed.append(client.find_resource( const.FWR, f, cmd_resource=const.CMD_FWR)['id']) - attrs[const.FWRS] = sorted(list(set(old) - set(new))) + attrs[const.FWRS] = [r for r in current if r not in removed] if parsed_args.all_firewall_rule: attrs[const.FWRS] = [] if parsed_args.audited: diff --git a/neutronclient/tests/unit/osc/v2/fwaas/test_firewallpolicy.py b/neutronclient/tests/unit/osc/v2/fwaas/test_firewallpolicy.py index 49e43212b..6d9780768 100644 --- a/neutronclient/tests/unit/osc/v2/fwaas/test_firewallpolicy.py +++ b/neutronclient/tests/unit/osc/v2/fwaas/test_firewallpolicy.py @@ -343,19 +343,19 @@ class TestSetFirewallPolicy(TestFirewallPolicy, common.TestSetFWaaS): if self.neutronclient.find_resource.call_count == 1: self.neutronclient.find_resource.assert_called_with( self.res, target, cmd_resource=const.CMD_FWP) - # 2. Find specified firewall_rule + # 2. Find specified firewall_policy's 'firewall_rules' attribute if self.neutronclient.find_resource.call_count == 2: self.neutronclient.find_resource.assert_called_with( - 'firewall_rule', args[1], cmd_resource=const.CMD_FWR) + self.res, args[1], cmd_resource=const.CMD_FWP) + return {'firewall_rules': _fwp['firewall_rules']} # 3. Find specified firewall_rule if self.neutronclient.find_resource.call_count == 3: self.neutronclient.find_resource.assert_called_with( 'firewall_rule', args[1], cmd_resource=const.CMD_FWR) - # 4. Find specified firewall_policy's 'firewall_rules' attribute + # 4. Find specified firewall_rule if self.neutronclient.find_resource.call_count == 4: self.neutronclient.find_resource.assert_called_with( - self.res, target, cmd_resource=const.CMD_FWP) - return {'firewall_rules': _fwp['firewall_rules']} + 'firewall_rule', args[1], cmd_resource=const.CMD_FWR) return {'id': args[1]} self.neutronclient.find_resource.side_effect = _mock_policy @@ -372,7 +372,7 @@ class TestSetFirewallPolicy(TestFirewallPolicy, common.TestSetFWaaS): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) - expect = sorted(set(_fwp['firewall_rules'] + [rule1, rule2])) + expect = _fwp['firewall_rules'] + [rule1, rule2] body = {self.res: {'firewall_rules': expect}} self.mocked.assert_called_once_with(target, body) self.assertEqual(4, self.neutronclient.find_resource.call_count)