Hello community, here is the log from the commit of package python-ironic-inspector-client for openSUSE:Factory checked in at 2020-10-26 16:15:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ironic-inspector-client (Old) and /work/SRC/openSUSE:Factory/.python-ironic-inspector-client.new.3463 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ironic-inspector-client" Mon Oct 26 16:15:16 2020 rev:14 rq:841181 version:4.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ironic-inspector-client/python-ironic-inspector-client.changes 2020-06-05 20:13:24.646361502 +0200 +++ /work/SRC/openSUSE:Factory/.python-ironic-inspector-client.new.3463/python-ironic-inspector-client.changes 2020-10-26 16:16:05.942924785 +0100 @@ -1,0 +2,27 @@ +Fri Oct 9 19:13:57 UTC 2020 - cloud-de...@suse.de + +- update to version 4.3.0 + - Upgrade flake8-import-order version to 0.17.1 + - Switch to newer openstackdocstheme and reno versions + - Tempest job to use the inherited devstack_services value + - Support retrieving unprocessed data + - Document the new standalone CLI + - Follow up to update functest-requirements + - Update master for stable/ussuri + - Use unittest.mock instead of third party mock + - Hacking: enforce usage of autospec=True in tests + - Add py38 package metadata + - Convert job to dib + - Provide a clear error message when trying to access ironic (not inspector) + - Add Python3 victoria unit tests + - Update lower-constraints.txt + - Set min version of tox to 3.2.1 + - Use only one job for tempest + - Restore default netboot boot option + - No need to import print function anymore + - Update releasenotes conf + - Fix pep8 job and functional job + - Remove python3 from job name + - Change parent for base job to ironic-inspector-base + +------------------------------------------------------------------- Old: ---- python-ironic-inspector-client-4.1.0.tar.gz New: ---- python-ironic-inspector-client-4.3.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ironic-inspector-client.spec ++++++ --- /var/tmp/diff_new_pack.PRYp6X/_old 2020-10-26 16:16:06.626925335 +0100 +++ /var/tmp/diff_new_pack.PRYp6X/_new 2020-10-26 16:16:06.630925338 +0100 @@ -17,13 +17,13 @@ Name: python-ironic-inspector-client -Version: 4.1.0 +Version: 4.3.0 Release: 0 Summary: Python client and CLI tool for Ironic Inspector License: Apache-2.0 Group: Development/Languages/Python URL: https://launchpad.net/python-ironic-inspector-client -Source0: https://files.pythonhosted.org/packages/source/p/python-ironic-inspector-client/python-ironic-inspector-client-4.1.0.tar.gz +Source0: https://files.pythonhosted.org/packages/source/p/python-ironic-inspector-client/python-ironic-inspector-client-4.3.0.tar.gz BuildRequires: openstack-macros BuildRequires: python3-fixtures BuildRequires: python3-mock @@ -48,7 +48,7 @@ %package -n python3-ironic-inspector-client Summary: Python client and CLI tool for Ironic Inspector Group: Development/Languages/Python -Requires: python3-PyYAML >= 3.12 +Requires: python3-PyYAML >= 3.13 Requires: python3-keystoneauth1 >= 3.4.0 Requires: python3-openstackclient Requires: python3-osc-lib @@ -68,7 +68,7 @@ This package contains the Python 3.x module. %prep -%autosetup -p1 -n python-ironic-inspector-client-4.1.0 +%autosetup -p1 -n python-ironic-inspector-client-4.3.0 sed -i -e 's,hacking.*,,' test-requirements.txt sed -i -e 's,coverage.*,,' test-requirements.txt sed -i -e 's,doc8.*,,' test-requirements.txt ++++++ _service ++++++ --- /var/tmp/diff_new_pack.PRYp6X/_old 2020-10-26 16:16:06.682925381 +0100 +++ /var/tmp/diff_new_pack.PRYp6X/_new 2020-10-26 16:16:06.682925381 +0100 @@ -1,8 +1,8 @@ <services> <service mode="disabled" name="renderspec"> - <param name="input-template">https://git.openstack.org/cgit/openstack/rpm-packaging/plain/openstack/python-ironic-inspector-client/python-ironic-inspector-client.spec.j2?h=stable/ussuri</param> + <param name="input-template">https://git.openstack.org/cgit/openstack/rpm-packaging/plain/openstack/python-ironic-inspector-client/python-ironic-inspector-client.spec.j2?h=stable/victoria</param> <param name="output-name">python-ironic-inspector-client.spec</param> - <param name="requirements">https://opendev.org/openstack/python-ironic-inspector-client/raw/branch/stable/ussuri/requirements.txt</param> + <param name="requirements">https://opendev.org/openstack/python-ironic-inspector-client/raw/branch/stable/victoria/requirements.txt</param> <param name="changelog-email">cloud-de...@suse.de</param> <param name="changelog-provider">gh,openstack,python-ironic-inspector-client</param> </service> ++++++ python-ironic-inspector-client-4.1.0.tar.gz -> python-ironic-inspector-client-4.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/AUTHORS new/python-ironic-inspector-client-4.3.0/AUTHORS --- old/python-ironic-inspector-client-4.1.0/AUTHORS 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/AUTHORS 2020-09-11 02:54:29.000000000 +0200 @@ -21,6 +21,7 @@ John L. Villalovos <john.l.villalo...@intel.com> Julia Kreger <juliaashleykre...@gmail.com> Kaifeng Wang <kaifen...@gmail.com> +Lucas Alvares Gomes <lucasago...@gmail.com> Luong Anh Tuan <tua...@vn.fujitsu.com> Madhuri Kumari <madhuri.ra...@gmail.com> Mark Goddard <m...@stackhpc.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ChangeLog new/python-ironic-inspector-client-4.3.0/ChangeLog --- old/python-ironic-inspector-client-4.1.0/ChangeLog 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ChangeLog 2020-09-11 02:54:29.000000000 +0200 @@ -1,6 +1,36 @@ CHANGES ======= +4.3.0 +----- + +* Provide a clear error message when trying to access ironic (not inspector) +* Support retrieving unprocessed data +* Tempest job to use the inherited devstack\_services value +* Set min version of tox to 3.2.1 + +4.2.0 +----- + +* Use unittest.mock instead of third party mock +* Use only one job for tempest +* Change parent for base job to ironic-inspector-base +* Update releasenotes conf +* Update lower-constraints.txt +* Switch to newer openstackdocstheme and reno versions +* Convert job to dib +* Follow up to update functest-requirements +* Fix pep8 job and functional job +* Upgrade flake8-import-order version to 0.17.1 +* Hacking: enforce usage of autospec=True in tests +* Restore default netboot boot option +* Add py38 package metadata +* No need to import print function anymore +* Document the new standalone CLI +* Add Python3 victoria unit tests +* Update master for stable/ussuri +* Remove python3 from job name + 4.1.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/PKG-INFO new/python-ironic-inspector-client-4.3.0/PKG-INFO --- old/python-ironic-inspector-client-4.1.0/PKG-INFO 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/PKG-INFO 2020-09-11 02:54:29.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: python-ironic-inspector-client -Version: 4.1.0 +Version: 4.3.0 Summary: Python client for Ironic Inspector Home-page: https://docs.openstack.org/python-ironic-inspector-client/latest/ Author: OpenStack @@ -47,6 +47,7 @@ Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 Requires-Python: >=3.6 Provides-Extra: cli Provides-Extra: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/doc/requirements.txt new/python-ironic-inspector-client-4.3.0/doc/requirements.txt --- old/python-ironic-inspector-client-4.1.0/doc/requirements.txt 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/doc/requirements.txt 2020-09-11 02:53:33.000000000 +0200 @@ -1,5 +1,5 @@ -sphinx!=1.6.6,!=1.6.7,!=2.1.0,>=1.6.2 # BSD -openstackdocstheme>=1.20.0 # Apache-2.0 -reno>=2.5.0 # Apache-2.0 +sphinx>=2.0.0,!=2.1.0 # BSD +openstackdocstheme>=2.2.0 # Apache-2.0 +reno>=3.1.0 # Apache-2.0 sphinxcontrib-apidoc>=0.2.0 # BSD sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/doc/source/cli/index.rst new/python-ironic-inspector-client-4.3.0/doc/source/cli/index.rst --- old/python-ironic-inspector-client-4.1.0/doc/source/cli/index.rst 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/doc/source/cli/index.rst 2020-09-11 02:53:33.000000000 +0200 @@ -1,12 +1,39 @@ Command Line Reference ====================== +Integration for two command lines tools are provided: ironicclient_ and +OpenStackClient_. -CLI tool is based on OpenStackClient_ with prefix -``openstack baremetal introspection``. +Integration with ``baremetal`` CLI +---------------------------------- + +The ``baremetal`` command is provided by ironicclient_, so it has to be +installed, e.g.: + +.. code-block:: shell + + pip install 'python-ironicclient>=4.1.0' + +All commands are prefixed with ``baremetal introspection``. See `standalone +ironic CLI documentation`_ for details on how to use it. + +.. _ironicclient: https://docs.openstack.org/python-ironicclient/ +.. _standalone ironic CLI documentation: https://docs.openstack.org/python-ironicclient/latest/cli/standalone.html + +Integration with ``openstack baremetal`` CLI +-------------------------------------------- + +The ``openstack`` command is provided by ironicclient_, so it has to be +installed, e.g.: + +.. code-block:: shell + + pip install python-openstackclient. + +All commands are prefixed with ``baremetal introspection``. Common arguments ----------------- +~~~~~~~~~~~~~~~~ All commands accept the following arguments: @@ -89,11 +116,13 @@ :: - $ openstack baremetal introspection data save [--file file_name] NODE_ID + $ openstack baremetal introspection data save [--file file_name] [--unprocessed] NODE_ID * ``NODE_ID`` - Ironic node UUID or name; * ``file_name`` - file name to save data to. If file name is not provided, the data is dumped to stdout. +* ``--unprocessed`` - if set, retrieves the unprocessed data received from the + ramdisk. .. note:: This feature requires Swift support to be enabled in **Ironic Inspector** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/doc/source/conf.py new/python-ironic-inspector-client-4.3.0/doc/source/conf.py --- old/python-ironic-inspector-client-4.1.0/doc/source/conf.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/doc/source/conf.py 2020-09-11 02:53:33.000000000 +0200 @@ -11,8 +11,9 @@ 'openstackdocstheme', ] -repository_name = 'openstack/python-ironic-inspector-client' -use_storyboard = True +openstackdocs_repo_name = 'openstack/python-ironic-inspector-client' +openstackdocs_pdf_link = True +openstackdocs_use_storyboard = True wsme_protocols = ['restjson'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/functest-requirements.txt new/python-ironic-inspector-client-4.3.0/functest-requirements.txt --- old/python-ironic-inspector-client-4.1.0/functest-requirements.txt 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/functest-requirements.txt 2020-09-11 02:53:33.000000000 +0200 @@ -1,4 +1,4 @@ # NOTE(jroll) these are pinned to the same SHA, update when needed. -# Last updated: Apr 2, 2020 (Ussuri cycle). -git+https://opendev.org/openstack/ironic-inspector@75437072da66686509d4b7fa80589f5b4966a858#egg=ironic-inspector --r https://opendev.org/openstack/ironic-inspector/raw/commit/75437072da66686509d4b7fa80589f5b4966a858/test-requirements.txt +# Last updated: May 14, 2020 (Victoria cycle). +git+https://opendev.org/openstack/ironic-inspector@721bd814a61cd4dec433465fff55a5235853c9a2#egg=ironic-inspector +-r https://opendev.org/openstack/ironic-inspector/raw/commit/721bd814a61cd4dec433465fff55a5235853c9a2/test-requirements.txt \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/common/http.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/common/http.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/common/http.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/common/http.py 2020-09-11 02:53:33.000000000 +0200 @@ -47,12 +47,31 @@ # inspector returns error message in body msg = response.content.decode(_ERROR_ENCODING) try: - msg = json.loads(msg)['error']['message'] + msg = json.loads(msg) except ValueError: LOG.debug('Old style error response returned, assuming ' 'ironic-discoverd') - except (KeyError, TypeError): + except TypeError: LOG.exception('Bad error response from Ironic Inspector') + else: + try: + msg = msg['error']['message'] + except KeyError as exc: + LOG.error('Invalid error response from Ironic Inspector: ' + '%(msg)s (missing key %(key)s)', + {'msg': msg, 'key': exc}) + # It's surprisingly common to try accessing ironic URL with + # ironic-inspector-client, handle this case + try: + msg = msg['error_message'] + except KeyError: + pass + else: + msg = _('Received Ironic-style response %s. Are you ' + 'trying to access Ironic URL instead of Ironic ' + 'Inspector?') % msg + except TypeError: + LOG.exception('Bad error response from Ironic Inspector') LOG.debug('Inspector returned error "%(msg)s" (HTTP %(code)s)', {'msg': msg, 'code': response.status_code}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/shell.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/shell.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/shell.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/shell.py 2020-09-11 02:53:33.000000000 +0200 @@ -13,8 +13,6 @@ """OpenStackClient plugin for Ironic Inspector.""" -from __future__ import print_function - import json import os import sys @@ -289,13 +287,16 @@ parser.add_argument("--file", metavar="<filename>", help="downloaded introspection data filename " "(default: stdout)") + parser.add_argument('--unprocessed', action='store_true', + help="download the unprocessed data") parser.add_argument('node', help='baremetal node UUID or name') return parser def take_action(self, parsed_args): client = self.app.client_manager.baremetal_introspection data = client.get_data(parsed_args.node, - raw=bool(parsed_args.file)) + raw=bool(parsed_args.file), + processed=not parsed_args.unprocessed) if parsed_args.file: with open(parsed_args.file, 'wb') as fp: fp.write(data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/functional.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/functional.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/functional.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/functional.py 2020-09-11 02:53:33.000000000 +0200 @@ -16,15 +16,15 @@ import sys import tempfile import unittest +from unittest import mock import eventlet -eventlet.monkey_patch() # noqa +eventlet.monkey_patch() from ironic_inspector import introspection_state as istate from ironic_inspector import process from ironic_inspector.test import functional from keystoneauth1 import session as ks_session from keystoneauth1 import token_endpoint -import mock from oslo_concurrency import processutils import ironic_inspector_client as client @@ -210,6 +210,7 @@ rule = {'conditions': [], 'actions': [{'action': 'fail', 'message': 'boom'}], 'description': 'Cool actions', + 'scope': None, 'uuid': self.uuid} res = self.client.rules.from_json(rule) self.assertEqual(self.uuid, res['uuid']) @@ -222,7 +223,8 @@ res = self.client.rules.get_all() self.assertEqual(rule['links'], res[0].pop('links')) self.assertEqual([{'uuid': self.uuid, - 'description': 'Cool actions'}], + 'description': 'Cool actions', + 'scope': None}], res) self.client.rules.delete(self.uuid) @@ -357,13 +359,15 @@ rule = {'conditions': [], 'actions': [{'action': 'fail', 'message': 'boom'}], 'description': 'Cool actions', + 'scope': None, 'uuid': self.uuid} with tempfile.NamedTemporaryFile(mode='w') as fp: json.dump(rule, fp) fp.flush() res = self.run_cli('rule', 'import', fp.name, parse_json=True) - self.assertEqual([{'UUID': self.uuid, 'Description': 'Cool actions'}], + self.assertEqual([{'UUID': self.uuid, + 'Description': 'Cool actions'}], res) res = self.run_cli('rule', 'show', self.uuid, parse_json=True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_common_http.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_common_http.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_common_http.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_common_http.py 2020-09-11 02:53:33.000000000 +0200 @@ -13,10 +13,10 @@ import json import unittest +from unittest import mock from keystoneauth1 import exceptions from keystoneauth1 import session -import mock from ironic_inspector_client.common import http @@ -192,3 +192,28 @@ self.assertRaisesRegex(http.ClientError, 'boom', self.get_client().request, 'get', 'url') + + def test_accessing_ironic(self): + self.req.return_value.status_code = 400 + self.req.return_value.content = json.dumps( + {"error_message": "{\"code\": 404, \"title\": \"Not Found\", " + "\"description\": \"\"}"}).encode('utf-8') + + self.assertRaisesRegex(http.ClientError, + 'Ironic-style response.*Not Found', + self.get_client().request, 'get', 'url') + + def test_error_non_sense(self): + self.req.return_value.status_code = 400 + self.req.return_value.content = json.dumps( + {'hello': 'world'}).encode('utf-8') + + self.assertRaisesRegex(http.ClientError, 'hello', + self.get_client().request, 'get', 'url') + + def test_error_non_sense2(self): + self.req.return_value.status_code = 400 + self.req.return_value.content = b'42' + + self.assertRaisesRegex(http.ClientError, '42', + self.get_client().request, 'get', 'url') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_init.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_init.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_init.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_init.py 2020-09-11 02:53:33.000000000 +0200 @@ -20,9 +20,9 @@ class TestExposedAPI(unittest.TestCase): def test_only_client_all_exposed(self): exposed = {x for x in dir(ironic_inspector_client) - if not x.startswith('__') and - not isinstance(getattr(ironic_inspector_client, x), - types.ModuleType)} + if not x.startswith('__') + and not isinstance(getattr(ironic_inspector_client, x), + types.ModuleType)} self.assertEqual({'ClientV1', 'ClientError', 'EndpointNotFound', 'VersionNotSupported', 'MAX_API_VERSION', 'DEFAULT_API_VERSION'}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_shell.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_shell.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_shell.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_shell.py 2020-09-11 02:53:33.000000000 +0200 @@ -15,8 +15,8 @@ import io import sys import tempfile +from unittest import mock -import mock from osc_lib.tests import utils from ironic_inspector_client import shell @@ -104,7 +104,7 @@ def test_wait_with_check_errors_no_raise_exception(self): nodes = ['uuid1', 'uuid2', 'uuid3'] arglist = ['--wait'] + ['--check-errors'] + nodes - verifylist = [('node', nodes), ('wait', True), ('check_errors', True)] + verifylist = [('node', nodes), ('wait', True), ('check_errors', True)] self.client.wait_for_finish.return_value = { 'uuid1': {'finished': True, 'error': None}, 'uuid2': {'finished': True, 'error': None}, @@ -371,7 +371,23 @@ with mock.patch.object(sys, 'stdout', buf): cmd.take_action(parsed_args) self.assertEqual('{"answer": 42}', buf.getvalue()) - self.client.get_data.assert_called_once_with('uuid1', raw=False) + self.client.get_data.assert_called_once_with('uuid1', raw=False, + processed=True) + + def test_unprocessed(self): + self.client.get_data.return_value = {'answer': 42} + buf = io.StringIO() + + arglist = ['uuid1', '--unprocessed'] + verifylist = [('node', 'uuid1'), ('unprocessed', True)] + + cmd = shell.DataSaveCommand(self.app, None) + parsed_args = self.check_parser(cmd, arglist, verifylist) + with mock.patch.object(sys, 'stdout', buf): + cmd.take_action(parsed_args) + self.assertEqual('{"answer": 42}', buf.getvalue()) + self.client.get_data.assert_called_once_with('uuid1', raw=False, + processed=False) def test_file(self): self.client.get_data.return_value = b'{"answer": 42}' @@ -387,7 +403,8 @@ content = fp.read() self.assertEqual(b'{"answer": 42}', content) - self.client.get_data.assert_called_once_with('uuid1', raw=True) + self.client.get_data.assert_called_once_with('uuid1', raw=True, + processed=True) class TestInterfaceCmds(BaseTest): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_v1.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_v1.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_v1.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/test/test_v1.py 2020-09-11 02:53:33.000000000 +0200 @@ -13,10 +13,10 @@ import collections import unittest +from unittest import mock import uuid from keystoneauth1 import session -import mock import ironic_inspector_client from ironic_inspector_client.common import http @@ -31,7 +31,8 @@ @mock.patch.object(session.Session, 'get', return_value=mock.Mock(headers=FAKE_HEADERS, - status_code=200)) + status_code=200), + autospec=True) class TestInit(unittest.TestCase): my_ip = 'http://127.0.0.1:5050' @@ -41,7 +42,8 @@ def test_ok(self, mock_get): self.get_client() - mock_get.assert_called_once_with(self.my_ip, authenticated=False, + mock_get.assert_called_once_with(mock.ANY, + self.my_ip, authenticated=False, raise_exc=False) def test_explicit_version(self, mock_get): @@ -59,7 +61,8 @@ def test_explicit_url(self, mock_get): self.get_client(inspector_url='http://host:port') - mock_get.assert_called_once_with('http://host:port', + mock_get.assert_called_once_with(mock.ANY, + 'http://host:port', authenticated=False, raise_exc=False) @@ -77,18 +80,18 @@ return ironic_inspector_client.ClientV1(**kwargs) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestIntrospect(BaseTest): def test(self, mock_req): self.get_client().introspect(self.uuid) mock_req.assert_called_once_with( - 'post', '/introspection/%s' % self.uuid, + mock.ANY, 'post', '/introspection/%s' % self.uuid, params={}) def test_deprecated_uuid(self, mock_req): self.get_client().introspect(uuid=self.uuid) mock_req.assert_called_once_with( - 'post', '/introspection/%s' % self.uuid, + mock.ANY, 'post', '/introspection/%s' % self.uuid, params={}) def test_invalid_input(self, mock_req): @@ -97,23 +100,23 @@ def test_manage_boot(self, mock_req): self.get_client().introspect(self.uuid, manage_boot=False) mock_req.assert_called_once_with( - 'post', '/introspection/%s' % self.uuid, + mock.ANY, 'post', '/introspection/%s' % self.uuid, params={'manage_boot': '0'}) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestReprocess(BaseTest): def test(self, mock_req): self.get_client().reprocess(self.uuid) mock_req.assert_called_once_with( - 'post', + mock.ANY, 'post', '/introspection/%s/data/unprocessed' % self.uuid ) def test_deprecated_uuid(self, mock_req): self.get_client().reprocess(uuid=self.uuid) mock_req.assert_called_once_with( - 'post', + mock.ANY, 'post', '/introspection/%s/data/unprocessed' % self.uuid ) @@ -122,7 +125,7 @@ self.assertFalse(mock_req.called) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestGetStatus(BaseTest): def test(self, mock_req): mock_req.return_value.json.return_value = 'json' @@ -130,7 +133,7 @@ self.get_client().get_status(self.uuid) mock_req.assert_called_once_with( - 'get', '/introspection/%s' % self.uuid) + mock.ANY, 'get', '/introspection/%s' % self.uuid) def test_deprecated_uuid(self, mock_req): mock_req.return_value.json.return_value = 'json' @@ -138,13 +141,13 @@ self.get_client().get_status(uuid=self.uuid) mock_req.assert_called_once_with( - 'get', '/introspection/%s' % self.uuid) + mock.ANY, 'get', '/introspection/%s' % self.uuid) def test_invalid_input(self, _): self.assertRaises(TypeError, self.get_client().get_status, 42) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestListStatuses(BaseTest): def test_default(self, mock_req): mock_req.return_value.json.return_value = { @@ -155,7 +158,7 @@ 'limit': None } self.get_client().list_statuses() - mock_req.assert_called_once_with('get', '/introspection', + mock_req.assert_called_once_with(mock.ANY, 'get', '/introspection', params=params) def test_nondefault(self, mock_req): @@ -167,7 +170,7 @@ 'limit': 42 } self.get_client().list_statuses(**params) - mock_req.assert_called_once_with('get', '/introspection', + mock_req.assert_called_once_with(mock.ANY, 'get', '/introspection', params=params) def test_invalid_marker(self, _): @@ -249,7 +252,7 @@ self.get_client().wait_for_finish) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestGetData(BaseTest): def test_json(self, mock_req): mock_req.return_value.json.return_value = 'json' @@ -257,7 +260,16 @@ self.assertEqual('json', self.get_client().get_data(self.uuid)) mock_req.assert_called_once_with( - 'get', '/introspection/%s/data' % self.uuid) + mock.ANY, 'get', '/introspection/%s/data' % self.uuid) + + def test_unprocessed(self, mock_req): + mock_req.return_value.json.return_value = 'json' + + self.assertEqual('json', self.get_client().get_data(self.uuid, + processed=False)) + + mock_req.assert_called_once_with( + mock.ANY, 'get', '/introspection/%s/data/unprocessed' % self.uuid) def test_deprecated_uuid(self, mock_req): mock_req.return_value.json.return_value = 'json' @@ -265,7 +277,7 @@ self.assertEqual('json', self.get_client().get_data(uuid=self.uuid)) mock_req.assert_called_once_with( - 'get', '/introspection/%s/data' % self.uuid) + mock.ANY, 'get', '/introspection/%s/data' % self.uuid) def test_raw(self, mock_req): mock_req.return_value.content = b'json' @@ -274,13 +286,13 @@ raw=True)) mock_req.assert_called_once_with( - 'get', '/introspection/%s/data' % self.uuid) + mock.ANY, 'get', '/introspection/%s/data' % self.uuid) def test_invalid_input(self, _): self.assertRaises(TypeError, self.get_client().get_data, 42) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestRules(BaseTest): def get_rules(self, **kwargs): return self.get_client(**kwargs).rules @@ -289,20 +301,22 @@ self.get_rules().create([{'cond': 'cond'}], [{'act': 'act'}]) mock_req.assert_called_once_with( - 'post', '/rules', json={'conditions': [{'cond': 'cond'}], - 'actions': [{'act': 'act'}], - 'uuid': None, - 'description': None}) + mock.ANY, 'post', '/rules', + json={'conditions': [{'cond': 'cond'}], + 'actions': [{'act': 'act'}], + 'uuid': None, + 'description': None}) def test_create_all_fields(self, mock_req): self.get_rules().create([{'cond': 'cond'}], [{'act': 'act'}], uuid='u', description='d') mock_req.assert_called_once_with( - 'post', '/rules', json={'conditions': [{'cond': 'cond'}], - 'actions': [{'act': 'act'}], - 'uuid': 'u', - 'description': 'd'}) + mock.ANY, 'post', '/rules', + json={'conditions': [{'cond': 'cond'}], + 'actions': [{'act': 'act'}], + 'uuid': 'u', + 'description': 'd'}) def test_create_invalid_input(self, mock_req): self.assertRaises(TypeError, self.get_rules().create, @@ -318,7 +332,7 @@ self.get_rules().from_json({'foo': 'bar'}) mock_req.assert_called_once_with( - 'post', '/rules', json={'foo': 'bar'}) + mock.ANY, 'post', '/rules', json={'foo': 'bar'}) def test_get_all(self, mock_req): mock_req.return_value.json.return_value = {'rules': ['rules']} @@ -326,7 +340,7 @@ res = self.get_rules().get_all() self.assertEqual(['rules'], res) - mock_req.assert_called_once_with('get', '/rules') + mock_req.assert_called_once_with(mock.ANY, 'get', '/rules') def test_get(self, mock_req): mock_req.return_value.json.return_value = {'answer': 42} @@ -334,7 +348,7 @@ res = self.get_rules().get('uuid1') self.assertEqual({'answer': 42}, res) - mock_req.assert_called_once_with('get', '/rules/uuid1') + mock_req.assert_called_once_with(mock.ANY, 'get', '/rules/uuid1') def test_get_invalid_input(self, mock_req): self.assertRaises(TypeError, self.get_rules().get, 42) @@ -343,7 +357,7 @@ def test_delete(self, mock_req): self.get_rules().delete('uuid1') - mock_req.assert_called_once_with('delete', '/rules/uuid1') + mock_req.assert_called_once_with(mock.ANY, 'delete', '/rules/uuid1') def test_delete_invalid_input(self, mock_req): self.assertRaises(TypeError, self.get_rules().delete, 42) @@ -352,21 +366,21 @@ def test_delete_all(self, mock_req): self.get_rules().delete_all() - mock_req.assert_called_once_with('delete', '/rules') + mock_req.assert_called_once_with(mock.ANY, 'delete', '/rules') -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestAbort(BaseTest): def test(self, mock_req): self.get_client().abort(self.uuid) - mock_req.assert_called_once_with('post', + mock_req.assert_called_once_with(mock.ANY, 'post', '/introspection/%s/abort' % self.uuid) def test_invalid_input(self, _): self.assertRaises(TypeError, self.get_client().abort, 42) -@mock.patch.object(http.BaseClient, 'request') +@mock.patch.object(http.BaseClient, 'request', autospec=True) class TestInterfaceApi(BaseTest): def setUp(self): super(TestInterfaceApi, self).setUp() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/v1.py new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/v1.py --- old/python-ironic-inspector-client-4.1.0/ironic_inspector_client/v1.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/ironic_inspector_client/v1.py 2020-09-11 02:53:33.000000000 +0200 @@ -262,7 +262,7 @@ raise WaitTimeoutError(_("Timeout while waiting for introspection " "of nodes %s") % new_active_node_ids) - def get_data(self, node_id=None, raw=False, uuid=None): + def get_data(self, node_id=None, raw=False, uuid=None, processed=True): """Get introspection data from the last introspection of a node. If swift support is disabled, introspection data won't be stored, @@ -271,6 +271,8 @@ :param uuid: node UUID or name, deprecated :param node_id: node node_id or name :param raw: whether to return raw binary data or parsed JSON data + :param processed: whether to return the final processed data or the + raw unprocessed data received from the ramdisk. :returns: bytes or a dict depending on the 'raw' argument :raises: :py:class:`ironic_inspector_client.ClientError` on error reported from a server @@ -281,7 +283,9 @@ """ node_id = self._check_parameters(node_id, uuid) - resp = self.request('get', '/introspection/%s/data' % node_id) + url = ('/introspection/%s/data' if processed + else '/introspection/%s/data/unprocessed') + resp = self.request('get', url % node_id) if raw: return resp.content else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/lower-constraints.txt new/python-ironic-inspector-client-4.3.0/lower-constraints.txt --- old/python-ironic-inspector-client-4.1.0/lower-constraints.txt 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/lower-constraints.txt 2020-09-11 02:53:33.000000000 +0200 @@ -1,4 +1,3 @@ -alabaster==0.7.10 appdirs==1.3.0 asn1crypto==0.23.0 Babel==2.3.4 @@ -14,35 +13,30 @@ doc8==0.6.0 docutils==0.11 dogpile.cache==0.6.2 -dulwich==0.15.0 extras==1.0.0 fasteners==0.7.0 fixtures==3.0.0 flake8==2.5.5 +flake8-import-order==0.17.1 hacking==3.0.0 idna==2.6 -imagesize==0.7.1 iso8601==0.1.11 -Jinja2==2.10 jmespath==0.9.0 jsonpatch==1.16 jsonpointer==1.13 jsonschema==2.6.0 keystoneauth1==3.4.0 linecache2==1.0.0 -MarkupSafe==1.0 mccabe==0.2.1 -mock==2.0.0 monotonic==0.6 msgpack-python==0.4.0 munch==2.1.0 netaddr==0.7.18 netifaces==0.10.4 -openstackdocstheme==1.20.0 openstacksdk==0.11.2 os-client-config==1.28.0 os-service-types==1.2.0 -osc-lib==1.8.0 +osc-lib==2.1.0 oslo.concurrency==3.25.0 oslo.config==5.2.0 oslo.i18n==3.15.3 @@ -52,6 +46,7 @@ pep8==1.5.7 positional==1.2.1 prettytable==0.7.2 +pycodestyle==2.5.0 pycparser==2.18 pyflakes==0.8.1 Pygments==2.2.0 @@ -66,17 +61,14 @@ python-openstackclient==3.12.0 pytz==2013.6 PyYAML==3.12 -reno==2.5.0 requests==2.14.2 requests-mock==1.2.0 requestsexceptions==1.2.0 restructuredtext-lint==1.1.1 rfc3986==0.3.1 simplejson==3.5.1 +six==1.14.0 snowballstemmer==1.2.1 -Sphinx==1.6.2 -sphinxcontrib-svg2pdfconverter==0.1.0 -sphinxcontrib-websupport==1.0.1 stevedore==1.20.0 testtools==2.2.0 traceback2==1.4.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/PKG-INFO new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/PKG-INFO --- old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/PKG-INFO 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/PKG-INFO 2020-09-11 02:54:29.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: python-ironic-inspector-client -Version: 4.1.0 +Version: 4.3.0 Summary: Python client for Ironic Inspector Home-page: https://docs.openstack.org/python-ironic-inspector-client/latest/ Author: OpenStack @@ -47,6 +47,7 @@ Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 Requires-Python: >=3.6 Provides-Extra: cli Provides-Extra: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/SOURCES.txt new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/SOURCES.txt --- old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/SOURCES.txt 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/SOURCES.txt 2020-09-11 02:54:29.000000000 +0200 @@ -55,6 +55,7 @@ releasenotes/notes/introspect-multiple-uuids-0790d57e0a0b9292.yaml releasenotes/notes/introspection-check-errors-587ebb2c00038b5a.yaml releasenotes/notes/introspection-wait-a7e8fe832c3aaff9.yaml +releasenotes/notes/ironic-error-657d352b31ba77ed.yaml releasenotes/notes/ks-session-ac614a9abda3e228.yaml releasenotes/notes/list-introspection-statuses-4ad9e7e56823e754.yaml releasenotes/notes/manage-boot-3d77762952b354a1.yaml @@ -69,6 +70,7 @@ releasenotes/notes/reprocess-stored-introspection-data-c4910325254426c5.yaml releasenotes/notes/rules-import-yaml-815ebc6ca6fe28b9.yaml releasenotes/notes/service-catalog-45466d1cfd330231.yaml +releasenotes/notes/unprocessed-7ebb1c48427bfee4.yaml releasenotes/notes/version-uuid-b7f9e57589314fe9.yaml releasenotes/source/conf.py releasenotes/source/index.rst @@ -82,6 +84,7 @@ releasenotes/source/stein.rst releasenotes/source/train.rst releasenotes/source/unreleased.rst +releasenotes/source/ussuri.rst releasenotes/source/_static/.placeholder releasenotes/source/_templates/.placeholder zuul.d/project.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/pbr.json new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/pbr.json --- old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/pbr.json 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/pbr.json 2020-09-11 02:54:29.000000000 +0200 @@ -1 +1 @@ -{"git_version": "c9b1aff", "is_release": true} \ No newline at end of file +{"git_version": "5176452", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/requires.txt new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/requires.txt --- old/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/requires.txt 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/python_ironic_inspector_client.egg-info/requires.txt 2020-09-11 02:54:29.000000000 +0200 @@ -1,20 +1,20 @@ +PyYAML>=3.12 cliff!=2.9.0,>=2.8.0 keystoneauth1>=3.4.0 pbr!=2.1.0,>=2.0.0 -PyYAML>=3.12 requests>=2.14.2 [cli] python-openstackclient>=3.12.0 [test] +Pygments>=2.2.0 coverage!=4.4,>=4.0 doc8>=0.6.0 fixtures>=3.0.0 -flake8-import-order>=0.13 +flake8-import-order>=0.17.1 hacking<3.1.0,>=3.0.0 -mock>=2.0.0 -requests-mock>=1.2.0 +osc-lib>=2.1.0 oslo.concurrency>=3.25.0 -osc-lib>=1.8.0 python-openstackclient>=3.12.0 +requests-mock>=1.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/releasenotes/notes/ironic-error-657d352b31ba77ed.yaml new/python-ironic-inspector-client-4.3.0/releasenotes/notes/ironic-error-657d352b31ba77ed.yaml --- old/python-ironic-inspector-client-4.1.0/releasenotes/notes/ironic-error-657d352b31ba77ed.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/python-ironic-inspector-client-4.3.0/releasenotes/notes/ironic-error-657d352b31ba77ed.yaml 2020-09-11 02:53:33.000000000 +0200 @@ -0,0 +1,5 @@ +--- +fixes: + - | + Provides a clear error message when trying to access an ironic URL with + ironic-inspector-client. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/releasenotes/notes/unprocessed-7ebb1c48427bfee4.yaml new/python-ironic-inspector-client-4.3.0/releasenotes/notes/unprocessed-7ebb1c48427bfee4.yaml --- old/python-ironic-inspector-client-4.1.0/releasenotes/notes/unprocessed-7ebb1c48427bfee4.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/python-ironic-inspector-client-4.3.0/releasenotes/notes/unprocessed-7ebb1c48427bfee4.yaml 2020-09-11 02:53:33.000000000 +0200 @@ -0,0 +1,6 @@ +--- +features: + - | + Adds support for retrieving unprocessed introspection data via the new + ``processed`` boolean argument to ``get_data``, as well as the new + ``--unprocessed`` CLI flag. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/releasenotes/source/conf.py new/python-ironic-inspector-client-4.3.0/releasenotes/source/conf.py --- old/python-ironic-inspector-client-4.1.0/releasenotes/source/conf.py 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/releasenotes/source/conf.py 2020-09-11 02:53:33.000000000 +0200 @@ -38,15 +38,13 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ + 'openstackdocstheme', 'reno.sphinxext', ] -try: - import openstackdocstheme - extensions.append('openstackdocstheme') -except ImportError: - openstackdocstheme = None - +# openstackdocstheme options +openstackdocs_repo_name = 'openstack/python-ironic-inspector-client' +openstackdocs_use_storyboard = True # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -99,7 +97,7 @@ # show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = 'native' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] @@ -112,10 +110,9 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -if openstackdocstheme is not None: - html_theme = 'openstackdocs' -else: - html_theme = 'default' + +html_theme = 'openstackdocs' + # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/releasenotes/source/index.rst new/python-ironic-inspector-client-4.3.0/releasenotes/source/index.rst --- old/python-ironic-inspector-client-4.1.0/releasenotes/source/index.rst 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/releasenotes/source/index.rst 2020-09-11 02:53:33.000000000 +0200 @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + ussuri train stein rocky diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/releasenotes/source/ussuri.rst new/python-ironic-inspector-client-4.3.0/releasenotes/source/ussuri.rst --- old/python-ironic-inspector-client-4.1.0/releasenotes/source/ussuri.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/python-ironic-inspector-client-4.3.0/releasenotes/source/ussuri.rst 2020-09-11 02:53:33.000000000 +0200 @@ -0,0 +1,6 @@ +=========================== +Ussuri Series Release Notes +=========================== + +.. release-notes:: + :branch: stable/ussuri diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/setup.cfg new/python-ironic-inspector-client-4.3.0/setup.cfg --- old/python-ironic-inspector-client-4.1.0/setup.cfg 2020-04-09 18:18:31.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/setup.cfg 2020-09-11 02:54:29.000000000 +0200 @@ -20,6 +20,7 @@ Programming Language :: Python :: 3 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 [files] packages = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/test-requirements.txt new/python-ironic-inspector-client-4.3.0/test-requirements.txt --- old/python-ironic-inspector-client-4.1.0/test-requirements.txt 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/test-requirements.txt 2020-09-11 02:53:33.000000000 +0200 @@ -4,10 +4,11 @@ coverage!=4.4,>=4.0 # Apache-2.0 doc8>=0.6.0 # Apache-2.0 fixtures>=3.0.0 # Apache-2.0/BSD -flake8-import-order>=0.13 # LGPLv3 +flake8-import-order>=0.17.1 # LGPLv3 hacking>=3.0.0,<3.1.0 # Apache-2.0 -mock>=2.0.0 # BSD requests-mock>=1.2.0 # Apache-2.0 oslo.concurrency>=3.25.0 # Apache-2.0 -osc-lib>=1.8.0 # Apache-2.0 +osc-lib>=2.1.0 # Apache-2.0 python-openstackclient>=3.12.0 # Apache-2.0 +# Required for syntax highlighting check +Pygments>=2.2.0 # BSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/tox.ini new/python-ironic-inspector-client-4.3.0/tox.ini --- old/python-ironic-inspector-client-4.1.0/tox.ini 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/tox.ini 2020-09-11 02:53:33.000000000 +0200 @@ -1,5 +1,5 @@ [tox] -minversion = 3.1.0 +minversion = 3.2.1 envlist = py3,pep8,functional-py3 ignore_basepython_conflict=true @@ -68,6 +68,10 @@ make -C doc/build/pdf [flake8] +# [E741] ambiguous variable name +# [W503] Line break before binary operator. +ignore = E741,W503 +exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build import-order-style = pep8 application-import-names = ironic_inspector_client max-complexity=15 @@ -75,8 +79,11 @@ # [H203] Use assertIs(Not)None to check for None. # [H204] Use assert(Not)Equal to check for equality. # [H205] Use assert(Greater|Less)(Equal) for comparison. +# [H210] Require ‘autospec’, ‘spec’, or ‘spec_set’ in mock.patch/mock.patch.object calls # [H904] Delay string interpolations at logging calls. -enable-extensions=H106,H203,H204,H205,H904 +enable-extensions=H106,H203,H204,H205,H210,H904 +per-file-ignores = + ironic_inspector_client/test/functional.py:E402 [hacking] import_exceptions = ironic_inspector_client.common.i18n diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/zuul.d/project.yaml new/python-ironic-inspector-client-4.3.0/zuul.d/project.yaml --- old/python-ironic-inspector-client-4.1.0/zuul.d/project.yaml 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/zuul.d/project.yaml 2020-09-11 02:53:33.000000000 +0200 @@ -1,6 +1,6 @@ - project: templates: - - openstack-python3-ussuri-jobs + - openstack-python3-victoria-jobs - publish-openstack-docs-pti - check-requirements - release-notes-jobs-python3 @@ -8,10 +8,10 @@ check: jobs: - openstack-tox-functional-py36 - - python-ironic-inspector-client-tempest-python3 + - python-ironic-inspector-client-tempest - openstack-tox-lower-constraints gate: jobs: - openstack-tox-functional-py36 - - python-ironic-inspector-client-tempest-python3 + - python-ironic-inspector-client-tempest - openstack-tox-lower-constraints diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ironic-inspector-client-4.1.0/zuul.d/python-ironic-inspector-client-jobs.yaml new/python-ironic-inspector-client-4.3.0/zuul.d/python-ironic-inspector-client-jobs.yaml --- old/python-ironic-inspector-client-4.1.0/zuul.d/python-ironic-inspector-client-jobs.yaml 2020-04-09 18:16:35.000000000 +0200 +++ new/python-ironic-inspector-client-4.3.0/zuul.d/python-ironic-inspector-client-jobs.yaml 2020-09-11 02:53:33.000000000 +0200 @@ -1,7 +1,7 @@ - job: - name: python-ironic-inspector-client-base - description: Base job for devstack/tempest based python-ironic-inspector-client jobs. - parent: ironic-base + name: python-ironic-inspector-client-tempest + description: Devstack/tempest based python-ironic-inspector-client job. + parent: ironic-inspector-base timeout: 10800 required-projects: - openstack/ironic @@ -25,79 +25,12 @@ tempest_test_regex: ironic_tempest_plugin.tests.scenario.test_introspection_basic tempest_concurrency: 1 devstack_localrc: - FORCE_CONFIG_DRIVE: True - BUILD_TIMEOUT: 600 - IRONIC_BAREMETAL_BASIC_OPS: True - IRONIC_BUILD_DEPLOY_RAMDISK: False - IRONIC_CALLBACK_TIMEOUT: 600 - IRONIC_DEPLOY_DRIVER: ipmi - IRONIC_INSPECTOR_BUILD_RAMDISK: False - IRONIC_RAMDISK_TYPE: tinyipa - IRONIC_TEMPEST_BUILD_TIMEOUT: 600 - IRONIC_TEMPEST_WHOLE_DISK_IMAGE: False - IRONIC_VM_COUNT: 1 - IRONIC_VM_EPHEMERAL_DISK: 0 - IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs' - IRONIC_VM_SPECS_RAM: 384 + IRONIC_DEFAULT_BOOT_OPTION: netboot IRONIC_DEFAULT_DEPLOY_INTERFACE: direct IRONIC_DEFAULT_RESCUE_INTERFACE: "" - - Q_AGENT: openvswitch - Q_ML2_TENANT_NETWORK_TYPE: vxlan - - SWIFT_ENABLE_TEMPURLS: True - SWIFT_TEMPURL_KEY: secretkey - + IRONIC_VM_EPHEMERAL_DISK: 0 devstack_plugins: ironic: https://opendev.org/openstack/ironic ironic-inspector: https://opendev.org/openstack/ironic-inspector zuul_copy_output: '{{ devstack_base_dir }}/ironic-bm-logs': 'logs' - devstack_services: - c-api: False - c-bak: False - c-sch: False - c-vol: False - cinder: False - - s-account: True - s-container: True - s-object: True - s-proxy: True - - dstat: True - g-api: True - g-reg: True - key: True - mysql: True - n-api: True - n-api-meta: True - n-cauth: True - n-cond: True - n-cpu: True - n-novnc: True - n-obj: True - n-sch: True - placement-api: True - q-agt: False - q-dhcp: False - q-l3: False - q-meta: False - q-metering: False - q-svc: False - neutron-api: True - neutron-agent: True - neutron-dhcp: True - neutron-l3: True - neutron-metadata-agent: True - neutron-metering: True - rabbit: True - ir-api: True - ir-cond: True - ironic-inspector: True - ironic-inspector-dhcp: True - -- job: - name: python-ironic-inspector-client-tempest-python3 - description: python-ironic-inspector-client-tempest-python3 - parent: python-ironic-inspector-client-base