summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2012-05-09 17:17:04 -0500
committerDean Troyer <dtroyer@gmail.com>2012-05-10 14:11:17 -0500
commitcc0adad81ec48de27c1cbb6eac5563b13439d368 (patch)
tree980b3f8643ec44306cc25df6b93a42b0a1aaad0b /openstackclient
parent6fb1a4e496f6860c800f08e68c05b7e95be36c3b (diff)
downloadpython-openstackclient-cc0adad81ec48de27c1cbb6eac5563b13439d368.tar.gz
Add tenant commands, work on service
* adds {list|show} tenant * fleshes out service commands (still WIP) Change-Id: I9dabb6ed3f128a30f140146928320f033d097a06
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/identity/v2_0/service.py84
-rw-r--r--openstackclient/identity/v2_0/tenant.py101
2 files changed, 183 insertions, 2 deletions
diff --git a/openstackclient/identity/v2_0/service.py b/openstackclient/identity/v2_0/service.py
index 24ead928..fd1d7bf9 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 00000000..0d12cf26
--- /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)