diff --git a/doc/source/command-objects/token.rst b/doc/source/command-objects/token.rst index 22260f0de..5e7c7b268 100644 --- a/doc/source/command-objects/token.rst +++ b/doc/source/command-objects/token.rst @@ -17,8 +17,6 @@ Issue new token token revoke ------------ -*Identity version 2 only.* - Revoke existing token .. program:: token revoke diff --git a/openstackclient/identity/v3/token.py b/openstackclient/identity/v3/token.py index 588c5218f..9ebd17995 100644 --- a/openstackclient/identity/v3/token.py +++ b/openstackclient/identity/v3/token.py @@ -173,3 +173,22 @@ class IssueToken(command.ShowOne): if 'tenant_id' in token: token['project_id'] = token.pop('tenant_id') return zip(*sorted(six.iteritems(token))) + + +class RevokeToken(command.Command): + """Revoke existing token""" + + def get_parser(self, prog_name): + parser = super(RevokeToken, self).get_parser(prog_name) + parser.add_argument( + 'token', + metavar='', + help='Token to be deleted', + ) + return parser + + def take_action(self, parsed_args): + identity_client = self.app.client_manager.identity + + identity_client.tokens.revoke_token(parsed_args.token) + return diff --git a/openstackclient/tests/identity/v3/fakes.py b/openstackclient/tests/identity/v3/fakes.py index 9fe341ed6..d0a2ef53d 100644 --- a/openstackclient/tests/identity/v3/fakes.py +++ b/openstackclient/tests/identity/v3/fakes.py @@ -420,6 +420,8 @@ class FakeIdentityv3Client(object): self.session = mock.Mock() self.session.auth.auth_ref.service_catalog.resource_class = \ fakes.FakeResource(None, {}) + self.tokens = mock.Mock() + self.tokens.resource_class = fakes.FakeResource(None, {}) self.trusts = mock.Mock() self.trusts.resource_class = fakes.FakeResource(None, {}) self.users = mock.Mock() diff --git a/openstackclient/tests/identity/v3/test_token.py b/openstackclient/tests/identity/v3/test_token.py index 6ad4845da..192d71ee1 100644 --- a/openstackclient/tests/identity/v3/test_token.py +++ b/openstackclient/tests/identity/v3/test_token.py @@ -80,3 +80,24 @@ class TestTokenIssue(TestToken): identity_fakes.user_id, ) self.assertEqual(datalist, data) + + +class TestTokenRevoke(TestToken): + + TOKEN = 'fob' + + def setUp(self): + super(TestTokenRevoke, self).setUp() + self.tokens_mock = self.app.client_manager.identity.tokens + self.tokens_mock.reset_mock() + self.tokens_mock.revoke_token.return_value = True + self.cmd = token.RevokeToken(self.app, None) + + def test_token_revoke(self): + arglist = [self.TOKEN] + verifylist = [('token', self.TOKEN)] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + self.tokens_mock.revoke_token.assert_called_with(self.TOKEN) diff --git a/releasenotes/notes/bug-1543226-7d885ecaa3715415.yaml b/releasenotes/notes/bug-1543226-7d885ecaa3715415.yaml new file mode 100644 index 000000000..c7778d0e1 --- /dev/null +++ b/releasenotes/notes/bug-1543226-7d885ecaa3715415.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add ``token revoke`` command for Identity v3 + [Bug `1543226 `_] diff --git a/setup.cfg b/setup.cfg index 4cf9622ce..8bcb99ded 100644 --- a/setup.cfg +++ b/setup.cfg @@ -295,6 +295,7 @@ openstack.identity.v3 = service_provider_show = openstackclient.identity.v3.service_provider:ShowServiceProvider token_issue = openstackclient.identity.v3.token:IssueToken + token_revoke = openstackclient.identity.v3.token:RevokeToken trust_create = openstackclient.identity.v3.trust:CreateTrust trust_delete = openstackclient.identity.v3.trust:DeleteTrust