diff --git a/neutronclient/neutron/v2_0/fw/firewall.py b/neutronclient/neutron/v2_0/fw/firewall.py index 2f0755b54..06b804037 100644 --- a/neutronclient/neutron/v2_0/fw/firewall.py +++ b/neutronclient/neutron/v2_0/fw/firewall.py @@ -46,7 +46,7 @@ class CreateFirewall(neutronv20.CreateCommand): def add_known_arguments(self, parser): parser.add_argument( 'firewall_policy_id', metavar='POLICY', - help=_('Firewall policy ID.')) + help=_('Firewall policy name or ID.')) parser.add_argument( '--name', help=_('Name for the firewall.')) @@ -83,6 +83,20 @@ class UpdateFirewall(neutronv20.UpdateCommand): resource = 'firewall' + def add_known_arguments(self, parser): + parser.add_argument( + '--policy', metavar='POLICY', + help=_('Firewall policy name or ID.')) + + def args2body(self, parsed_args): + data = {} + if parsed_args.policy: + _policy_id = neutronv20.find_resourceid_by_name_or_id( + self.get_client(), 'firewall_policy', + parsed_args.policy) + data['firewall_policy_id'] = _policy_id + return {self.resource: data} + class DeleteFirewall(neutronv20.DeleteCommand): """Delete a given firewall.""" diff --git a/neutronclient/tests/unit/fw/test_cli20_firewall.py b/neutronclient/tests/unit/fw/test_cli20_firewall.py index 1d24a3342..3b6288b63 100644 --- a/neutronclient/tests/unit/fw/test_cli20_firewall.py +++ b/neutronclient/tests/unit/fw/test_cli20_firewall.py @@ -112,6 +112,14 @@ class CLITestV20FirewallJSON(test_cli20.CLITestV20Base): ['myid', '--name', 'newname'], {'name': 'newname', }) + def test_update_firewall_using_policy_name(self): + """firewall-update myid --policy newpolicy.""" + resource = 'firewall' + cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None) + self._test_update_resource(resource, cmd, 'myid', + ['myid', '--policy', 'newpolicy'], + {'firewall_policy_id': 'newpolicy'}) + def test_delete_firewall(self): """firewall-delete my-id.""" resource = 'firewall'