Hello community,

here is the log from the commit of package python-ironic-inspector-client for 
openSUSE:Factory checked in at 2020-06-05 20:10:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ironic-inspector-client (Old)
 and      /work/SRC/openSUSE:Factory/.python-ironic-inspector-client.new.3606 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ironic-inspector-client"

Fri Jun  5 20:10:20 2020 rev:13 rq:803564 version:4.1.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-ironic-inspector-client/python-ironic-inspector-client.changes
    2020-03-27 21:57:34.722802569 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-ironic-inspector-client.new.3606/python-ironic-inspector-client.changes
  2020-06-05 20:13:24.646361502 +0200
@@ -1,0 +2,21 @@
+Tue May 12 10:06:17 UTC 2020 - cloud-de...@suse.de
+
+- update to version 4.1.0
+  - Update the constraints url
+  - Cleanup py27 support
+  - Enforce running tox with correct python version based on env
+  - Switch jobs to python3
+  - Fixing base job
+  - Bump hacking to 3.0.0
+  - Make oslo.i18n an optional dependency
+  - Stop using six library
+  - Get rid of the oslo.utils requirement
+  - Add bindep env and fix pdf doc generation
+  - Recover the functional test
+  - Add versions to release notes series
+  - Move osc-lib to test-requirements
+  - Drop python 2.7 support and testing
+  - Update master for stable/train
+  - Switch to Ussuri job
+
+-------------------------------------------------------------------

Old:
----
  python-ironic-inspector-client-3.7.0.tar.gz

New:
----
  python-ironic-inspector-client-4.1.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-ironic-inspector-client.spec ++++++
--- /var/tmp/diff_new_pack.swyebO/_old  2020-06-05 20:13:26.094366830 +0200
+++ /var/tmp/diff_new_pack.swyebO/_new  2020-06-05 20:13:26.094366830 +0200
@@ -17,19 +17,19 @@
 
 
 Name:           python-ironic-inspector-client
-Version:        3.7.0
+Version:        4.1.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-3.7.0.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-ironic-inspector-client/python-ironic-inspector-client-4.1.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-fixtures
 BuildRequires:  python3-mock
 BuildRequires:  python3-openstackclient
 BuildRequires:  python3-openstackdocstheme
-BuildRequires:  python3-osc-lib >= 1.8.0
+BuildRequires:  python3-osc-lib
 BuildRequires:  python3-oslo.concurrency
 BuildRequires:  python3-reno
 BuildRequires:  python3-requests-mock
@@ -51,11 +51,10 @@
 Requires:       python3-PyYAML >= 3.12
 Requires:       python3-keystoneauth1 >= 3.4.0
 Requires:       python3-openstackclient
-Requires:       python3-osc-lib >= 1.8.0
-Requires:       python3-oslo.i18n >= 3.15.3
-Requires:       python3-oslo.utils >= 3.33.0
+Requires:       python3-osc-lib
+Requires:       python3-oslo.i18n
+Requires:       python3-oslo.utils
 Requires:       python3-requests >= 2.14.2
-Requires:       python3-six >= 1.10.0
 
 %description -n python3-ironic-inspector-client
 Ironic Inspector is an auxiliary service for discovering hardware properties
@@ -69,7 +68,7 @@
 This package contains the Python 3.x module.
 
 %prep
-%autosetup -p1 -n python-ironic-inspector-client-3.7.0
+%autosetup -p1 -n python-ironic-inspector-client-4.1.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.swyebO/_old  2020-06-05 20:13:26.126366947 +0200
+++ /var/tmp/diff_new_pack.swyebO/_new  2020-06-05 20:13:26.130366962 +0200
@@ -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/train</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/ussuri</param>
     <param name="output-name">python-ironic-inspector-client.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-ironic-inspector-client/stable/train/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/python-ironic-inspector-client/raw/branch/stable/ussuri/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-3.7.0.tar.gz -> 
python-ironic-inspector-client-4.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironic-inspector-client-3.7.0/AUTHORS 
new/python-ironic-inspector-client-4.1.0/AUTHORS
--- old/python-ironic-inspector-client-3.7.0/AUTHORS    2019-09-07 
20:31:35.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/AUTHORS    2020-04-09 
18:18:31.000000000 +0200
@@ -22,6 +22,8 @@
 Julia Kreger <juliaashleykre...@gmail.com>
 Kaifeng Wang <kaifen...@gmail.com>
 Luong Anh Tuan <tua...@vn.fujitsu.com>
+Madhuri Kumari <madhuri.ra...@gmail.com>
+Mark Goddard <m...@stackhpc.com>
 Monty Taylor <mord...@inaugust.com>
 Nguyen Hai Truong <truon...@vn.fujitsu.com>
 Nguyen Hung Phuong <phuon...@vn.fujitsu.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironic-inspector-client-3.7.0/ChangeLog 
new/python-ironic-inspector-client-4.1.0/ChangeLog
--- old/python-ironic-inspector-client-3.7.0/ChangeLog  2019-09-07 
20:31:35.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/ChangeLog  2020-04-09 
18:18:31.000000000 +0200
@@ -1,6 +1,30 @@
 CHANGES
 =======
 
+4.1.0
+-----
+
+* Move osc-lib to test-requirements
+* Get rid of the oslo.utils requirement
+* Make oslo.i18n an optional dependency
+* Cleanup py27 support
+* Bump hacking to 3.0.0
+
+4.0.0
+-----
+
+* Add bindep env and fix pdf doc generation
+* Enforce running tox with correct python version based on env
+* Stop using six library
+* Drop python 2.7 support and testing
+* Fixing base job
+* Switch jobs to python3
+* Switch to Ussuri job
+* Recover the functional test
+* Add versions to release notes series
+* Update the constraints url
+* Update master for stable/train
+
 3.7.0
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironic-inspector-client-3.7.0/PKG-INFO 
new/python-ironic-inspector-client-4.1.0/PKG-INFO
--- old/python-ironic-inspector-client-3.7.0/PKG-INFO   2019-09-07 
20:31:35.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/PKG-INFO   2020-04-09 
18:18:31.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: python-ironic-inspector-client
-Version: 3.7.0
+Version: 4.1.0
 Summary: Python client for Ironic Inspector
 Home-page: https://docs.openstack.org/python-ironic-inspector-client/latest/
 Author: OpenStack
@@ -42,10 +42,11 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
-Provides-Extra: test
+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-3.7.0/bindep.txt 
new/python-ironic-inspector-client-4.1.0/bindep.txt
--- old/python-ironic-inspector-client-3.7.0/bindep.txt 1970-01-01 
01:00:00.000000000 +0100
+++ new/python-ironic-inspector-client-4.1.0/bindep.txt 2020-04-09 
18:16:35.000000000 +0200
@@ -0,0 +1,3 @@
+# libsrvg2 is needed for sphinxcontrib-svg2pdfconverter in docs builds.
+librsvg2-tools [doc platform:rpm]
+librsvg2-bin [doc platform:dpkg]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/doc/requirements.txt 
new/python-ironic-inspector-client-4.1.0/doc/requirements.txt
--- old/python-ironic-inspector-client-3.7.0/doc/requirements.txt       
2019-09-07 20:30:57.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/doc/requirements.txt       
2020-04-09 18:16:35.000000000 +0200
@@ -1,5 +1,4 @@
-sphinx!=1.6.6,!=1.6.7,>=1.6.2,<2.0.0;python_version=='2.7' # BSD
-sphinx!=1.6.6,!=1.6.7,!=2.1.0,>=1.6.2;python_version>='3.4' # BSD
+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
 sphinxcontrib-apidoc>=0.2.0  # BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/functest-requirements.txt 
new/python-ironic-inspector-client-4.1.0/functest-requirements.txt
--- old/python-ironic-inspector-client-3.7.0/functest-requirements.txt  
2019-09-07 20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/functest-requirements.txt  
2020-04-09 18:16:35.000000000 +0200
@@ -1,3 +1,4 @@
 # NOTE(jroll) these are pinned to the same SHA, update when needed.
-git+https://opendev.org/openstack/ironic-inspector@be3f7eec18ad13dd6d5a94fe2963b45456fad19e#egg=ironic-inspector
--r 
https://opendev.org/openstack/ironic-inspector/raw/commit/be3f7eec18ad13dd6d5a94fe2963b45456fad19e/test-requirements.txt
\ No newline at end of file
+# 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/common/http.py 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/common/http.py
--- 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/common/http.py 
    2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/common/http.py 
    2020-04-09 18:16:35.000000000 +0200
@@ -19,7 +19,6 @@
 from keystoneauth1 import exceptions as ks_exc
 from keystoneauth1 import session as ks_session
 import requests
-import six
 
 from ironic_inspector_client.common.i18n import _
 
@@ -162,7 +161,7 @@
     def _check_api_version(self, api_version):
         if isinstance(api_version, int):
             api_version = (api_version, 0)
-        if isinstance(api_version, six.string_types):
+        if isinstance(api_version, str):
             api_version = _parse_version(api_version)
         api_version = tuple(api_version)
         if not all(isinstance(x, int) for x in api_version):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/common/i18n.py 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/common/i18n.py
--- 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/common/i18n.py 
    2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/common/i18n.py 
    2020-04-09 18:16:35.000000000 +0200
@@ -13,10 +13,14 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-import oslo_i18n
+try:
+    import oslo_i18n
+except ImportError:
+    def _(msg):
+        return msg
+else:
+    _translators = oslo_i18n.TranslatorFactory(
+        domain='python-ironic-inspector-client')
 
-_translators = oslo_i18n.TranslatorFactory(
-    domain='python-ironic-inspector-client')
-
-# The primary translation function using the well-known name "_"
-_ = _translators.primary
+    # The primary translation function using the well-known name "_"
+    _ = _translators.primary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/shell.py 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/shell.py
--- old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/shell.py   
2019-09-07 20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/shell.py   
2020-04-09 18:16:35.000000000 +0200
@@ -16,15 +16,16 @@
 from __future__ import print_function
 
 import json
+import os
 import sys
 
-from osc_lib.command import command
-from osc_lib import exceptions
-from osc_lib.i18n import _
-from osc_lib import utils
+from cliff import command
+from cliff import lister
+from cliff import show
 import yaml
 
 import ironic_inspector_client
+from ironic_inspector_client.common.i18n import _
 from ironic_inspector_client import resource as res
 
 
@@ -57,18 +58,18 @@
 def build_option_parser(parser):
     # TODO(dtantsur): deprecate these options in favor of more generic OS_*
     parser.add_argument('--inspector-api-version',
-                        default=utils.env('INSPECTOR_VERSION',
-                                          default=DEFAULT_API_VERSION),
+                        default=(os.environ.get('INSPECTOR_VERSION')
+                                 or DEFAULT_API_VERSION),
                         help='inspector API version, only 1 is supported now '
                         '(env: INSPECTOR_VERSION).')
     parser.add_argument('--inspector-url',
-                        default=utils.env('INSPECTOR_URL', default=None),
+                        default=os.environ.get('INSPECTOR_URL'),
                         help='inspector URL, defaults to localhost '
                         '(env: INSPECTOR_URL).')
     return parser
 
 
-class StartCommand(command.Lister):
+class StartCommand(lister.Lister):
     """Start the introspection."""
 
     COLUMNS = ('UUID', 'Error')
@@ -91,7 +92,7 @@
 
     def take_action(self, parsed_args):
         if parsed_args.check_errors and not parsed_args.wait:
-            raise exceptions.CommandError(
+            raise RuntimeError(
                 _("--check-errors can only be used with --wait"))
 
         client = self.app.client_manager.baremetal_introspection
@@ -130,7 +131,7 @@
         client.reprocess(parsed_args.node)
 
 
-class StatusCommand(command.ShowOne):
+class StatusCommand(show.ShowOne):
     """Get introspection status."""
     hidden_status_items = {'links'}
 
@@ -157,10 +158,12 @@
         return zip(*sorted(self.status_attributes(status)))
 
 
-class StatusListCommand(command.Lister):
+class StatusListCommand(lister.Lister):
     """List introspection statuses"""
 
     COLUMNS = ('UUID', 'Started at', 'Finished at', 'Error')
+    MAPPING = dict(zip(COLUMNS,
+                       ['uuid', 'started_at', 'finished_at', 'error']))
 
     @classmethod
     def status_row(cls, client_item):
@@ -173,7 +176,7 @@
         :return: a list of client_item attributes as the row
         """
         status = dict(StatusCommand.status_attributes(client_item))
-        return utils.get_dict_properties(status, cls.COLUMNS)
+        return tuple(status.get(cls.MAPPING[item]) for item in cls.COLUMNS)
 
     def get_parser(self, prog_name):
         parser = super(StatusListCommand, self).get_parser(prog_name)
@@ -204,7 +207,7 @@
         client.abort(parsed_args.node)
 
 
-class RuleImportCommand(command.Lister):
+class RuleImportCommand(lister.Lister):
     """Import one or several introspection rules from a JSON/YAML file."""
 
     COLUMNS = ("UUID", "Description")
@@ -229,7 +232,7 @@
         return self.COLUMNS, result
 
 
-class RuleListCommand(command.Lister):
+class RuleListCommand(lister.Lister):
     """List all introspection rules."""
 
     COLUMNS = ("UUID", "Description")
@@ -242,7 +245,7 @@
         return self.COLUMNS, rules
 
 
-class RuleShowCommand(command.ShowOne):
+class RuleShowCommand(show.ShowOne):
     """Show an introspection rule."""
 
     def get_parser(self, prog_name):
@@ -300,7 +303,7 @@
             json.dump(data, sys.stdout)
 
 
-class InterfaceListCommand(command.Lister):
+class InterfaceListCommand(lister.Lister):
     """List interface data including attached switch port information."""
 
     def get_parser(self, prog_name):
@@ -340,7 +343,7 @@
         return interface_res.labels, rows
 
 
-class InterfaceShowCommand(command.ShowOne):
+class InterfaceShowCommand(show.ShowOne):
     """Show interface data including attached switch port information."""
 
     COLUMNS = ("Field", "Value")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/functional.py
 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/functional.py
--- 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/functional.py
 2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/functional.py
 2020-04-09 18:16:35.000000000 +0200
@@ -11,7 +11,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import copy
 import json
 import os
 import sys
@@ -20,14 +19,13 @@
 
 import eventlet
 eventlet.monkey_patch()  # noqa
-from ironic_inspector.common import swift
 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 six
 
 import ironic_inspector_client as client
 from ironic_inspector_client import shell
@@ -40,7 +38,6 @@
                                          token='token')
         self.session = ks_session.Session(self.auth)
         self.client = client.ClientV1(session=self.session)
-        functional.cfg.CONF.set_override('store_data', 'none', 'processing')
 
     def my_status_index(self, statuses):
         my_status = self._fake_status()
@@ -49,8 +46,8 @@
     def test_introspect_get_status(self):
         self.client.introspect(self.uuid)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
-        self.cli.node.set_power_state.assert_called_once_with(self.uuid,
-                                                              'reboot')
+        self.cli.set_node_power_state.assert_called_once_with(self.uuid,
+                                                              'rebooting')
 
         status = self.client.get_status(self.uuid)
         self.check_status(status, finished=False, state=istate.States.waiting)
@@ -59,10 +56,10 @@
         self.assertEqual({'uuid': self.uuid}, res)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
 
-        self.assertCalledWithPatch(self.patch, self.cli.node.update)
-        self.cli.port.create.assert_called_once_with(
+        self.assertCalledWithPatch(self.patch, self.cli.patch_node)
+        self.cli.create_port.assert_called_once_with(
             node_uuid=self.uuid, address='11:22:33:44:55:66',
-            pxe_enabled=True, extra={})
+            is_pxe_enabled=True, extra={})
 
         status = self.client.get_status(self.uuid)
         self.check_status(status, finished=True, state=istate.States.finished)
@@ -70,8 +67,8 @@
     def test_introspect_list_statuses(self):
         self.client.introspect(self.uuid)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
-        self.cli.node.set_power_state.assert_called_once_with(self.uuid,
-                                                              'reboot')
+        self.cli.set_node_power_state.assert_called_once_with(self.uuid,
+                                                              'rebooting')
 
         statuses = self.client.list_statuses()
         my_status = statuses[self.my_status_index(statuses)]
@@ -82,10 +79,10 @@
         self.assertEqual({'uuid': self.uuid}, res)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
 
-        self.assertCalledWithPatch(self.patch, self.cli.node.update)
-        self.cli.port.create.assert_called_once_with(
+        self.assertCalledWithPatch(self.patch, self.cli.patch_node)
+        self.cli.create_port.assert_called_once_with(
             node_uuid=self.uuid, address='11:22:33:44:55:66',
-            pxe_enabled=True, extra={})
+            is_pxe_enabled=True, extra={})
 
         statuses = self.client.list_statuses()
         my_status = statuses[self.my_status_index(statuses)]
@@ -117,15 +114,10 @@
         status = self.client.get_status(self.uuid)
         self.check_status(status, finished=True, state=istate.States.finished)
 
-    @mock.patch.object(swift, 'store_introspection_data', autospec=True)
-    @mock.patch.object(swift, 'get_introspection_data', autospec=True)
-    def test_reprocess_stored_introspection_data(self, get_mock,
-                                                 store_mock):
-        functional.cfg.CONF.set_override('store_data', 'swift', 'processing')
+    def test_reprocess_stored_introspection_data(self):
         port_create_call = mock.call(node_uuid=self.uuid,
                                      address='11:22:33:44:55:66',
-                                     pxe_enabled=True, extra={})
-        get_mock.return_value = json.dumps(self.data)
+                                     is_pxe_enabled=True, extra={})
 
         # assert reprocessing doesn't work before introspection
         self.assertRaises(client.ClientError, self.client.reprocess,
@@ -133,8 +125,8 @@
 
         self.client.introspect(self.uuid)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
-        self.cli.node.set_power_state.assert_called_once_with(self.uuid,
-                                                              'reboot')
+        self.cli.set_node_power_state.assert_called_once_with(self.uuid,
+                                                              'rebooting')
         status = self.client.get_status(self.uuid)
         self.check_status(status, finished=False, state=istate.States.waiting)
 
@@ -144,10 +136,8 @@
 
         status = self.client.get_status(self.uuid)
         self.check_status(status, finished=True, state=istate.States.finished)
-        self.cli.port.create.assert_has_calls([port_create_call],
+        self.cli.create_port.assert_has_calls([port_create_call],
                                               any_order=True)
-        self.assertFalse(get_mock.called)
-        self.assertTrue(store_mock.called)
 
         res = self.client.reprocess(self.uuid)
         self.assertEqual(202, res.status_code)
@@ -155,12 +145,9 @@
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
         self.check_status(status, finished=True, state=istate.States.finished)
 
-        self.cli.port.create.assert_has_calls([port_create_call,
+        self.cli.create_port.assert_has_calls([port_create_call,
                                                port_create_call],
                                               any_order=True)
-        self.assertTrue(get_mock.called)
-        # incoming, processing, reapplying data
-        self.assertEqual(3, store_mock.call_count)
 
     def test_abort_introspection(self):
         # assert abort doesn't work before introspect request
@@ -169,8 +156,8 @@
 
         self.client.introspect(self.uuid)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
-        self.cli.node.set_power_state.assert_called_once_with(self.uuid,
-                                                              'reboot')
+        self.cli.set_node_power_state.assert_called_once_with(self.uuid,
+                                                              'rebooting')
 
         status = self.client.get_status(self.uuid)
         self.check_status(status, finished=False, state=istate.States.waiting)
@@ -264,8 +251,7 @@
 
 
 BASE_CMD = [os.path.join(sys.prefix, 'bin', 'openstack'),
-            '--os-auth-type', 'token_endpoint', '--os-token', 'fake',
-            '--os-url', 'http://127.0.0.1:5050']
+            '--os-auth-type', 'none', '--os-endpoint', 'http://127.0.0.1:5050']
 
 
 class BaseCLITest(functional.Base):
@@ -296,8 +282,6 @@
 
 class TestCLI(BaseCLITest):
     def setup_lldp(self):
-        functional.cfg.CONF.set_override('store_data', 'swift', 'processing')
-
         self.all_interfaces = {
             'eth1': {'mac': self.macs[0], 'ip': self.ips[0],
                      'client_id': None, 'lldp_processed':
@@ -332,10 +316,7 @@
         return fake_status
 
     def test_cli_negative(self):
-        if six.PY3:
-            msg_missing_param = 'the following arguments are required'
-        else:
-            msg_missing_param = 'too few arguments'
+        msg_missing_param = 'the following arguments are required'
         err = self.run_cli('start', expect_error=True)
         self.assertIn(msg_missing_param, err)
         err = self.run_cli('status', expect_error=True)
@@ -351,8 +332,8 @@
     def test_introspect_get_status(self):
         self.run_cli('start', self.uuid)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
-        self.cli.node.set_power_state.assert_called_once_with(self.uuid,
-                                                              'reboot')
+        self.cli.set_node_power_state.assert_called_once_with(self.uuid,
+                                                              'rebooting')
 
         status = self.run_cli('status', self.uuid, parse_json=True)
         self.check_status(status, finished=False, state=istate.States.waiting)
@@ -361,10 +342,10 @@
         self.assertEqual({'uuid': self.uuid}, res)
         eventlet.greenthread.sleep(functional.DEFAULT_SLEEP)
 
-        self.assertCalledWithPatch(self.patch, self.cli.node.update)
-        self.cli.port.create.assert_called_once_with(
+        self.assertCalledWithPatch(self.patch, self.cli.patch_node)
+        self.cli.create_port.assert_called_once_with(
             node_uuid=self.uuid, address='11:22:33:44:55:66',
-            pxe_enabled=True, extra={})
+            is_pxe_enabled=True, extra={})
 
         status = self.run_cli('status', self.uuid, parse_json=True)
         self.check_status(status, finished=True, state=istate.States.finished)
@@ -407,10 +388,10 @@
         res = self.run_cli('rule', 'list', parse_json=True)
         self.assertEqual([], res)
 
-    @mock.patch.object(swift, 'get_introspection_data', autospec=True)
+    @mock.patch.object(process, 'get_introspection_data', autospec=True)
     def test_interface_list(self, get_mock):
         self.setup_lldp()
-        get_mock.return_value = json.dumps(copy.deepcopy(self.data))
+        get_mock.return_value = json.dumps(self.data)
 
         expected_eth1 = {u'Interface': u'eth1',
                          u'MAC Address': u'11:22:33:44:55:66',
@@ -440,10 +421,10 @@
         self.assertIn({u'Switch Port MTU': 1514}, res)
         self.assertIn({u'Switch Port MTU': 9216}, res)
 
-    @mock.patch.object(swift, 'get_introspection_data', autospec=True)
+    @mock.patch.object(process, 'get_introspection_data', autospec=True)
     def test_interface_show(self, get_mock):
         self.setup_lldp()
-        get_mock.return_value = json.dumps(copy.deepcopy(self.data))
+        get_mock.return_value = json.dumps(self.data)
 
         res = self.run_cli('interface', 'show', self.uuid, "eth1",
                            parse_json=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/test_common_http.py
 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_common_http.py
--- 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/test_common_http.py
   2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_common_http.py
   2020-04-09 18:16:35.000000000 +0200
@@ -183,12 +183,12 @@
         self.req.return_value.content = json.dumps(
             {'error': {'message': 'boom'}}).encode('utf-8')
 
-        self.assertRaisesRegexp(http.ClientError, 'boom',
-                                self.get_client().request, 'get', 'url')
+        self.assertRaisesRegex(http.ClientError, 'boom',
+                               self.get_client().request, 'get', 'url')
 
     def test_error_discoverd_style(self):
         self.req.return_value.status_code = 400
         self.req.return_value.content = b'boom'
 
-        self.assertRaisesRegexp(http.ClientError, 'boom',
-                                self.get_client().request, 'get', 'url')
+        self.assertRaisesRegex(http.ClientError, 'boom',
+                               self.get_client().request, 'get', 'url')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/test_shell.py
 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_shell.py
--- 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/test_shell.py
 2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_shell.py
 2020-04-09 18:16:35.000000000 +0200
@@ -12,13 +12,12 @@
 # limitations under the License.
 
 import collections
+import io
 import sys
 import tempfile
 
 import mock
-from osc_lib import exceptions
 from osc_lib.tests import utils
-import six
 
 from ironic_inspector_client import shell
 from ironic_inspector_client import v1
@@ -149,7 +148,7 @@
         cmd = shell.StartCommand(self.app, None)
         parsed_args = self.check_parser(cmd, arglist, verifylist)
         msg = "--check-errors can only be used with --wait"
-        self.assertRaisesRegex(exceptions.CommandError, msg, cmd.take_action,
+        self.assertRaisesRegex(RuntimeError, msg, cmd.take_action,
                                parsed_args)
 
     def test_abort(self):
@@ -362,7 +361,7 @@
 class TestDataSave(BaseTest):
     def test_stdout(self):
         self.client.get_data.return_value = {'answer': 42}
-        buf = six.StringIO()
+        buf = io.StringIO()
 
         arglist = ['uuid1']
         verifylist = [('node', 'uuid1')]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/test_v1.py
 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_v1.py
--- 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/test/test_v1.py
    2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/test/test_v1.py
    2020-04-09 18:16:35.000000000 +0200
@@ -13,12 +13,10 @@
 
 import collections
 import unittest
+import uuid
 
 from keystoneauth1 import session
 import mock
-from oslo_utils import netutils
-from oslo_utils import uuidutils
-import six
 
 import ironic_inspector_client
 from ironic_inspector_client.common import http
@@ -35,7 +33,7 @@
                    return_value=mock.Mock(headers=FAKE_HEADERS,
                                           status_code=200))
 class TestInit(unittest.TestCase):
-    my_ip = 'http://' + netutils.get_my_ipv4() + ':5050'
+    my_ip = 'http://127.0.0.1:5050'
 
     def get_client(self, **kwargs):
         kwargs.setdefault('inspector_url', self.my_ip)
@@ -69,8 +67,8 @@
 class BaseTest(unittest.TestCase):
     def setUp(self):
         super(BaseTest, self).setUp()
-        self.uuid = uuidutils.generate_uuid()
-        self.my_ip = 'http://' + netutils.get_my_ipv4() + ':5050'
+        self.uuid = str(uuid.uuid4())
+        self.my_ip = 'http://127.0.0.1:5050'
 
     @mock.patch.object(http.BaseClient, 'server_api_versions',
                        lambda self: ((1, 0), (1, 99)))
@@ -173,12 +171,12 @@
                                          params=params)
 
     def test_invalid_marker(self, _):
-        six.assertRaisesRegex(self, TypeError, 'Expected a string value.*',
-                              self.get_client().list_statuses, marker=42)
+        self.assertRaisesRegex(TypeError, 'Expected a string value.*',
+                               self.get_client().list_statuses, marker=42)
 
     def test_invalid_limit(self, _):
-        six.assertRaisesRegex(self, TypeError, 'Expected an integer.*',
-                              self.get_client().list_statuses, limit='42')
+        self.assertRaisesRegex(TypeError, 'Expected an integer.*',
+                               self.get_client().list_statuses, limit='42')
 
 
 @mock.patch.object(ironic_inspector_client.ClientV1, 'get_status',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/v1.py 
new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/v1.py
--- old/python-ironic-inspector-client-3.7.0/ironic_inspector_client/v1.py      
2019-09-07 20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/ironic_inspector_client/v1.py      
2020-04-09 18:16:35.000000000 +0200
@@ -18,8 +18,6 @@
 import time
 import warnings
 
-import six
-
 from ironic_inspector_client.common import http
 from ironic_inspector_client.common.i18n import _
 
@@ -97,7 +95,7 @@
         """
 
         node_id = node_id or uuid
-        if not isinstance(node_id, six.string_types):
+        if not isinstance(node_id, str):
             raise TypeError(
                 _("Expected string for node_id argument, got %r") % node_id)
         if uuid:
@@ -172,7 +170,7 @@
             * `started_at` an ISO8601 timestamp,
             * `uuid` the node UUID
         """
-        if not (marker is None or isinstance(marker, six.string_types)):
+        if not (marker is None or isinstance(marker, str)):
             raise TypeError(_('Expected a string value of the marker, got '
                               '%s instead') % marker)
         if not (limit is None or isinstance(limit, int)):
@@ -410,7 +408,7 @@
         :raises: :py:class:`ironic_inspector_client.VersionNotSupported` if
             requested api_version is not supported
         """
-        if uuid is not None and not isinstance(uuid, six.string_types):
+        if uuid is not None and not isinstance(uuid, str):
             raise TypeError(
                 _("Expected string for uuid argument, got %r") % uuid)
         for name, arg in [('conditions', conditions), ('actions', actions)]:
@@ -459,7 +457,7 @@
         :raises: :py:class:`ironic_inspector_client.VersionNotSupported` if
             requested api_version is not supported
         """
-        if not isinstance(uuid, six.string_types):
+        if not isinstance(uuid, str):
             raise TypeError(
                 _("Expected string for uuid argument, got %r") % uuid)
         return self._request('get', '/rules/%s' % uuid).json()
@@ -473,7 +471,7 @@
         :raises: :py:class:`ironic_inspector_client.VersionNotSupported` if
             requested api_version is not supported
         """
-        if not isinstance(uuid, six.string_types):
+        if not isinstance(uuid, str):
             raise TypeError(
                 _("Expected string for uuid argument, got %r") % uuid)
         self._request('delete', '/rules/%s' % uuid)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/lower-constraints.txt 
new/python-ironic-inspector-client-4.1.0/lower-constraints.txt
--- old/python-ironic-inspector-client-3.7.0/lower-constraints.txt      
2019-09-07 20:30:57.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/lower-constraints.txt      
2020-04-09 18:16:35.000000000 +0200
@@ -19,7 +19,7 @@
 fasteners==0.7.0
 fixtures==3.0.0
 flake8==2.5.5
-hacking==1.0.0
+hacking==3.0.0
 idna==2.6
 imagesize==0.7.1
 iso8601==0.1.11
@@ -73,7 +73,6 @@
 restructuredtext-lint==1.1.1
 rfc3986==0.3.1
 simplejson==3.5.1
-six==1.10.0
 snowballstemmer==1.2.1
 Sphinx==1.6.2
 sphinxcontrib-svg2pdfconverter==0.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/PKG-INFO
 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/PKG-INFO
--- 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/PKG-INFO
   2019-09-07 20:31:35.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/PKG-INFO
   2020-04-09 18:18:31.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: python-ironic-inspector-client
-Version: 3.7.0
+Version: 4.1.0
 Summary: Python client for Ironic Inspector
 Home-page: https://docs.openstack.org/python-ironic-inspector-client/latest/
 Author: OpenStack
@@ -42,10 +42,11 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
-Provides-Extra: test
+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-3.7.0/python_ironic_inspector_client.egg-info/SOURCES.txt
 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/SOURCES.txt
--- 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/SOURCES.txt
        2019-09-07 20:31:35.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/SOURCES.txt
        2020-04-09 18:18:31.000000000 +0200
@@ -2,6 +2,7 @@
 ChangeLog
 LICENSE
 README.rst
+bindep.txt
 functest-requirements.txt
 lower-constraints.txt
 requirements.txt
@@ -48,6 +49,7 @@
 releasenotes/notes/deprecate-setting-ipmi-creds-1581ddc63b273811.yaml
 releasenotes/notes/deprecated-uuid-d0c8e8980106e7f9.yaml
 releasenotes/notes/drop-osc-client-requirements-efb31b432ddbb370.yaml
+releasenotes/notes/drop-py-2-7-c2707af650df18c8.yaml
 releasenotes/notes/drop-setting-ipmi-creds-feature-4965aaba75a40326.yaml
 releasenotes/notes/interface-list-show-39cedaca3cd9db9b.yaml
 releasenotes/notes/introspect-multiple-uuids-0790d57e0a0b9292.yaml
@@ -60,6 +62,7 @@
 releasenotes/notes/no-default-uri-861f675ccb75e05d.yaml
 releasenotes/notes/old-functions-80ddae9eaa1e7e1d.yaml
 releasenotes/notes/osc-lib-162db03fed2bc40c.yaml
+releasenotes/notes/oslo-i18n-optional-194293e37274a901.yaml
 releasenotes/notes/print-import-rule-result-b5c19e9b8679849e.yaml
 releasenotes/notes/remove-client-64778b2011c26f6b.yaml
 releasenotes/notes/rename-func-427aa11c60c2838b.yaml
@@ -77,6 +80,7 @@
 releasenotes/source/queens.rst
 releasenotes/source/rocky.rst
 releasenotes/source/stein.rst
+releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/pbr.json
 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/pbr.json
--- 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/pbr.json
   2019-09-07 20:31:35.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/pbr.json
   2020-04-09 18:18:31.000000000 +0200
@@ -1 +1 @@
-{"git_version": "d95a4cd", "is_release": true}
\ No newline at end of file
+{"git_version": "c9b1aff", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/requires.txt
 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/requires.txt
--- 
old/python-ironic-inspector-client-3.7.0/python_ironic_inspector_client.egg-info/requires.txt
       2019-09-07 20:31:35.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/python_ironic_inspector_client.egg-info/requires.txt
       2020-04-09 18:18:31.000000000 +0200
@@ -1,11 +1,8 @@
+cliff!=2.9.0,>=2.8.0
 keystoneauth1>=3.4.0
-osc-lib>=1.8.0
-oslo.i18n>=3.15.3
-oslo.utils>=3.33.0
 pbr!=2.1.0,>=2.0.0
 PyYAML>=3.12
 requests>=2.14.2
-six>=1.10.0
 
 [cli]
 python-openstackclient>=3.12.0
@@ -15,8 +12,9 @@
 doc8>=0.6.0
 fixtures>=3.0.0
 flake8-import-order>=0.13
-hacking<1.1.0,>=1.0.0
+hacking<3.1.0,>=3.0.0
 mock>=2.0.0
 requests-mock>=1.2.0
 oslo.concurrency>=3.25.0
+osc-lib>=1.8.0
 python-openstackclient>=3.12.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/releasenotes/notes/drop-py-2-7-c2707af650df18c8.yaml
 
new/python-ironic-inspector-client-4.1.0/releasenotes/notes/drop-py-2-7-c2707af650df18c8.yaml
--- 
old/python-ironic-inspector-client-3.7.0/releasenotes/notes/drop-py-2-7-c2707af650df18c8.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-ironic-inspector-client-4.1.0/releasenotes/notes/drop-py-2-7-c2707af650df18c8.yaml
       2020-04-09 18:16:35.000000000 +0200
@@ -0,0 +1,7 @@
+---
+upgrade:
+  - |
+    Python 2.7 support has been dropped. Last release of
+    python-ironic-inspector-client to support Python 2.7 is OpenStack Train.
+    The minimum version of Python now supported by
+    python-ironic-inspector-client is Python 3.6.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/releasenotes/notes/oslo-i18n-optional-194293e37274a901.yaml
 
new/python-ironic-inspector-client-4.1.0/releasenotes/notes/oslo-i18n-optional-194293e37274a901.yaml
--- 
old/python-ironic-inspector-client-3.7.0/releasenotes/notes/oslo-i18n-optional-194293e37274a901.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-ironic-inspector-client-4.1.0/releasenotes/notes/oslo-i18n-optional-194293e37274a901.yaml
        2020-04-09 18:16:35.000000000 +0200
@@ -0,0 +1,6 @@
+---
+upgrade:
+  - |
+    The dependency on ``oslo.i18n`` is now optional. If you would like messages
+    from ironic-inspector-client to be translated, you need to install it
+    explicitly.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/releasenotes/source/index.rst 
new/python-ironic-inspector-client-4.1.0/releasenotes/source/index.rst
--- old/python-ironic-inspector-client-3.7.0/releasenotes/source/index.rst      
2019-09-07 20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/releasenotes/source/index.rst      
2020-04-09 18:16:35.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   train
    stein
    rocky
    queens
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/releasenotes/source/train.rst 
new/python-ironic-inspector-client-4.1.0/releasenotes/source/train.rst
--- old/python-ironic-inspector-client-3.7.0/releasenotes/source/train.rst      
1970-01-01 01:00:00.000000000 +0100
+++ new/python-ironic-inspector-client-4.1.0/releasenotes/source/train.rst      
2020-04-09 18:16:35.000000000 +0200
@@ -0,0 +1,6 @@
+===========================================
+ Train Series (3.6.0 - 3.6.x) Release Notes
+===========================================
+
+.. release-notes::
+   :branch: stable/train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/requirements.txt 
new/python-ironic-inspector-client-4.1.0/requirements.txt
--- old/python-ironic-inspector-client-3.7.0/requirements.txt   2019-09-07 
20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/requirements.txt   2020-04-09 
18:16:35.000000000 +0200
@@ -1,11 +1,8 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
+cliff!=2.9.0,>=2.8.0 # Apache-2.0
 keystoneauth1>=3.4.0 # Apache-2.0
-osc-lib>=1.8.0 # Apache-2.0
-oslo.i18n>=3.15.3 # Apache-2.0
-oslo.utils>=3.33.0 # Apache-2.0
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
 PyYAML>=3.12 # MIT
 requests>=2.14.2 # Apache-2.0
-six>=1.10.0 # MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironic-inspector-client-3.7.0/setup.cfg 
new/python-ironic-inspector-client-4.1.0/setup.cfg
--- old/python-ironic-inspector-client-3.7.0/setup.cfg  2019-09-07 
20:31:35.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/setup.cfg  2020-04-09 
18:18:31.000000000 +0200
@@ -6,6 +6,7 @@
 author-email = openstack-disc...@lists.openstack.org
 home-page = https://docs.openstack.org/python-ironic-inspector-client/latest/
 license = Apache-2
+python-requires = >=3.6
 classifier = 
        Environment :: Console
        Environment :: OpenStack
@@ -14,8 +15,8 @@
        License :: OSI Approved :: Apache Software License
        Operating System :: OS Independent
        Programming Language :: Python
-       Programming Language :: Python :: 2
-       Programming Language :: Python :: 2.7
+       Programming Language :: Python :: Implementation :: CPython
+       Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironic-inspector-client-3.7.0/setup.py 
new/python-ironic-inspector-client-4.1.0/setup.py
--- old/python-ironic-inspector-client-3.7.0/setup.py   2019-09-07 
20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/setup.py   2020-04-09 
18:16:35.000000000 +0200
@@ -13,17 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
 import setuptools
 
-# In python < 2.7.4, a lazy loading of package `pbr` will break
-# setuptools if some other modules registered functions in `atexit`.
-# solution from: http://bugs.python.org/issue15881#msg170215
-try:
-    import multiprocessing  # noqa
-except ImportError:
-    pass
-
 setuptools.setup(
     setup_requires=['pbr>=2.0.0'],
     pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/test-requirements.txt 
new/python-ironic-inspector-client-4.1.0/test-requirements.txt
--- old/python-ironic-inspector-client-3.7.0/test-requirements.txt      
2019-09-07 20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/test-requirements.txt      
2020-04-09 18:16:35.000000000 +0200
@@ -5,8 +5,9 @@
 doc8>=0.6.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
 flake8-import-order>=0.13 # LGPLv3
-hacking>=1.0.0,<1.1.0 # Apache-2.0
+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
 python-openstackclient>=3.12.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironic-inspector-client-3.7.0/tox.ini 
new/python-ironic-inspector-client-4.1.0/tox.ini
--- old/python-ironic-inspector-client-3.7.0/tox.ini    2019-09-07 
20:30:57.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/tox.ini    2020-04-09 
18:16:35.000000000 +0200
@@ -1,12 +1,14 @@
 [tox]
-minversion = 2.0
-envlist = py3,py27,pep8,functional
+minversion = 3.1.0
+envlist = py3,pep8,functional-py3
+ignore_basepython_conflict=true
 
 [testenv]
+basepython = python3
 install_command = pip install {opts} {packages}
 usedevelop = True
 deps =
-    
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+    
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
     -r{toxinidir}/requirements.txt
     -r{toxinidir}/test-requirements.txt
 commands =
@@ -16,20 +18,11 @@
 passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
 
 [testenv:pep8]
-basepython = python3
 commands =
     flake8 ironic_inspector_client
     doc8 README.rst doc/source
 
-[testenv:functional]
-basepython = python2.7
-deps = {[testenv]deps}
-    -r{toxinidir}/functest-requirements.txt
-commands =
-    python -m ironic_inspector_client.test.functional {posargs}
-
 [testenv:functional-py3]
-basepython = python3
 deps = {[testenv]deps}
     -r{toxinidir}/functest-requirements.txt
 commands =
@@ -43,36 +36,31 @@
 [testenv:func]
 # Replaced in CI with "functional" environment but kept here as a
 # backwards-compatibility shim for transition
-basepython = python3
-deps = {[testenv:functional]deps}
-commands = {[testenv:functional]commands}
+deps = {[testenv:functional-py3]deps}
+commands = {[testenv:functional-py3]commands}
 
 [testenv:venv]
-basepython = python3
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/requirements.txt
   -r{toxinidir}/doc/requirements.txt
 commands = {posargs}
 
 [testenv:releasenotes]
-basepython = python3
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/requirements.txt
   -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
 
 [testenv:docs]
-basepython = python3
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/requirements.txt
   -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -W -b html doc/source doc/build/html
 
 [testenv:pdf-docs]
-basepython = python3
 whitelist_externals = make
 deps = {[testenv:docs]deps}
 commands =
@@ -94,8 +82,17 @@
 import_exceptions = ironic_inspector_client.common.i18n
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt
   -r{toxinidir}/requirements.txt
+
+# This environment can be used to quickly validate that all needed system
+# packages required to successfully execute test targets are installed
+[testenv:bindep]
+# Do not install any requirements. We want this to be fast and work even if
+# system dependencies are missing, since it's used to tell you what system
+# dependencies are missing! This also means that bindep must be installed
+# separately, outside of the requirements files.
+deps = bindep
+commands = bindep test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/zuul.d/project.yaml 
new/python-ironic-inspector-client-4.1.0/zuul.d/project.yaml
--- old/python-ironic-inspector-client-3.7.0/zuul.d/project.yaml        
2019-09-07 20:30:54.000000000 +0200
+++ new/python-ironic-inspector-client-4.1.0/zuul.d/project.yaml        
2020-04-09 18:16:35.000000000 +0200
@@ -1,22 +1,17 @@
 - project:
     templates:
-      - openstack-python-jobs
-      - openstack-python3-train-jobs
+      - openstack-python3-ussuri-jobs
       - publish-openstack-docs-pti
       - check-requirements
       - release-notes-jobs-python3
       - openstackclient-plugin-jobs
     check:
       jobs:
-        - openstack-tox-functional
         - openstack-tox-functional-py36
-        - python-ironic-inspector-client-tempest-python2
         - python-ironic-inspector-client-tempest-python3
         - openstack-tox-lower-constraints
     gate:
       jobs:
-        - openstack-tox-functional
         - openstack-tox-functional-py36
-        - python-ironic-inspector-client-tempest-python2
         - python-ironic-inspector-client-tempest-python3
         - openstack-tox-lower-constraints
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironic-inspector-client-3.7.0/zuul.d/python-ironic-inspector-client-jobs.yaml
 
new/python-ironic-inspector-client-4.1.0/zuul.d/python-ironic-inspector-client-jobs.yaml
--- 
old/python-ironic-inspector-client-3.7.0/zuul.d/python-ironic-inspector-client-jobs.yaml
    2019-09-07 20:30:54.000000000 +0200
+++ 
new/python-ironic-inspector-client-4.1.0/zuul.d/python-ironic-inspector-client-jobs.yaml
    2020-04-09 18:16:35.000000000 +0200
@@ -40,7 +40,7 @@
         IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs'
         IRONIC_VM_SPECS_RAM: 384
         IRONIC_DEFAULT_DEPLOY_INTERFACE: direct
-        IRONIC_DEFAULT_RESCUE_INTERFACE: agent
+        IRONIC_DEFAULT_RESCUE_INTERFACE: ""
 
         Q_AGENT: openvswitch
         Q_ML2_TENANT_NETWORK_TYPE: vxlan
@@ -98,17 +98,6 @@
         ironic-inspector-dhcp: True
 
 - job:
-    name: python-ironic-inspector-client-tempest-python2
-    description: python-ironic-inspector-client-tempest-python2
-    parent: python-ironic-inspector-client-base
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: False
-
-- job:
     name: python-ironic-inspector-client-tempest-python3
     description: python-ironic-inspector-client-tempest-python3
     parent: python-ironic-inspector-client-base
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: True


Reply via email to