From 8e509a9bf72fe89edc9ad69221aa2e37bf4bcb0a Mon Sep 17 00:00:00 2001 From: dparalen Date: Wed, 9 Nov 2016 14:33:41 +0100 Subject: [PATCH] UUID, started_at, finished_at in the status A service compatibility patch. * documenting the API&CLI get status return value * bumping supported API minor version (1.7) * adding a release note Change-Id: If1e96011439917a161fb87788cfc3026745f4484 Partial-Bug: #1525238 --- doc/source/cli.rst | 8 ++++++++ ironic_inspector_client/shell.py | 4 +++- ironic_inspector_client/test/functional.py | 9 +++++++++ ironic_inspector_client/v1.py | 11 ++++++++--- ...at-finished_at-in-the-status-cafa48aeb5653412.yaml | 5 +++++ 5 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/UUID-started_at-finished_at-in-the-status-cafa48aeb5653412.yaml diff --git a/doc/source/cli.rst b/doc/source/cli.rst index 7229daa..6bd411a 100644 --- a/doc/source/cli.rst +++ b/doc/source/cli.rst @@ -44,6 +44,14 @@ Query introspection status * ``UUID`` - Ironic node UUID. +Returns following information about a node introspection status: + +* ``error``: an error string or ``None`` +* ``finished``: ``True/False`` +* ``finished_at``: an ISO8601 timestamp or ``None`` if not finished +* ``started_at``: an ISO8601 timestamp +* ``uuid``: node UUID + Retrieving introspection data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/ironic_inspector_client/shell.py b/ironic_inspector_client/shell.py index 38d646a..2aad24a 100644 --- a/ironic_inspector_client/shell.py +++ b/ironic_inspector_client/shell.py @@ -115,6 +115,7 @@ class ReprocessCommand(command.Command): class StatusCommand(command.ShowOne): """Get introspection status.""" + hidden_status_items = {'links'} def get_parser(self, prog_name): parser = super(StatusCommand, self).get_parser(prog_name) @@ -124,7 +125,8 @@ class StatusCommand(command.ShowOne): def take_action(self, parsed_args): client = self.app.client_manager.baremetal_introspection status = client.get_status(parsed_args.uuid) - return zip(*sorted(status.items())) + return zip(*sorted(item for item in status.items() + if item[0] not in self.hidden_status_items)) class AbortCommand(command.Command): diff --git a/ironic_inspector_client/test/functional.py b/ironic_inspector_client/test/functional.py index 61507f0..1f1552d 100644 --- a/ironic_inspector_client/test/functional.py +++ b/ironic_inspector_client/test/functional.py @@ -27,6 +27,7 @@ from oslo_concurrency import processutils import ironic_inspector_client as client from ironic_inspector_client.common import http +from ironic_inspector_client import shell class TestV1PythonAPI(functional.Base): @@ -304,6 +305,14 @@ class BaseCLITest(functional.Base): class TestCLI(BaseCLITest): + def _fake_status(self, **kwargs): + # to remove the hidden fields + hidden_status_items = shell.StatusCommand.hidden_status_items + fake_status = super(TestCLI, self)._fake_status(**kwargs) + fake_status = dict(item for item in fake_status.items() + if item[0] not in hidden_status_items) + return fake_status + def test_cli_negative(self): err = self.run_cli('start', expect_error=True) self.assertIn('too few arguments', err) diff --git a/ironic_inspector_client/v1.py b/ironic_inspector_client/v1.py index 1a1b760..80ec2d4 100644 --- a/ironic_inspector_client/v1.py +++ b/ironic_inspector_client/v1.py @@ -25,7 +25,7 @@ from ironic_inspector_client.common.i18n import _ DEFAULT_API_VERSION = (1, 0) """Server API version used by default.""" -MAX_API_VERSION = (1, 6) +MAX_API_VERSION = (1, 7) """Maximum API version this client was designed to work with. This does not mean that other versions won't work at all - the server might @@ -138,8 +138,13 @@ class ClientV1(http.BaseClient): :raises: :py:class:`.VersionNotSupported` if requested api_version is not supported :raises: *requests* library exception on connection problems. - :return: dictionary with keys "finished" (True/False) and "error" - (error string or None). + :return: dictionary with the keys: + `error` an error string or None, + `finished` True/False, + `finished_at` an ISO8601 timestamp or None, + `links` with a self-link URL, + `started_at` an ISO8601 timestamp, + `uuid` the node UUID """ if not isinstance(uuid, six.string_types): raise TypeError( diff --git a/releasenotes/notes/UUID-started_at-finished_at-in-the-status-cafa48aeb5653412.yaml b/releasenotes/notes/UUID-started_at-finished_at-in-the-status-cafa48aeb5653412.yaml new file mode 100644 index 0000000..ccad416 --- /dev/null +++ b/releasenotes/notes/UUID-started_at-finished_at-in-the-status-cafa48aeb5653412.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + the introspection status returns the ``error``, ``finished``, + ``finished_at``, ``links``, ``started_at`` and ``uuid`` fields