Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-ironicclient for 
openSUSE:Factory checked in at 2021-05-10 15:37:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ironicclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-ironicclient.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ironicclient"

Mon May 10 15:37:23 2021 rev:22 rq:889969 version:4.6.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ironicclient/python-ironicclient.changes  
2021-02-02 14:26:01.183424293 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-ironicclient.new.2988/python-ironicclient.changes
        2021-05-10 15:39:35.737511309 +0200
@@ -1,0 +2,23 @@
+Sun May  2 17:21:48 UTC 2021 - [email protected]
+
+- update to version 4.6.1
+  - Add 'deploy steps' for  provisioning API
+  - Use TOX_CONSTRAINTS_FILE
+  - Remove lower-constraints job
+  - Add tests for 'baremetal port create' command
+  - Support YAML files wherever JSON files are accepted
+  - Add Python3 wallaby unit tests
+  - remove lower-constraints job tox.ini
+  - Move pep8 dependencies from test-requirements to tox.ini
+  - Set safe version of hacking
+  - Support setting automated_clean to False
+  - Update minversion of tox
+  - Update create node from file example
+  - requirements: Drop os-testr
+  - Add PyPi link to readme.rst
+  - Fix l-c job
+  - Update master for stable/victoria
+  - Remove install unnecessary packages
+  - Clearer error message when unable to parse JSON
+
+-------------------------------------------------------------------

Old:
----
  python-ironicclient-4.4.0.tar.gz

New:
----
  python-ironicclient-4.6.1.tar.gz

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

Other differences:
------------------
++++++ python-ironicclient.spec ++++++
--- /var/tmp/diff_new_pack.fhzdjE/_old  2021-05-10 15:39:36.141509654 +0200
+++ /var/tmp/diff_new_pack.fhzdjE/_new  2021-05-10 15:39:36.145509638 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-ironicclient
-Version:        4.4.0
+Version:        4.6.1
 Release:        0
 Summary:        Python API and CLI for OpenStack Ironic
 License:        Apache-2.0
 Group:          Development/Languages/Python
-URL:            https://launchpad.net/python-ironicclient
-Source0:        
https://files.pythonhosted.org/packages/source/p/python-ironicclient/python-ironicclient-4.4.0.tar.gz
+URL:            https://docs.openstack.org/python-ironicclient
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-ironicclient/python-ironicclient-4.6.1.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-Babel
 BuildRequires:  python3-PyYAML >= 3.13
@@ -31,7 +31,6 @@
 BuildRequires:  python3-dogpile.cache >= 0.8.0
 BuildRequires:  python3-fixtures
 BuildRequires:  python3-jsonschema >= 3.2.0
-BuildRequires:  python3-mock
 BuildRequires:  python3-openstackclient
 BuildRequires:  python3-osc-lib >= 2.0.0
 BuildRequires:  python3-oslo.i18n
@@ -53,7 +52,6 @@
 
 %package -n python3-ironicclient
 Summary:        Python API and CLI for OpenStack Ironic
-Group:          Development/Languages/Python
 Requires:       python3-PyYAML >= 3.13
 Requires:       python3-appdirs >= 1.3.0
 Requires:       python3-dogpile.cache >= 0.8.0
@@ -90,13 +88,13 @@
 This package contains auto-generated documentation.
 
 %prep
-%autosetup -p1 -n python-ironicclient-4.4.0
+%autosetup -p1 -n python-ironicclient-4.6.1
 %py_req_cleanup
 
 %build
 %{py3_build}
 
-PBR_VERSION=4.4.0 %sphinx_build -b html doc/source doc/build/html
+PBR_VERSION=4.6.1 %sphinx_build -b html doc/source doc/build/html
 # remove the sphinx-build leftovers
 rm -rf doc/build/html/.{doctrees,buildinfo}
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.fhzdjE/_old  2021-05-10 15:39:36.169509540 +0200
+++ /var/tmp/diff_new_pack.fhzdjE/_new  2021-05-10 15:39:36.173509524 +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-ironicclient/python-ironicclient.spec.j2?h=stable/victoria</param>
+    <param 
name="input-template">https://git.openstack.org/cgit/openstack/rpm-packaging/plain/openstack/python-ironicclient/python-ironicclient.spec.j2?h=stable/wallaby</param>
     <param name="output-name">python-ironicclient.spec</param>
-    <param 
name="requirements">https://opendev.org/openstack/python-ironicclient/raw/branch/stable/victoria/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/python-ironicclient/raw/branch/stable/wallaby/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,python-ironicclient</param>
   </service>

++++++ python-ironicclient-4.4.0.tar.gz -> python-ironicclient-4.6.1.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/AUTHORS 
new/python-ironicclient-4.6.1/AUTHORS
--- old/python-ironicclient-4.4.0/AUTHORS       2020-10-16 11:54:01.000000000 
+0200
+++ new/python-ironicclient-4.6.1/AUTHORS       2021-03-12 18:04:50.000000000 
+0100
@@ -1,4 +1,5 @@
 Adam Gandelman <[email protected]>
+Aija Jaunt??va <[email protected]>
 Alexey Galkin <[email protected]>
 Aline Bousquet <[email protected]>
 Andreas Jaeger <[email protected]>
@@ -150,11 +151,14 @@
 huang.zhiping <[email protected]>
 jiang wei <[email protected]>
 jiangfei <[email protected]>
+likui <[email protected]>
 linbing <[email protected]>
 linggao <[email protected]>
 lingyongxu <[email protected]>
 liuqing <[email protected]>
+liushuobj <[email protected]>
 llg8212 <[email protected]>
+maaoyu <[email protected]>
 max_lobur <[email protected]>
 melissaml <[email protected]>
 qinchunhua <[email protected]>
@@ -169,6 +173,7 @@
 wangfaxin <[email protected]>
 wu.chunyang <[email protected]>
 wu.chunyang <[email protected]>
+wu.shiming <[email protected]>
 xiexs <[email protected]>
 ya.wang <[email protected]>
 zhengchuan hu <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/ChangeLog 
new/python-ironicclient-4.6.1/ChangeLog
--- old/python-ironicclient-4.4.0/ChangeLog     2020-10-16 11:54:01.000000000 
+0200
+++ new/python-ironicclient-4.6.1/ChangeLog     2021-03-12 18:04:50.000000000 
+0100
@@ -1,12 +1,36 @@
 CHANGES
 =======
 
-4.4.0
+4.6.1
 -----
 
+
+4.6.0
+-----
+
+* Clearer error message when unable to parse JSON
+* Support YAML files wherever JSON files are accepted
+* Update minversion of tox
+* Add 'deploy steps' for  provisioning API
+
+4.5.0
+-----
+
+* Add PyPi link to readme.rst
+* Support setting automated\_clean to False
+* Move pep8 dependencies from test-requirements to tox.ini
+* remove lower-constraints job tox.ini
+* Remove lower-constraints job
+* Use TOX\_CONSTRAINTS\_FILE
+* Update create node from file example
+* Set safe version of hacking
+* Remove install unnecessary packages
+* requirements: Drop os-testr
+* Remove install unnecessary packages
 * Fix l-c job
-* Update TOX\_CONSTRAINTS\_FILE for stable/victoria
-* Update .gitreview for stable/victoria
+* Add Python3 wallaby unit tests
+* Update master for stable/victoria
+* Add tests for 'baremetal port create' command
 
 4.3.0
 -----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/PKG-INFO 
new/python-ironicclient-4.6.1/PKG-INFO
--- old/python-ironicclient-4.4.0/PKG-INFO      2020-10-16 11:54:01.000000000 
+0200
+++ new/python-ironicclient-4.6.1/PKG-INFO      2021-03-12 18:04:51.037501000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: python-ironicclient
-Version: 4.4.0
+Version: 4.6.1
 Summary: OpenStack Bare Metal Provisioning API Client Library
 Home-page: https://docs.openstack.org/python-ironicclient/latest/
 Author: OpenStack
@@ -41,6 +41,7 @@
         
         * Documentation: https://docs.openstack.org/python-ironicclient/latest/
         * Source: https://opendev.org/openstack/python-ironicclient
+        * PyPi: https://pypi.org/project/python-ironicclient
         * Bugs: https://storyboard.openstack.org/#!/project/959
         * Release notes: 
https://docs.openstack.org/releasenotes/python-ironicclient/
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/README.rst 
new/python-ironicclient-4.6.1/README.rst
--- old/python-ironicclient-4.4.0/README.rst    2020-10-16 11:52:54.000000000 
+0200
+++ new/python-ironicclient-4.6.1/README.rst    2021-03-12 18:03:56.000000000 
+0100
@@ -33,6 +33,7 @@
 
 * Documentation: https://docs.openstack.org/python-ironicclient/latest/
 * Source: https://opendev.org/openstack/python-ironicclient
+* PyPi: https://pypi.org/project/python-ironicclient
 * Bugs: https://storyboard.openstack.org/#!/project/959
 * Release notes: https://docs.openstack.org/releasenotes/python-ironicclient/
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/doc/source/user/create_command.rst 
new/python-ironicclient-4.6.1/doc/source/user/create_command.rst
--- old/python-ironicclient-4.4.0/doc/source/user/create_command.rst    
2020-10-16 11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/doc/source/user/create_command.rst    
2021-03-12 18:03:56.000000000 +0100
@@ -75,7 +75,7 @@
                 "nodes": [
                     {
                         "name": "node-3",
-                        "driver": "agent_ipmitool",
+                        "driver": "ipmi",
                         "portgroups": [
                             {
                                 "name": "switch.cz7882.ports.1-2",
@@ -96,11 +96,16 @@
                             {
                                 "address": "00:00:00:00:00:03"
                             }
-                        ]
+                        ],
+                        "driver_info": {
+                            "ipmi_address": "192.168.1.23",
+                            "ipmi_username": "BmcUsername",
+                            "ipmi_password": "BmcPassword",
+                        }
                     },
                     {
                         "name": "node-4",
-                        "driver": "agent_ipmitool",
+                        "driver": "ipmi",
                         "ports": [
                             {
                                 "address": "00:00:00:00:00:04"
@@ -116,7 +121,7 @@
         "nodes": [
             {
                 "name": "node-5",
-                "driver": "pxe_ipmitool",
+                "driver": "ipmi",
                 "chassis_uuid": "74d93e6e-7384-4994-a614-fd7b399b0785",
                 "ports": [
                     {
@@ -126,7 +131,7 @@
             },
             {
                 "name": "node-6",
-                "driver": "pxe_ipmitool"
+                "driver": "ipmi"
             }
         ]
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/common/http.py 
new/python-ironicclient-4.6.1/ironicclient/common/http.py
--- old/python-ironicclient-4.4.0/ironicclient/common/http.py   2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/ironicclient/common/http.py   2021-03-12 
18:03:56.000000000 +0100
@@ -37,7 +37,7 @@
 #             
http://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html
 # noqa
 #             for full details.
 DEFAULT_VER = '1.9'
-LAST_KNOWN_API_VERSION = 67
+LAST_KNOWN_API_VERSION = 69
 LATEST_VERSION = '1.{}'.format(LAST_KNOWN_API_VERSION)
 
 LOG = logging.getLogger(__name__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/common/utils.py 
new/python-ironicclient-4.6.1/ironicclient/common/utils.py
--- old/python-ironicclient-4.4.0/ironicclient/common/utils.py  2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/ironicclient/common/utils.py  2021-03-12 
18:03:56.000000000 +0100
@@ -26,6 +26,7 @@
 import time
 
 from oslo_utils import strutils
+import yaml
 
 from ironicclient.common.i18n import _
 from ironicclient import exc
@@ -366,7 +367,7 @@
 def handle_json_or_file_arg(json_arg):
     """Attempts to read JSON argument from file or string.
 
-    :param json_arg: May be a file name containing the JSON, or
+    :param json_arg: May be a file name containing the YAML or JSON, or
         a JSON string.
     :returns: A list or dictionary parsed from JSON.
     :raises: InvalidAttribute if the argument cannot be parsed.
@@ -375,16 +376,16 @@
     if os.path.isfile(json_arg):
         try:
             with open(json_arg, 'r') as f:
-                json_arg = f.read().strip()
+                return yaml.safe_load(f)
         except Exception as e:
-            err = _("Cannot get JSON from file '%(file)s'. "
+            err = _("Cannot get JSON/YAML from file '%(file)s'. "
                     "Error: %(err)s") % {'err': e, 'file': json_arg}
             raise exc.InvalidAttribute(err)
     try:
         json_arg = json.loads(json_arg)
     except ValueError as e:
-        err = (_("For JSON: '%(string)s', error: '%(err)s'") %
-               {'err': e, 'string': json_arg})
+        err = (_("Value '%(string)s' is not a file and cannot be parsed "
+                 "as JSON: '%(err)s'") % {'err': e, 'string': json_arg})
         raise exc.InvalidAttribute(err)
 
     return json_arg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/osc/v1/baremetal_deploy_template.py 
new/python-ironicclient-4.6.1/ironicclient/osc/v1/baremetal_deploy_template.py
--- 
old/python-ironicclient-4.4.0/ironicclient/osc/v1/baremetal_deploy_template.py  
    2020-10-16 11:52:54.000000000 +0200
+++ 
new/python-ironicclient-4.6.1/ironicclient/osc/v1/baremetal_deploy_template.py  
    2021-03-12 18:03:56.000000000 +0100
@@ -25,9 +25,9 @@
 
 
 _DEPLOY_STEPS_HELP = _(
-    "The deploy steps in JSON format. May be the path to a file containing "
-    "the deploy steps; OR '-', with the deploy steps being read from standard "
-    "input; OR a string. The value should be a list of deploy-step "
+    "The deploy steps. May be the path to a YAML file containing the deploy "
+    "steps; OR '-', with the deploy steps being read from standard "
+    "input; OR a JSON string. The value should be a list of deploy-step "
     "dictionaries; each dictionary should have keys 'interface', 'step', "
     "'args' and 'priority'.")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/osc/v1/baremetal_node.py 
new/python-ironicclient-4.6.1/ironicclient/osc/v1/baremetal_node.py
--- old/python-ironicclient-4.4.0/ironicclient/osc/v1/baremetal_node.py 
2020-10-16 11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/ironicclient/osc/v1/baremetal_node.py 
2021-03-12 18:03:56.000000000 +0100
@@ -40,7 +40,7 @@
 
 
 NETWORK_DATA_ARG_HELP = _(
-    "JSON string or a file or '-' for stdin to read static network "
+    "JSON string or a YAML file or '-' for stdin to read static network "
     "configuration for the baremetal node associated with this ironic node. "
     "Format of this file should comply with Nova network data metadata "
     "(network_data.json). Depending on ironic boot interface capabilities "
@@ -81,6 +81,9 @@
         clean_steps = getattr(parsed_args, 'clean_steps', None)
         clean_steps = utils.handle_json_arg(clean_steps, 'clean steps')
 
+        deploy_steps = getattr(parsed_args, 'deploy_steps', None)
+        deploy_steps = utils.handle_json_arg(deploy_steps, 'deploy steps')
+
         config_drive = getattr(parsed_args, 'config_drive', None)
         if config_drive:
             try:
@@ -98,6 +101,7 @@
             parsed_args.provision_state,
             configdrive=config_drive,
             cleansteps=clean_steps,
+            deploysteps=deploy_steps,
             rescue_password=rescue_password)
 
 
@@ -252,10 +256,10 @@
             metavar='<clean-steps>',
             required=True,
             default=None,
-            help=_("The clean steps in JSON format. May be the path to a file "
+            help=_("The clean steps. May be the path to a YAML file "
                    "containing the clean steps; OR '-', with the clean steps "
-                   "being read from standard input; OR a string. The value "
-                   "should be a list of clean-step dictionaries; each "
+                   "being read from standard input; OR a JSON string. The "
+                   "value should be a list of clean-step dictionaries; each "
                    "dictionary should have keys 'interface' and 'step', and "
                    "optional key 'args'."))
         return parser
@@ -456,11 +460,18 @@
             '--conductor-group',
             metavar='<conductor_group>',
             help=_('Conductor group the node will belong to'))
-        parser.add_argument(
+        clean = parser.add_mutually_exclusive_group()
+        clean.add_argument(
             '--automated-clean',
             action='store_true',
             default=None,
             help=_('Enable automated cleaning for the node'))
+        clean.add_argument(
+            '--no-automated-clean',
+            action='store_false',
+            dest='automated_clean',
+            default=None,
+            help=_('Explicitly disable automated cleaning for the node'))
         parser.add_argument(
             '--owner',
             metavar='<owner>',
@@ -554,6 +565,18 @@
             metavar='<config-drive>',
             default=None,
             help=CONFIG_DRIVE_ARG_HELP)
+
+        parser.add_argument(
+            '--deploy-steps',
+            metavar='<deploy-steps>',
+            required=False,
+            default=None,
+            help=_("The deploy steps. May be the path to a YAML file "
+                   "containing the deploy steps; OR '-', with the deploy "
+                   "steps being read from standard input; OR a JSON string. "
+                   "The value should be a list of deploy-step dictionaries; "
+                   "each dictionary should have keys 'interface' and 'step', "
+                   "and optional key 'args'."))
         return parser
 
 
@@ -1029,6 +1052,18 @@
             metavar='<config-drive>',
             default=None,
             help=CONFIG_DRIVE_ARG_HELP)
+
+        parser.add_argument(
+            '--deploy-steps',
+            metavar='<deploy-steps>',
+            required=False,
+            default=None,
+            help=_("The deploy steps in JSON format. May be the path to a "
+                   "file containing the deploy steps; OR '-', with the deploy "
+                   "steps being read from standard input; OR a string. The "
+                   "value should be a list of deploy-step dictionaries; each "
+                   "dictionary should have keys 'interface', 'step', "
+                   "'priority' and optional key 'args'."))
         return parser
 
 
@@ -1191,11 +1226,18 @@
             metavar='<conductor_group>',
             help=_('Set the conductor group for the node'),
         )
-        parser.add_argument(
+        clean = parser.add_mutually_exclusive_group()
+        clean.add_argument(
             '--automated-clean',
             action='store_true',
-            help=_('Enable automated cleaning for the node'),
-        )
+            default=None,
+            help=_('Enable automated cleaning for the node'))
+        clean.add_argument(
+            '--no-automated-clean',
+            action='store_false',
+            dest='automated_clean',
+            default=None,
+            help=_('Explicitly disable automated cleaning for the node'))
         parser.add_argument(
             '--protected',
             action='store_true',
@@ -1220,7 +1262,7 @@
             '--target-raid-config',
             metavar='<target_raid_config>',
             help=_('Set the target RAID configuration (JSON) for the node. '
-                   'This can be one of: 1. a file containing JSON data of the '
+                   'This can be one of: 1. a file containing YAML data of the '
                    'RAID configuration; 2. "-" to read the contents from '
                    'standard input; or 3. a valid JSON string.'),
         )
@@ -1284,7 +1326,7 @@
                                                          raid_config)
 
         properties = []
-        for field in ['automated_clean', 'instance_uuid', 'name',
+        for field in ['instance_uuid', 'name',
                       'chassis_uuid', 'driver', 'resource_class',
                       'conductor_group', 'protected', 'protected_reason',
                       'retired', 'retired_reason', 'owner', 'lessee',
@@ -1294,6 +1336,10 @@
                 properties.extend(utils.args_array_to_patch(
                     'add', ["%s=%s" % (field, value)]))
 
+        if parsed_args.automated_clean is not None:
+            properties.extend(utils.args_array_to_patch(
+                'add', ["automated_clean=%s" % parsed_args.automated_clean]))
+
         if parsed_args.reset_interfaces and not parsed_args.driver:
             raise exc.CommandError(
                 _("--reset-interfaces can only be specified with --driver"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_allocation.py
 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_allocation.py
--- 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_allocation.py
     2020-10-16 11:52:54.000000000 +0200
+++ 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_allocation.py
     2021-03-12 18:03:56.000000000 +0100
@@ -129,16 +129,14 @@
 
     @ddt.data(
         ('--uuid', '', 'expected one argument'),
-        ('--uuid', '!@#$^*&%^', 'Expected a UUID'),
+        ('--uuid', '!@#$^*&%^', 'Expected UUID for uuid'),
         ('--extra', '', 'expected one argument'),
         ('--name', '', 'expected one argument'),
         ('--name', 'not/a/name', 'invalid name'),
         ('--resource-class', '', 'expected one argument'),
-        ('--resource-class', 'x' * 81,
-         'Value should have a maximum character requirement of 80'),
+        ('--resource-class', 'x' * 81, 'is too long'),
         ('--trait', '', 'expected one argument'),
-        ('--trait', 'foo',
-         'A custom trait must start with the prefix CUSTOM_'),
+        ('--trait', 'foo', 'does not match'),
         ('--candidate-node', '', 'expected one argument'),
         ('--candidate-node', 'banana?', 'Nodes cannot be found'),
         ('--wait', 'meow', 'invalid int value'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_deploy_template_basic.py
 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_deploy_template_basic.py
--- 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_deploy_template_basic.py
  2020-10-16 11:52:54.000000000 +0200
+++ 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_deploy_template_basic.py
  2021-03-12 18:03:56.000000000 +0100
@@ -158,12 +158,12 @@
 
     @ddt.data(
         ('--uuid', '', 'expected one argument'),
-        ('--uuid', '!@#$^*&%^', 'Expected a UUID'),
+        ('--uuid', '!@#$^*&%^', 'Expected UUID for uuid'),
         ('', '', 'the following arguments are required'),
-        ('', 'not/a/name', 'Deploy template name must be a valid trait'),
-        ('', 'foo', 'Deploy template name must be a valid trait'),
+        ('', 'not/a/name', 'does not match'),
+        ('', 'foo', 'does not match'),
         ('--steps', '', 'expected one argument'),
-        ('--steps', '[]', 'No deploy steps specified'))
+        ('--steps', '[]', 'is too short'))
     @ddt.unpack
     def test_create_negative(self, argument, value, ex_text):
         """Check errors on invalid input parameters."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_node_create_negative.py
 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_node_create_negative.py
--- 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_node_create_negative.py
   2020-10-16 11:52:54.000000000 +0200
+++ 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_node_create_negative.py
   2021-03-12 18:03:56.000000000 +0100
@@ -27,7 +27,7 @@
 
     @ddt.data(
         ('--uuid', '', 'expected one argument'),
-        ('--uuid', '!@#$^*&%^', 'Expected a UUID'),
+        ('--uuid', '!@#$^*&%^', 'Expected UUID for uuid'),
         ('--uuid', '0000 0000', 'unrecognized arguments'),
         ('--driver-info', '', 'expected one argument'),
         ('--driver-info', 'some info', 'unrecognized arguments'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_port_create.py
 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_port_create.py
--- 
old/python-ironicclient-4.4.0/ironicclient/tests/functional/osc/v1/test_baremetal_port_create.py
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/test_baremetal_port_create.py
    2021-03-12 18:03:56.000000000 +0100
@@ -0,0 +1,75 @@
+#    Copyright (c) 2016 Mirantis, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from tempest.lib.common.utils import data_utils
+
+from ironicclient.tests.functional.osc.v1 import base
+
+
+class BaremetalPortCreate(base.TestCase):
+    """Detailed functional tests for baremetal port create command."""
+
+    def setUp(self):
+        super(BaremetalPortCreate, self).setUp()
+        self.node = self.node_create()
+
+    def test_extras(self):
+        """Check baremetal port create command with extra data.
+
+        Test steps:
+        1) Create port using solitary and multiple --extra arguments.
+        2) Check that port successfully created with right extras.
+        """
+        extras = [{'single_extra': 'yes'},
+                  {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}]
+
+        for extra in extras:
+            params = self.generate_params('--extra', extra)
+            port = self.port_create(self.node['uuid'], params=params)
+            self.assert_dict_is_subset(extra, port['extra'])
+
+    def test_pxe_1_19(self):
+        """Check baremetal port create command with PXE option.
+
+        Test steps:
+        1) Create port using --pxe-enabled argument.
+        2) Check that port successfully created with right PXE option.
+        """
+        pxe_values = [True, False]
+        api_version = ' --os-baremetal-api-version 1.19'
+
+        for value in pxe_values:
+            port = self.port_create(
+                self.node['uuid'],
+                params='--pxe-enabled {0} {1}'.format(value, api_version))
+            self.assertEqual(value, port['pxe_enabled'])
+
+    def test_llc_1_19(self):
+        """Check baremetal port create command with LLC option.
+
+        Test steps:
+        1) Create port using --local-link-connection argument.
+        2) Check that port successfully created with right LLC data.
+        """
+        fake_port_id = data_utils.rand_name(prefix='ovs-node-')
+        fake_switch_id = data_utils.rand_mac_address()
+        llc_value = {"switch_info": "brbm",
+                     "port_id": fake_port_id,
+                     "switch_id": fake_switch_id}
+        api_version = ' --os-baremetal-api-version 1.19'
+
+        params = self.generate_params('--local-link-connection', llc_value)
+        port = self.port_create(self.node['uuid'],
+                                params='{0} {1}'.format(params, api_version))
+        self.assert_dict_is_subset(llc_value, port['local_link_connection'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/unit/common/test_utils.py 
new/python-ironicclient-4.6.1/ironicclient/tests/unit/common/test_utils.py
--- old/python-ironicclient-4.4.0/ironicclient/tests/unit/common/test_utils.py  
2020-10-16 11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/ironicclient/tests/unit/common/test_utils.py  
2021-03-12 18:03:56.000000000 +0100
@@ -342,7 +342,7 @@
     def test_handle_json_or_file_arg_bad_json(self):
         cleansteps = 'foo'
         self.assertRaisesRegex(exc.InvalidAttribute,
-                               'For JSON',
+                               'is not a file and cannot be parsed as JSON',
                                utils.handle_json_or_file_arg, cleansteps)
 
     def test_handle_json_or_file_arg_file(self):
@@ -355,17 +355,24 @@
 
         self.assertEqual(json.loads(contents), steps)
 
+    def test_handle_yaml_or_file_arg_file(self):
+        contents = '''---
+- step: upgrade
+  interface: deploy'''
+
+        with tempfile.NamedTemporaryFile(mode='w') as f:
+            f.write(contents)
+            f.flush()
+            steps = utils.handle_json_or_file_arg(f.name)
+
+        self.assertEqual([{"step": "upgrade", "interface": "deploy"}], steps)
+
     @mock.patch.object(builtins, 'open', autospec=True)
     def test_handle_json_or_file_arg_file_fail(self, mock_open):
-        mock_file_object = mock.MagicMock()
-        mock_file_handle = mock.MagicMock()
-        mock_file_handle.__enter__.return_value = mock_file_object
-        mock_open.return_value = mock_file_handle
-        mock_file_object.read.side_effect = IOError
+        mock_open.return_value.__enter__.side_effect = IOError
 
         with tempfile.NamedTemporaryFile(mode='w') as f:
             self.assertRaisesRegex(exc.InvalidAttribute,
                                    "from file",
                                    utils.handle_json_or_file_arg, f.name)
             mock_open.assert_called_once_with(f.name, 'r')
-            mock_file_object.read.assert_called_once_with()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
 
new/python-ironicclient-4.6.1/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
--- 
old/python-ironicclient-4.4.0/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
 2020-10-16 11:52:54.000000000 +0200
+++ 
new/python-ironicclient-4.6.1/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
 2021-03-12 18:03:56.000000000 +0100
@@ -56,7 +56,8 @@
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
             'node_uuid', 'adopt',
-            cleansteps=None, configdrive=None, rescue_password=None)
+            cleansteps=None, deploysteps=None, configdrive=None,
+            rescue_password=None)
 
     def test_adopt_no_wait(self):
         arglist = ['node_uuid']
@@ -465,6 +466,11 @@
                                 [('automated_clean', True)],
                                 {'automated_clean': True})
 
+    def test_baremetal_create_with_no_automated_clean(self):
+        self.check_with_options(['--no-automated-clean'],
+                                [('automated_clean', False)],
+                                {'automated_clean': False})
+
     def test_baremetal_create_with_owner(self):
         self.check_with_options(['--owner', 'owner 1'],
                                 [('owner', 'owner 1')],
@@ -1441,11 +1447,13 @@
 
     def test_deploy_baremetal_provision_state_active_and_configdrive(self):
         arglist = ['node_uuid',
-                   '--config-drive', 'path/to/drive']
+                   '--config-drive', 'path/to/drive',
+                   '--deploy-steps', '[{"interface":"deploy"}]']
         verifylist = [
             ('node', 'node_uuid'),
             ('provision_state', 'active'),
             ('config_drive', 'path/to/drive'),
+            ('deploy_steps', '[{"interface":"deploy"}]')
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1454,7 +1462,8 @@
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
             'node_uuid', 'active',
-            cleansteps=None, configdrive='path/to/drive', rescue_password=None)
+            cleansteps=None, deploysteps=[{"interface": "deploy"}],
+            configdrive='path/to/drive', rescue_password=None)
 
     def test_deploy_baremetal_provision_state_active_and_configdrive_dict(
             self):
@@ -1472,7 +1481,7 @@
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
             'node_uuid', 'active',
-            cleansteps=None, configdrive={'meta_data': {}},
+            cleansteps=None, deploysteps=None, configdrive={'meta_data': {}},
             rescue_password=None)
 
     def test_deploy_no_wait(self):
@@ -1674,8 +1683,8 @@
         self.cmd.take_action(parsed_args)
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
-            'node_uuid', 'rescue', cleansteps=None, configdrive=None,
-            rescue_password='supersecret')
+            'node_uuid', 'rescue', cleansteps=None, deploysteps=None,
+            configdrive=None, rescue_password='supersecret')
 
     def test_rescue_baremetal_provision_state_rescue_and_wait(self):
         arglist = ['node_uuid',
@@ -1850,11 +1859,13 @@
 
     def test_rebuild_baremetal_provision_state_active_and_configdrive(self):
         arglist = ['node_uuid',
-                   '--config-drive', 'path/to/drive']
+                   '--config-drive', 'path/to/drive',
+                   '--deploy-steps', '[{"interface":"deploy"}]']
         verifylist = [
             ('node', 'node_uuid'),
             ('provision_state', 'rebuild'),
             ('config_drive', 'path/to/drive'),
+            ('deploy_steps', '[{"interface":"deploy"}]')
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1863,8 +1874,8 @@
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
             'node_uuid', 'rebuild',
-            cleansteps=None, configdrive='path/to/drive',
-            rescue_password=None)
+            cleansteps=None, deploysteps=[{"interface": "deploy"}],
+            configdrive='path/to/drive', rescue_password=None)
 
     def test_rebuild_no_wait(self):
         arglist = ['node_uuid']
@@ -1879,7 +1890,7 @@
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
             'node_uuid', 'rebuild',
-            cleansteps=None, configdrive=None,
+            cleansteps=None, deploysteps=None, configdrive=None,
             rescue_password=None)
 
         self.baremetal_mock.node.wait_for_provision_state.assert_not_called()
@@ -1997,8 +2008,8 @@
         self.cmd.take_action(parsed_args)
 
         self.baremetal_mock.node.set_provision_state.assert_called_once_with(
-            'node_uuid', 'unrescue', cleansteps=None, configdrive=None,
-            rescue_password=None)
+            'node_uuid', 'unrescue', cleansteps=None, deploysteps=None,
+            configdrive=None, rescue_password=None)
 
     def test_unrescue_baremetal_provision_state_active_and_wait(self):
         arglist = ['node_uuid',
@@ -2477,6 +2488,26 @@
             reset_interfaces=None,
         )
 
+    def test_baremetal_set_no_automated_clean(self):
+        arglist = [
+            'node_uuid',
+            '--no-automated-clean'
+        ]
+        verifylist = [
+            ('node', 'node_uuid'),
+            ('automated_clean', False)
+        ]
+
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        self.cmd.take_action(parsed_args)
+
+        self.baremetal_mock.node.update.assert_called_once_with(
+            'node_uuid',
+            [{'path': '/automated_clean', 'value': 'False', 'op': 'add'}],
+            reset_interfaces=None,
+        )
+
     def test_baremetal_set_protected(self):
         arglist = [
             'node_uuid',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/ironicclient/tests/unit/v1/test_node.py 
new/python-ironicclient-4.6.1/ironicclient/tests/unit/v1/test_node.py
--- old/python-ironicclient-4.4.0/ironicclient/tests/unit/v1/test_node.py       
2020-10-16 11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/ironicclient/tests/unit/v1/test_node.py       
2021-03-12 18:03:56.000000000 +0100
@@ -1564,6 +1564,31 @@
         ]
         self.assertEqual(expect, self.api.calls)
 
+    def test_node_set_provision_state_with_deploysteps(self):
+        deploysteps = [{"step": "upgrade", "interface": "deploy"}]
+        target_state = 'active'
+        self.mgr.set_provision_state(NODE1['uuid'], target_state,
+                                     deploysteps=deploysteps)
+        body = {'target': target_state, 'deploy_steps': deploysteps}
+        expect = [
+            ('PUT', '/v1/nodes/%s/states/provision' % NODE1['uuid'], {}, body),
+        ]
+        self.assertEqual(expect, self.api.calls)
+
+    def test_node_set_provision_state_with_configdrive_and_deploysteps(self):
+        deploysteps = [{"step": "upgrade", "interface": "deploy"}]
+        target_state = 'active'
+        self.mgr.set_provision_state(NODE1['uuid'], target_state,
+                                     configdrive={'user_data': ''},
+                                     deploysteps=deploysteps)
+        body = {'target': target_state,
+                'configdrive': {'user_data': ''},
+                'deploy_steps': deploysteps}
+        expect = [
+            ('PUT', '/v1/nodes/%s/states/provision' % NODE1['uuid'], {}, body),
+        ]
+        self.assertEqual(expect, self.api.calls)
+
     def test_node_set_provision_state_with_rescue_password(self):
         rescue_password = 'supersecret'
         target_state = 'rescue'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/ironicclient/v1/node.py 
new/python-ironicclient-4.6.1/ironicclient/v1/node.py
--- old/python-ironicclient-4.4.0/ironicclient/v1/node.py       2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/ironicclient/v1/node.py       2021-03-12 
18:03:56.000000000 +0100
@@ -619,7 +619,7 @@
     def set_provision_state(
             self, node_uuid, state, configdrive=None, cleansteps=None,
             rescue_password=None, os_ironic_api_version=None,
-            global_request_id=None):
+            global_request_id=None, deploysteps=None):
         """Set the provision state for the node.
 
         :param node_uuid: The UUID or name of the node.
@@ -644,8 +644,12 @@
             the request.  If not specified, the client's default is used.
         :param global_request_id: String containing global request ID header
             value (in form "req-<UUID>") to use for the request.
-
-        :raises: InvalidAttribute if there was an error with the clean steps
+        :param deploysteps: The deploy steps as a list of deploy-step
+            dictionaries; each dictionary should have keys 'interface', 'step',
+            'priority', and optional key 'args'. This is optional and is
+            only valid when setting provision-state to 'active' or 'rebuild'.
+        :raises: InvalidAttribute if there was an error with the clean steps or
+            deploy steps
         :returns: The status of the request
         """
 
@@ -671,6 +675,9 @@
         elif rescue_password:
             body['rescue_password'] = rescue_password
 
+        if deploysteps:
+            body['deploy_steps'] = deploysteps
+
         return self.update(path, body, http_method='PUT',
                            os_ironic_api_version=os_ironic_api_version,
                            global_request_id=global_request_id)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/lower-constraints.txt 
new/python-ironicclient-4.6.1/lower-constraints.txt
--- old/python-ironicclient-4.4.0/lower-constraints.txt 2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/lower-constraints.txt 1970-01-01 
01:00:00.000000000 +0100
@@ -1,92 +0,0 @@
-appdirs==1.3.0
-asn1crypto==0.23.0
-Babel==2.3.4
-cffi==1.14.0
-chardet==3.0.4
-cliff==2.8.0
-cmd2==0.8.0
-coverage==4.0
-cryptography==2.7
-ddt==1.0.1
-debtcollector==1.2.0
-decorator==3.4.0
-doc8==0.6.0
-docutils==0.11
-dogpile.cache==0.8.0
-extras==1.0.0
-fasteners==0.7.0
-fixtures==3.0.0
-flake8==2.5.5
-flake8-import-order==0.17.1
-future==0.16.0
-hacking==3.0.0
-idna==2.6
-iso8601==0.1.11
-jmespath==0.9.0
-jsonpatch==1.16
-jsonpointer==1.13
-jsonschema==3.2.0
-keystoneauth1==3.4.0
-linecache2==1.0.0
-mccabe==0.2.1
-monotonic==0.6
-mox3==0.20.0
-msgpack-python==0.4.0
-munch==2.1.0
-netaddr==0.7.18
-netifaces==0.10.4
-openstacksdk==0.18.0
-os-client-config==1.28.0
-os-service-types==1.2.0
-os-testr==1.0.0
-osc-lib==2.0.0
-oslo.concurrency==3.26.0
-oslo.config==5.2.0
-oslo.context==2.19.2
-oslo.i18n==3.15.3
-oslo.log==3.36.0
-oslo.serialization==2.18.0
-oslo.utils==3.33.0
-oslotest==3.2.0
-paramiko==2.0.0
-pbr==2.0.0
-pep8==1.5.7
-positional==1.2.1
-prettytable==0.7.1
-pyasn1==0.1.8
-pycodestyle==2.5.0
-pycparser==2.18
-pyflakes==0.8.1
-Pygments==2.2.0
-pyinotify==0.9.6
-pyOpenSSL==17.1.0
-pyparsing==2.1.0
-pyperclip==1.5.27
-python-cinderclient==3.3.0
-python-dateutil==2.5.3
-python-glanceclient==2.8.0
-python-keystoneclient==3.8.0
-python-mimeparse==1.6.0
-python-novaclient==9.1.0
-python-openstackclient==3.12.0
-python-subunit==1.0.0
-pytz==2013.6
-PyYAML==3.13
-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
-stestr==1.0.0
-stevedore==1.20.0
-tempest==17.1.0
-testrepository==0.0.20
-testtools==2.2.0
-traceback2==1.4.0
-unittest2==1.1.0
-urllib3==1.21.1
-warlock==1.2.0
-wrapt==1.7.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/python_ironicclient.egg-info/PKG-INFO 
new/python-ironicclient-4.6.1/python_ironicclient.egg-info/PKG-INFO
--- old/python-ironicclient-4.4.0/python_ironicclient.egg-info/PKG-INFO 
2020-10-16 11:54:01.000000000 +0200
+++ new/python-ironicclient-4.6.1/python_ironicclient.egg-info/PKG-INFO 
2021-03-12 18:04:50.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: python-ironicclient
-Version: 4.4.0
+Version: 4.6.1
 Summary: OpenStack Bare Metal Provisioning API Client Library
 Home-page: https://docs.openstack.org/python-ironicclient/latest/
 Author: OpenStack
@@ -41,6 +41,7 @@
         
         * Documentation: https://docs.openstack.org/python-ironicclient/latest/
         * Source: https://opendev.org/openstack/python-ironicclient
+        * PyPi: https://pypi.org/project/python-ironicclient
         * Bugs: https://storyboard.openstack.org/#!/project/959
         * Release notes: 
https://docs.openstack.org/releasenotes/python-ironicclient/
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/python_ironicclient.egg-info/SOURCES.txt 
new/python-ironicclient-4.6.1/python_ironicclient.egg-info/SOURCES.txt
--- old/python-ironicclient-4.4.0/python_ironicclient.egg-info/SOURCES.txt      
2020-10-16 11:54:01.000000000 +0200
+++ new/python-ironicclient-4.6.1/python_ironicclient.egg-info/SOURCES.txt      
2021-03-12 18:04:50.000000000 +0100
@@ -5,7 +5,6 @@
 ChangeLog
 LICENSE
 README.rst
-lower-constraints.txt
 requirements.txt
 setup.cfg
 setup.py
@@ -70,6 +69,7 @@
 ironicclient/tests/functional/osc/v1/test_baremetal_node_power_states.py
 ironicclient/tests/functional/osc/v1/test_baremetal_node_provision_states.py
 ironicclient/tests/functional/osc/v1/test_baremetal_port_basic.py
+ironicclient/tests/functional/osc/v1/test_baremetal_port_create.py
 ironicclient/tests/functional/osc/v1/test_baremetal_portgroup_basic.py
 ironicclient/tests/unit/__init__.py
 ironicclient/tests/unit/test_client.py
@@ -147,6 +147,7 @@
 releasenotes/notes/add-chassis_uuid-removal-possibility-5bc0bc3a7953eaa5.yaml
 releasenotes/notes/add-conductor-cli-233249ebc9d5a5f3.yaml
 releasenotes/notes/add-create-command-3df5efbbecc33276.yaml
+releasenotes/notes/add-deploy-steps-arg-0b127e29c8cf976d.yaml
 
releasenotes/notes/add-environment-variable-to-specify-version-cache-timeout-dfa5f6d4af0ea1d3.yaml
 releasenotes/notes/add-events-support-53c461d28abf010b.yaml
 releasenotes/notes/add-is-smartnic-port-attr-ed46d887aec276ed.yaml
@@ -217,6 +218,7 @@
 releasenotes/notes/manual-clean-09f6b49df7d2513f.yaml
 releasenotes/notes/missing-session-cc11e62dc966b4e0.yaml
 releasenotes/notes/negative-wrap-fix-4197e91b2ecfb722.yaml
+releasenotes/notes/no-automated-clean-0e437581ded44eb3.yaml
 releasenotes/notes/no-osc-requirement-411f25fd10f18caa.yaml
 releasenotes/notes/no-resource-attributeerror-d0cb327abab7dcc0.yaml
 releasenotes/notes/node-deploy-step-061e8925dfee3918.yaml
@@ -282,6 +284,7 @@
 releasenotes/notes/version-overrides-4e9ba1266a238c6a.yaml
 releasenotes/notes/vif-attach-port-29a421b245e19f2b.yaml
 releasenotes/notes/wait-for-prov-last-error-5f49b1c488879775.yaml
+releasenotes/notes/yaml-files-79cd8367d7a4c2f2.yaml
 releasenotes/source/conf.py
 releasenotes/source/index.rst
 releasenotes/source/mitaka.rst
@@ -294,6 +297,7 @@
 releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/ussuri.rst
+releasenotes/source/victoria.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
 tools/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/python_ironicclient.egg-info/pbr.json 
new/python-ironicclient-4.6.1/python_ironicclient.egg-info/pbr.json
--- old/python-ironicclient-4.4.0/python_ironicclient.egg-info/pbr.json 
2020-10-16 11:54:01.000000000 +0200
+++ new/python-ironicclient-4.6.1/python_ironicclient.egg-info/pbr.json 
2021-03-12 18:04:50.000000000 +0100
@@ -1 +1 @@
-{"git_version": "2b60460", "is_release": true}
\ No newline at end of file
+{"git_version": "59ffddd", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/python_ironicclient.egg-info/requires.txt 
new/python-ironicclient-4.6.1/python_ironicclient.egg-info/requires.txt
--- old/python-ironicclient-4.4.0/python_ironicclient.egg-info/requires.txt     
2020-10-16 11:54:01.000000000 +0200
+++ new/python-ironicclient-4.6.1/python_ironicclient.egg-info/requires.txt     
2021-03-12 18:04:50.000000000 +0100
@@ -15,13 +15,9 @@
 python-openstackclient>=3.12.0
 
 [test]
-Pygments>=2.2.0
 coverage!=4.4,>=4.0
 ddt>=1.0.1
-doc8>=0.6.0
 fixtures>=3.0.0
-flake8-import-order>=0.17.1
-hacking<3.1.0,>=3.0.0
 oslotest>=3.2.0
 python-openstackclient>=3.12.0
 requests-mock>=1.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/releasenotes/notes/add-deploy-steps-arg-0b127e29c8cf976d.yaml
 
new/python-ironicclient-4.6.1/releasenotes/notes/add-deploy-steps-arg-0b127e29c8cf976d.yaml
--- 
old/python-ironicclient-4.4.0/releasenotes/notes/add-deploy-steps-arg-0b127e29c8cf976d.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-ironicclient-4.6.1/releasenotes/notes/add-deploy-steps-arg-0b127e29c8cf976d.yaml
 2021-03-12 18:03:56.000000000 +0100
@@ -0,0 +1,15 @@
+---
+features:
+  - |
+    Adds support for providing optional deploy steps when deploying or
+    rebuilding; available with ironic-api-version 1.69 or higher. Baremetal CLI
+    is ``baremetal node <provision-state> <node> --deploy-steps
+    <deploy-steps>`` where ``<provision-state>`` is 'deploy' or 'rebuild' and
+    ``<deploy-steps>`` are deploy steps in JSON format. May be path to a file
+    containing deploy steps; OR '-', with the deploy steps being read from
+    standard input; OR a string. The value should be a list of deploy-step
+    dictionaries; each dictionary should have keys 'interface', 'step' and
+    'priority', and optional key 'args'. When overlapping, these steps override
+    deploy template and driver steps. For more information see
+    `Deploy Steps in Node Deployment documentation 
<https://docs.openstack.org/ironic/latest/admin/node-deployment.html#id3>`_.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/releasenotes/notes/no-automated-clean-0e437581ded44eb3.yaml
 
new/python-ironicclient-4.6.1/releasenotes/notes/no-automated-clean-0e437581ded44eb3.yaml
--- 
old/python-ironicclient-4.4.0/releasenotes/notes/no-automated-clean-0e437581ded44eb3.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-ironicclient-4.6.1/releasenotes/notes/no-automated-clean-0e437581ded44eb3.yaml
   2021-03-12 18:03:56.000000000 +0100
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    Following a similar change to ironic, it is now possible to set the node's
+    ``automated_clean`` to False using the new ``--no-automated-clean``
+    argument to ``baremetal node set``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/releasenotes/notes/yaml-files-79cd8367d7a4c2f2.yaml
 
new/python-ironicclient-4.6.1/releasenotes/notes/yaml-files-79cd8367d7a4c2f2.yaml
--- 
old/python-ironicclient-4.4.0/releasenotes/notes/yaml-files-79cd8367d7a4c2f2.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-ironicclient-4.6.1/releasenotes/notes/yaml-files-79cd8367d7a4c2f2.yaml
   2021-03-12 18:03:56.000000000 +0100
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    YAML files are now supported for the ``--network-data``,
+    ``--deploy-steps``, ``--clean-steps`` and ``--target-raid-config``
+    arguments, as well as for the ``--steps`` argument of deploy template
+    commands.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/releasenotes/source/index.rst 
new/python-ironicclient-4.6.1/releasenotes/source/index.rst
--- old/python-ironicclient-4.4.0/releasenotes/source/index.rst 2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/releasenotes/source/index.rst 2021-03-12 
18:03:56.000000000 +0100
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   victoria
    ussuri
    train
    stein
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-ironicclient-4.4.0/releasenotes/source/victoria.rst 
new/python-ironicclient-4.6.1/releasenotes/source/victoria.rst
--- old/python-ironicclient-4.4.0/releasenotes/source/victoria.rst      
1970-01-01 01:00:00.000000000 +0100
+++ new/python-ironicclient-4.6.1/releasenotes/source/victoria.rst      
2021-03-12 18:03:56.000000000 +0100
@@ -0,0 +1,6 @@
+=============================
+Victoria Series Release Notes
+=============================
+
+.. release-notes::
+   :branch: stable/victoria
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/test-requirements.txt 
new/python-ironicclient-4.6.1/test-requirements.txt
--- old/python-ironicclient-4.4.0/test-requirements.txt 2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/test-requirements.txt 2021-03-12 
18:03:56.000000000 +0100
@@ -1,10 +1,7 @@
 # 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.
-hacking>=3.0.0,<3.1.0 # Apache-2.0
 coverage!=4.4,>=4.0 # Apache-2.0
-doc8>=0.6.0 # Apache-2.0
-flake8-import-order>=0.17.1 # LGPLv3
 fixtures>=3.0.0 # Apache-2.0/BSD
 requests-mock>=1.2.0 # Apache-2.0
 oslotest>=3.2.0 # Apache-2.0
@@ -13,5 +10,3 @@
 stestr>=1.0.0 # Apache-2.0
 ddt>=1.0.1 # MIT
 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-ironicclient-4.4.0/tox.ini 
new/python-ironicclient-4.6.1/tox.ini
--- old/python-ironicclient-4.4.0/tox.ini       2020-10-16 11:52:54.000000000 
+0200
+++ new/python-ironicclient-4.6.1/tox.ini       2021-03-12 18:03:56.000000000 
+0100
@@ -1,5 +1,5 @@
 [tox]
-minversion = 3.2.1
+minversion = 3.9.0
 envlist = py3,pep8
 skipsdist = True
 ignore_basepython_conflict=true
@@ -14,7 +14,7 @@
 usedevelop = True
 install_command = pip install {opts} {packages}
 deps =
-    
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
+    
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
     -r{toxinidir}/requirements.txt
     -r{toxinidir}/test-requirements.txt
 commands =
@@ -22,12 +22,17 @@
 
 [testenv:releasenotes]
 deps =
-  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
-  -r{toxinidir}/requirements.txt
+  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
 
 [testenv:pep8]
+deps =
+    hacking>=3.1.0,<4.0.0 # Apache-2.0
+    doc8>=0.6.0 # Apache-2.0
+    flake8-import-order>=0.17.1 # LGPLv3
+    pycodestyle>=2.0.0,<2.7.0 # MIT
+    Pygments>=2.2.0 # BSD
 commands =
     flake8 {posargs}
     doc8 doc/source CONTRIBUTING.rst README.rst
@@ -44,7 +49,7 @@
 
 [testenv:venv]
 deps =
-  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
+  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/test-requirements.txt
   -r{toxinidir}/requirements.txt
   -r{toxinidir}/doc/requirements.txt
@@ -58,8 +63,7 @@
 
 [testenv:docs]
 deps =
-  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
-  -r{toxinidir}/requirements.txt
+  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/doc/requirements.txt
 commands =
   sphinx-build -W -b html doc/source doc/build/html
@@ -87,9 +91,3 @@
 
 [hacking]
 import_exceptions = testtools.matchers, ironicclient.common.i18n
-
-[testenv:lower-constraints]
-deps =
-  -c{toxinidir}/lower-constraints.txt
-  -r{toxinidir}/test-requirements.txt
-  -r{toxinidir}/requirements.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-ironicclient-4.4.0/zuul.d/project.yaml 
new/python-ironicclient-4.6.1/zuul.d/project.yaml
--- old/python-ironicclient-4.4.0/zuul.d/project.yaml   2020-10-16 
11:52:54.000000000 +0200
+++ new/python-ironicclient-4.6.1/zuul.d/project.yaml   2021-03-12 
18:03:56.000000000 +0100
@@ -2,8 +2,7 @@
     templates:
       - check-requirements
       - openstack-cover-jobs
-      - openstack-lower-constraints-jobs
-      - openstack-python3-victoria-jobs
+      - openstack-python3-wallaby-jobs
       - openstackclient-plugin-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3

Reply via email to