Skip to content

Commit a93851d

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Implement CRUD operations for Identity Providers"
2 parents 03b9a72 + ef9496a commit a93851d

4 files changed

Lines changed: 581 additions & 0 deletions

File tree

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
2+
# not use this file except in compliance with the License. You may obtain
3+
# a copy of the License at
4+
#
5+
# http://www.apache.org/licenses/LICENSE-2.0
6+
#
7+
# Unless required by applicable law or agreed to in writing, software
8+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10+
# License for the specific language governing permissions and limitations
11+
# under the License.
12+
#
13+
14+
"""Identity v3 IdentityProvider action implementations"""
15+
16+
import logging
17+
import six
18+
import sys
19+
20+
from cliff import command
21+
from cliff import lister
22+
from cliff import show
23+
24+
from openstackclient.common import utils
25+
26+
27+
class CreateIdentityProvider(show.ShowOne):
28+
"""Create identity_provider command"""
29+
30+
log = logging.getLogger(__name__ + '.CreateIdentityProvider')
31+
32+
def get_parser(self, prog_name):
33+
parser = super(CreateIdentityProvider, self).get_parser(prog_name)
34+
parser.add_argument(
35+
'identity_provider_id',
36+
metavar='<identity_provider_id>',
37+
help='New identity provider ID (must be unique)'
38+
)
39+
parser.add_argument(
40+
'--description',
41+
metavar='<description>',
42+
help='New identity provider description',
43+
)
44+
45+
enable_identity_provider = parser.add_mutually_exclusive_group()
46+
enable_identity_provider.add_argument(
47+
'--enable',
48+
dest='enabled',
49+
action='store_true',
50+
default=True,
51+
help='Enable identity provider',
52+
)
53+
enable_identity_provider.add_argument(
54+
'--disable',
55+
dest='enabled',
56+
action='store_false',
57+
help='Disable the identity provider',
58+
)
59+
return parser
60+
61+
def take_action(self, parsed_args):
62+
self.log.debug('take_action(%s)' % parsed_args)
63+
identity_client = self.app.client_manager.identity
64+
idp = identity_client.identity_providers.create(
65+
parsed_args.identity_provider_id,
66+
description=parsed_args.description,
67+
enabled=parsed_args.enabled)
68+
info = {}
69+
info.update(idp._info)
70+
return zip(*sorted(six.iteritems(info)))
71+
72+
73+
class DeleteIdentityProvider(command.Command):
74+
"""Delete identity provider"""
75+
76+
log = logging.getLogger(__name__ + '.DeleteIdentityProvider')
77+
78+
def get_parser(self, prog_name):
79+
parser = super(DeleteIdentityProvider, self).get_parser(prog_name)
80+
parser.add_argument(
81+
'identity_provider',
82+
metavar='<identity_provider>',
83+
help='ID of the identity provider to be deleted',
84+
)
85+
return parser
86+
87+
def take_action(self, parsed_args):
88+
self.log.debug('take_action(%s)' % parsed_args)
89+
identity_client = self.app.client_manager.identity
90+
identity_client.identity_providers.delete(
91+
parsed_args.identity_provider)
92+
return
93+
94+
95+
class ListIdentityProvider(lister.Lister):
96+
"""List identity providers"""
97+
98+
log = logging.getLogger(__name__ + '.ListIdentityProvider')
99+
100+
def take_action(self, parsed_args):
101+
self.log.debug('take_action(%s)' % parsed_args)
102+
columns = ('ID', 'Enabled', 'Description')
103+
data = self.app.client_manager.identity.identity_providers.list()
104+
return (columns,
105+
(utils.get_item_properties(
106+
s, columns,
107+
formatters={},
108+
) for s in data))
109+
110+
111+
class SetIdentityProvider(command.Command):
112+
"""Set identity provider"""
113+
114+
log = logging.getLogger(__name__ + '.SetIdentityProvider')
115+
116+
def get_parser(self, prog_name):
117+
parser = super(SetIdentityProvider, self).get_parser(prog_name)
118+
parser.add_argument(
119+
'identity_provider',
120+
metavar='<identity_provider>',
121+
help='ID of the identity provider to be changed',
122+
)
123+
124+
enable_identity_provider = parser.add_mutually_exclusive_group()
125+
enable_identity_provider.add_argument(
126+
'--enable',
127+
action='store_true',
128+
help='Enable the identity provider',
129+
)
130+
enable_identity_provider.add_argument(
131+
'--disable',
132+
action='store_true',
133+
help='Disable the identity provider',
134+
)
135+
return parser
136+
137+
def take_action(self, parsed_args):
138+
self.log.debug('take_action(%s)' % parsed_args)
139+
identity_client = self.app.client_manager.identity
140+
141+
if parsed_args.enable is True:
142+
enabled = True
143+
elif parsed_args.disable is True:
144+
enabled = False
145+
else:
146+
sys.stdout.write("Identity Provider not updated, "
147+
"no arguments present")
148+
return (None, None)
149+
150+
identity_provider = identity_client.identity_providers.update(
151+
parsed_args.identity_provider, enabled=enabled)
152+
info = {}
153+
info.update(identity_provider._info)
154+
return zip(*sorted(six.iteritems(info)))
155+
156+
157+
class ShowIdentityProvider(show.ShowOne):
158+
"""Show identity provider"""
159+
160+
log = logging.getLogger(__name__ + '.ShowIdentityProvider')
161+
162+
def get_parser(self, prog_name):
163+
parser = super(ShowIdentityProvider, self).get_parser(prog_name)
164+
parser.add_argument(
165+
'identity_provider',
166+
metavar='<identity_provider>',
167+
help='ID of the identity provider to be displayed',
168+
)
169+
return parser
170+
171+
def take_action(self, parsed_args):
172+
self.log.debug('take_action(%s)' % parsed_args)
173+
identity_client = self.app.client_manager.identity
174+
identity_provider = utils.find_resource(
175+
identity_client.identity_providers,
176+
parsed_args.identity_provider)
177+
178+
info = {}
179+
info.update(identity_provider._info)
180+
return zip(*sorted(six.iteritems(info)))

‎openstackclient/tests/identity/v3/fakes.py‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,15 @@
105105
'user_id': user_id,
106106
}
107107

108+
idp_id = 'test_idp'
109+
idp_description = 'super exciting IdP description'
110+
111+
IDENTITY_PROVIDER = {
112+
'id': idp_id,
113+
'enabled': True,
114+
'description': idp_description
115+
}
116+
108117

109118
class FakeIdentityv3Client(object):
110119
def __init__(self, **kwargs):
@@ -125,6 +134,14 @@ def __init__(self, **kwargs):
125134
self.management_url = kwargs['endpoint']
126135

127136

137+
class FakeFederatedClient(FakeIdentityv3Client):
138+
def __init__(self, **kwargs):
139+
super(FakeFederatedClient, self).__init__(**kwargs)
140+
141+
self.identity_providers = mock.Mock()
142+
self.identity_providers.resource_class = fakes.FakeResource(None, {})
143+
144+
128145
class TestIdentityv3(utils.TestCommand):
129146
def setUp(self):
130147
super(TestIdentityv3, self).setUp()
@@ -133,3 +150,13 @@ def setUp(self):
133150
endpoint=fakes.AUTH_URL,
134151
token=fakes.AUTH_TOKEN,
135152
)
153+
154+
155+
class TestFederatedIdentity(utils.TestCommand):
156+
def setUp(self):
157+
super(TestFederatedIdentity, self).setUp()
158+
159+
self.app.client_manager.identity = FakeFederatedClient(
160+
endpoint=fakes.AUTH_URL,
161+
token=fakes.AUTH_TOKEN
162+
)

0 commit comments

Comments
 (0)