firewall policy update for a rule is not working

If user specifies one rule to update it is not taking but more than one rule
it is accepting as a list and updating the policy. Modified policy-update to
behave same as policy-create command for "--firewall-rules" option

Change-Id: Ia6a1c726be310d60b3b56ce677f843e818079fbe
Closes-bug: 1318617
This commit is contained in:
Koteswara Rao Kelam 2014-07-02 02:56:13 -07:00
parent 3751afdd99
commit 04a0ec8ddf
2 changed files with 43 additions and 20 deletions
neutronclient

@ -33,6 +33,29 @@ def _format_firewall_rules(firewall_policy):
return ''
def common_add_known_arguments(parser):
parser.add_argument(
'--firewall-rules', type=lambda x: x.split(),
help=_('Ordered list of whitespace-delimited firewall rule '
'names or IDs; e.g., --firewall-rules \"rule1 rule2\"'))
def common_args2body(client, parsed_args):
if parsed_args.firewall_rules:
_firewall_rules = []
for f in parsed_args.firewall_rules:
_firewall_rules.append(
neutronv20.find_resourceid_by_name_or_id(
client, 'firewall_rule', f))
body = {'firewall_policy': {'firewall_rules': _firewall_rules}}
else:
body = {'firewall_policy': {}}
neutronv20.update_dict(parsed_args, body['firewall_policy'],
['name', 'description', 'shared',
'audited', 'tenant_id'])
return body
class ListFirewallPolicy(neutronv20.ListCommand):
"""List firewall policies that belong to a given tenant."""
@ -69,10 +92,7 @@ class CreateFirewallPolicy(neutronv20.CreateCommand):
action='store_true',
help=_('Create a shared policy.'),
default=argparse.SUPPRESS)
parser.add_argument(
'--firewall-rules', type=lambda x: x.split(),
help=_('Ordered list of whitespace-delimited firewall rule '
'names or IDs; e.g., --firewall-rules \"rule1 rule2\"'))
common_add_known_arguments(parser)
parser.add_argument(
'--audited',
action='store_true',
@ -80,22 +100,7 @@ class CreateFirewallPolicy(neutronv20.CreateCommand):
default=argparse.SUPPRESS)
def args2body(self, parsed_args):
if parsed_args.firewall_rules:
_firewall_rules = []
for f in parsed_args.firewall_rules:
_firewall_rules.append(
neutronv20.find_resourceid_by_name_or_id(
self.get_client(), 'firewall_rule', f))
body = {self.resource: {
'firewall_rules': _firewall_rules,
},
}
else:
body = {self.resource: {}}
neutronv20.update_dict(parsed_args, body[self.resource],
['name', 'description', 'shared',
'audited', 'tenant_id'])
return body
return common_args2body(self.get_client(), parsed_args)
class UpdateFirewallPolicy(neutronv20.UpdateCommand):
@ -103,6 +108,12 @@ class UpdateFirewallPolicy(neutronv20.UpdateCommand):
resource = 'firewall_policy'
def add_known_arguments(self, parser):
common_add_known_arguments(parser)
def args2body(self, parsed_args):
return common_args2body(self.get_client(), parsed_args)
class DeleteFirewallPolicy(neutronv20.DeleteCommand):
"""Delete a given firewall policy."""

@ -133,6 +133,18 @@ class CLITestV20FirewallPolicyJSON(test_cli20.CLITestV20Base):
['myid', '--name', 'newname'],
{'name': 'newname', })
def test_update_firewall_policy_with_rules(self):
"""firewall-policy-update myid --firewall-rules "rule1 rule2"."""
resource = 'firewall_policy'
cmd = firewallpolicy.UpdateFirewallPolicy(test_cli20.MyApp(sys.stdout),
None)
firewall_rules_arg = u'rule_id3 rule_id4'
firewall_rules_res = ['rule_id3', 'rule_id4']
self._test_update_resource(
resource, cmd, 'myid',
['myid', '--firewall-rules', firewall_rules_arg],
{'firewall_rules': firewall_rules_res, })
def test_delete_firewall_policy(self):
"""firewall-policy-delete my-id."""
resource = 'firewall_policy'