diff --git a/openstackclient/identity/v2_0/service.py b/openstackclient/identity/v2_0/service.py index 24ead92810..fd1d7bf9b2 100644 --- a/openstackclient/identity/v2_0/service.py +++ b/openstackclient/identity/v2_0/service.py @@ -21,11 +21,57 @@ Service action implementations import logging +from cliff import lister +from cliff import show + from openstackclient.common import command from openstackclient.common import utils -class List_Service(command.OpenStackCommand): +def get_service_properties(service, fields, formatters={}): + """Return a tuple containing the service properties. + + :param server: a single Service resource + :param fields: tuple of strings with the desired field names + :param formatters: dictionary mapping field names to callables + to format the values + """ + row = [] + mixed_case_fields = [] + + for field in fields: + if field in formatters: + row.append(formatters[field](service)) + else: + if field in mixed_case_fields: + field_name = field.replace(' ', '_') + else: + field_name = field.lower().replace(' ', '_') + data = getattr(service, field_name, '') + row.append(data) + return tuple(row) + + +class Create_Service(command.OpenStackCommand): + "Create service command." + + api = 'identity' + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Create_Service, self).get_parser(prog_name) + parser.add_argument( + '--long', + action='store_true', + default=False, + help='Additional fields are listed in output') + return parser + + def run(self, parsed_args): + self.log.info('v2.Create_Service.run(%s)' % parsed_args) + + +class List_Service(command.OpenStackCommand, lister.Lister): "List service command." api = 'identity' @@ -40,5 +86,39 @@ class List_Service(command.OpenStackCommand): help='Additional fields are listed in output') return parser + def get_data(self, parsed_args): + self.log.debug('v2.List_Service.run(%s)' % parsed_args) + if parsed_args.long: + columns = ('ID', 'Name', 'Type', 'Description') + else: + columns = ('ID', 'Name') + data = self.app.client_manager.identity.services.list() + print "data: %s" % data + return (columns, + (get_service_properties( + s, columns, + formatters={}, + ) for s in data), + ) + + #def run(self, parsed_args): + # self.log.info('v2.List_Service.run(%s)' % parsed_args) + + +class Show_Service(command.OpenStackCommand): + "Show service command." + + api = 'identity' + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Show_Service, self).get_parser(prog_name) + parser.add_argument( + '--long', + action='store_true', + default=False, + help='Additional fields are listed in output') + return parser + def run(self, parsed_args): - self.log.info('v2.List_Service.run(%s)' % parsed_args) + self.log.info('v2.Show_Service.run(%s)' % parsed_args) diff --git a/openstackclient/identity/v2_0/tenant.py b/openstackclient/identity/v2_0/tenant.py new file mode 100644 index 0000000000..0d12cf265e --- /dev/null +++ b/openstackclient/identity/v2_0/tenant.py @@ -0,0 +1,101 @@ +# Copyright 2012 OpenStack LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +""" +Tenant action implementations +""" + +import logging + +from cliff import lister +from cliff import show + +from openstackclient.common import command +from openstackclient.common import utils + + +def get_tenant_properties(tenant, fields, formatters={}): + """Return a tuple containing the server properties. + + :param server: a single Server resource + :param fields: tuple of strings with the desired field names + :param formatters: dictionary mapping field names to callables + to format the values + """ + row = [] + mixed_case_fields = [] + + for field in fields: + if field in formatters: + row.append(formatters[field](tenant)) + else: + if field in mixed_case_fields: + field_name = field.replace(' ', '_') + else: + field_name = field.lower().replace(' ', '_') + data = getattr(tenant, field_name, '') + row.append(data) + return tuple(row) + + +class List_Tenant(command.OpenStackCommand, lister.Lister): + "List tenant command." + + api = 'identity' + log = logging.getLogger(__name__) + + def get_data(self, parsed_args): + self.log.debug('v2.List_Service.run(%s)' % parsed_args) + columns = ('ID', 'Name', 'Enabled') + data = self.app.client_manager.identity.tenants.list() + return (columns, + (get_tenant_properties( + s, columns, + formatters={}, + ) for s in data), + ) + + +class Show_Tenant(command.OpenStackCommand, show.ShowOne): + "Show server command." + + api = 'identity' + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Show_Tenant, self).get_parser(prog_name) + parser.add_argument( + 'tenant', + metavar='<tenant>', + help='Name or ID of tenant to display') + return parser + + def get_data(self, parsed_args): + self.log.debug('v2.Show_Tenant.run(%s)' % parsed_args) + identity_client = self.app.client_manager.identity + tenant = utils.find_resource( + identity_client.tenants, parsed_args.tenant) + + info = {} + info.update(tenant._info) + + # Remove a couple of values that are long and not too useful + #info.pop('links', None) + + columns = sorted(info.keys()) + values = [info[c] for c in columns] + return (columns, values) diff --git a/setup.py b/setup.py index 265920b30c..6f3ac644e8 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,12 @@ setuptools.setup( 'openstack.cli': [ 'list_server=openstackclient.compute.v2.server:List_Server', 'show_server=openstackclient.compute.v2.server:Show_Server', + 'create_service=' + + 'openstackclient.identity.v2_0.service:Create_Service', 'list_service=openstackclient.identity.v2_0.service:List_Service', + 'show_service=openstackclient.identity.v2_0.service:Show_Service', + 'list_tenant=openstackclient.identity.v2_0.tenant:List_Tenant', + 'show_tenant=openstackclient.identity.v2_0.tenant:Show_Tenant', ] } )