diff --git a/neutronclient/neutron/v2_0/quota.py b/neutronclient/neutron/v2_0/quota.py index eb750744a..7346f54b8 100644 --- a/neutronclient/neutron/v2_0/quota.py +++ b/neutronclient/neutron/v2_0/quota.py @@ -29,8 +29,8 @@ from neutronclient.i18n import _ from neutronclient.neutron import v2_0 as neutronV20 -def get_tenant_id(tenant_id, client): - return (tenant_id if tenant_id else +def get_tenant_id(args, client): + return (args.pos_tenant_id or args.tenant_id or client.get_quotas_tenant()['tenant']['tenant_id']) @@ -48,13 +48,15 @@ class DeleteQuota(neutronV20.NeutronCommand): parser.add_argument( '--tenant_id', help=argparse.SUPPRESS) + parser.add_argument( + 'pos_tenant_id', + help=argparse.SUPPRESS, nargs='?') return parser def run(self, parsed_args): self.log.debug('run(%s)' % parsed_args) neutron_client = self.get_client() - tenant_id = get_tenant_id(parsed_args.tenant_id, - neutron_client) + tenant_id = get_tenant_id(parsed_args, neutron_client) obj_deleter = getattr(neutron_client, "delete_%s" % self.resource) obj_deleter(tenant_id) @@ -107,13 +109,18 @@ class ShowQuota(neutronV20.NeutronCommand, show.ShowOne): parser.add_argument( '--tenant_id', help=argparse.SUPPRESS) + # allow people to do neutron quota-show . + # we use a different name for this because the default will + # override whatever is in the named arg otherwise. + parser.add_argument( + 'pos_tenant_id', + help=argparse.SUPPRESS, nargs='?') return parser def get_data(self, parsed_args): self.log.debug('get_data(%s)', parsed_args) neutron_client = self.get_client() - tenant_id = get_tenant_id(parsed_args.tenant_id, - neutron_client) + tenant_id = get_tenant_id(parsed_args, neutron_client) params = {} obj_shower = getattr(neutron_client, "show_%s" % self.resource) @@ -183,6 +190,9 @@ class UpdateQuota(neutronV20.NeutronCommand, show.ShowOne): parser.add_argument( '--health-monitor', metavar='health_monitors', help=_('The limit of health monitors.')) + parser.add_argument( + 'pos_tenant_id', + help=argparse.SUPPRESS, nargs='?') return parser @@ -219,8 +229,7 @@ class UpdateQuota(neutronV20.NeutronCommand, show.ShowOne): body[self.resource] = _extra_values obj_updator = getattr(neutron_client, "update_%s" % self.resource) - tenant_id = get_tenant_id(parsed_args.tenant_id, - neutron_client) + tenant_id = get_tenant_id(parsed_args, neutron_client) data = obj_updator(tenant_id, body) if self.resource in data: for k, v in six.iteritems(data[self.resource]): diff --git a/neutronclient/tests/unit/test_quota.py b/neutronclient/tests/unit/test_quota.py index 5364a412e..5be7ba3b7 100644 --- a/neutronclient/tests/unit/test_quota.py +++ b/neutronclient/tests/unit/test_quota.py @@ -42,3 +42,20 @@ class CLITestV20Quota(test_cli20.CLITestV20Base): def test_delete_quota_get_parser(self): cmd = test_cli20.MyApp(sys.stdout) test_quota.DeleteQuota(cmd, None).get_parser(cmd) + + def test_show_quota_positional(self): + resource = 'quota' + cmd = test_quota.ShowQuota( + test_cli20.MyApp(sys.stdout), None) + args = [self.test_id] + self._test_show_resource(resource, cmd, self.test_id, args) + + def test_update_quota_positional(self): + resource = 'quota' + cmd = test_quota.UpdateQuota( + test_cli20.MyApp(sys.stdout), None) + args = [self.test_id, '--network', 'test'] + self.assertRaises( + exceptions.NeutronClientException, self._test_update_resource, + resource, cmd, self.test_id, args=args, + extrafields={'network': 'new'})