Skip to content

Commit d6a4fb8

Browse files
author
Dean Troyer
committed
Update service commands
* add {create|delete} service * allow 'service' arg to also search type attribute in show command Change-Id: I992359dc95fab1fbdab0666d5cbb75e44ba6e0f3
1 parent fd8197d commit d6a4fb8

3 files changed

Lines changed: 94 additions & 31 deletions

File tree

‎openstackclient/common/utils.py‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,17 @@ def find_resource(manager, name_or_id):
4747
# finally try to find entity by name
4848
try:
4949
return manager.find(name=name_or_id)
50-
except exceptions.NotFound:
51-
msg = "No %s with a name or ID of '%s' exists." % \
52-
(manager.resource_class.__name__.lower(), name_or_id)
53-
raise exceptions.CommandError(msg)
50+
# FIXME(dtroyer): The exception to catch here is dependent on which
51+
# client library the manager passed in belongs to.
52+
# Eventually this should be pulled from a common set
53+
# of client exceptions.
54+
except Exception as ex:
55+
if '.NotFound' in type(ex).__name__:
56+
msg = "No %s with a name or ID of '%s' exists." % \
57+
(manager.resource_class.__name__.lower(), name_or_id)
58+
raise exceptions.CommandError(msg)
59+
else:
60+
raise
5461

5562

5663
def get_item_properties(item, fields, mixed_case_fields=[], formatters={}):

‎openstackclient/identity/v2_0/service.py‎

Lines changed: 78 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,37 +24,81 @@
2424
from cliff import lister
2525
from cliff import show
2626

27+
from keystoneclient import exceptions as identity_exc
2728
from openstackclient.common import command
29+
from openstackclient.common import exceptions
2830
from openstackclient.common import utils
2931

3032

31-
class Create_Service(command.OpenStackCommand):
33+
class CreateService(command.OpenStackCommand, show.ShowOne):
3234
"""Create service command"""
3335

34-
# FIXME(dtroyer): Service commands are still WIP
3536
api = 'identity'
36-
log = logging.getLogger(__name__)
37+
log = logging.getLogger(__name__ + '.CreateService')
3738

3839
def get_parser(self, prog_name):
39-
parser = super(Create_Service, self).get_parser(prog_name)
40+
parser = super(CreateService, self).get_parser(prog_name)
4041
parser.add_argument(
41-
'service_name',
42+
'name',
4243
metavar='<service-name>',
4344
help='New service name')
45+
parser.add_argument(
46+
'--type',
47+
metavar='<service-type>',
48+
required=True,
49+
help='New service type',
50+
)
51+
parser.add_argument(
52+
'--description',
53+
metavar='<service-description>',
54+
help='New service description',
55+
)
4456
return parser
4557

4658
def get_data(self, parsed_args):
47-
self.log.info('v2.Create_Service.get_data(%s)' % parsed_args)
59+
self.log.debug('get_data(%s)' % parsed_args)
60+
identity_client = self.app.client_manager.identity
61+
service = identity_client.services.create(
62+
parsed_args.name,
63+
parsed_args.type,
64+
parsed_args.description,
65+
)
66+
67+
info = {}
68+
info.update(service._info)
69+
return zip(*sorted(info.iteritems()))
4870

4971

50-
class List_Service(command.OpenStackCommand, lister.Lister):
72+
class DeleteService(command.OpenStackCommand):
73+
"""Delete service command"""
74+
75+
api = 'identity'
76+
log = logging.getLogger(__name__ + '.DeleteService')
77+
78+
def get_parser(self, prog_name):
79+
parser = super(DeleteService, self).get_parser(prog_name)
80+
parser.add_argument(
81+
'service',
82+
metavar='<service-id>',
83+
help='ID of service to delete',
84+
)
85+
return parser
86+
87+
def run(self, parsed_args):
88+
self.log.debug('run(%s)' % parsed_args)
89+
identity_client = self.app.client_manager.identity
90+
identity_client.services.delete(parsed_args.service)
91+
return
92+
93+
94+
class ListService(command.OpenStackCommand, lister.Lister):
5195
"""List service command"""
5296

5397
api = 'identity'
54-
log = logging.getLogger(__name__)
98+
log = logging.getLogger(__name__ + '.ListService')
5599

56100
def get_parser(self, prog_name):
57-
parser = super(List_Service, self).get_parser(prog_name)
101+
parser = super(ListService, self).get_parser(prog_name)
58102
parser.add_argument(
59103
'--long',
60104
action='store_true',
@@ -63,7 +107,7 @@ def get_parser(self, prog_name):
63107
return parser
64108

65109
def get_data(self, parsed_args):
66-
self.log.debug('v2.List_Service.get_data(%s)' % parsed_args)
110+
self.log.debug('get_data(%s)' % parsed_args)
67111
if parsed_args.long:
68112
columns = ('ID', 'Name', 'Type', 'Description')
69113
else:
@@ -73,33 +117,43 @@ def get_data(self, parsed_args):
73117
(utils.get_item_properties(
74118
s, columns,
75119
formatters={},
76-
) for s in data),
77-
)
120+
) for s in data),
121+
)
78122

79123

80-
class Show_Service(command.OpenStackCommand, show.ShowOne):
124+
class ShowService(command.OpenStackCommand, show.ShowOne):
81125
"""Show service command"""
82126

83127
api = 'identity'
84-
log = logging.getLogger(__name__)
128+
log = logging.getLogger(__name__ + '.ShowService')
85129

86130
def get_parser(self, prog_name):
87-
parser = super(Show_Service, self).get_parser(prog_name)
131+
parser = super(ShowService, self).get_parser(prog_name)
88132
parser.add_argument(
89133
'service',
90134
metavar='<service>',
91-
help='Name or ID of service to display')
135+
help='Type, name or ID of service to display')
92136
return parser
93137

94138
def get_data(self, parsed_args):
95-
self.log.info('v2.Show_Service.get_data(%s)' % parsed_args)
139+
self.log.debug('get_data(%s)' % parsed_args)
96140
identity_client = self.app.client_manager.identity
97-
service = utils.find_resource(
98-
identity_client.services, parsed_args.service)
141+
try:
142+
# search for the usual ID or name
143+
service = utils.find_resource(
144+
identity_client.services, parsed_args.service)
145+
except exceptions.CommandError:
146+
try:
147+
# search for service type
148+
service = identity_client.services.find(
149+
type=parsed_args.service)
150+
# FIXME(dtroyer): This exception should eventually come from
151+
# common client exceptions
152+
except identity_exc.NotFound:
153+
msg = "No service with a type, name or ID of '%s' exists." % \
154+
name_or_id
155+
raise exceptions.CommandError(msg)
99156

100157
info = {}
101-
info.update(user._info)
102-
103-
columns = sorted(info.keys())
104-
values = [info[c] for c in columns]
105-
return (columns, values)
158+
info.update(service._info)
159+
return zip(*sorted(info.iteritems()))

‎setup.py‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@ def read(fname):
6262
'list_server=openstackclient.compute.v2.server:List_Server',
6363
'show_server=openstackclient.compute.v2.server:Show_Server',
6464
'create_service=' +
65-
'openstackclient.identity.v2_0.service:Create_Service',
66-
'list_service=openstackclient.identity.v2_0.service:List_Service',
67-
'show_service=openstackclient.identity.v2_0.service:Show_Service',
65+
'openstackclient.identity.v2_0.service:CreateService',
66+
'delete_service=' +
67+
'openstackclient.identity.v2_0.service:DeleteService',
68+
'list_service=openstackclient.identity.v2_0.service:ListService',
69+
'show_service=openstackclient.identity.v2_0.service:ShowService',
6870
'create_tenant=' +
6971
'openstackclient.identity.v2_0.tenant:Create_Tenant',
7072
'delete_tenant=' +

0 commit comments

Comments
 (0)