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 2022-06-19 21:11:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ironicclient (Old)
and /work/SRC/openSUSE:Factory/.python-ironicclient.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ironicclient"
Sun Jun 19 21:11:42 2022 rev:23 rq:983768 version:4.8.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ironicclient/python-ironicclient.changes
2021-05-10 15:39:35.737511309 +0200
+++
/work/SRC/openSUSE:Factory/.python-ironicclient.new.1548/python-ironicclient.changes
2022-06-19 21:11:59.442226681 +0200
@@ -1,0 +2,20 @@
+Tue Oct 26 22:02:54 UTC 2021 - [email protected]
+
+- update to version 4.8.0
+ - Fix the functional tests
+ - Fix --fields network_data
+ - Fix for missing fonts in PDF jobs
+ - Update master for stable/wallaby
+ - Add lower-constraints job to current development branch
+ - Changed minversion in tox to 3.18.0
+ - Add Python3 xena unit tests
+ - Make baremetal --debug actually work
+ - Add support for 'boot_mode' and 'secure_boot' node resource fields
+ - Add support for changing 'boot_mode' and 'secure_boot' states
+ - setup.cfg: Replace dashes with underscores
+ - Add missing unit tests for provision state commands
+ - Switch testing to Xena testing runtime
+ - Update project conundrum related docs
+ - Include BIOS registry fields in bios setting list command
+
+-------------------------------------------------------------------
Old:
----
python-ironicclient-4.6.1.tar.gz
New:
----
python-ironicclient-4.8.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ironicclient.spec ++++++
--- /var/tmp/diff_new_pack.AMM1vs/_old 2022-06-19 21:11:59.878227330 +0200
+++ /var/tmp/diff_new_pack.AMM1vs/_new 2022-06-19 21:11:59.882227336 +0200
@@ -17,13 +17,13 @@
Name: python-ironicclient
-Version: 4.6.1
+Version: 4.8.0
Release: 0
Summary: Python API and CLI for OpenStack Ironic
License: Apache-2.0
Group: Development/Languages/Python
URL: https://docs.openstack.org/python-ironicclient
-Source0:
https://files.pythonhosted.org/packages/source/p/python-ironicclient/python-ironicclient-4.6.1.tar.gz
+Source0:
https://files.pythonhosted.org/packages/source/p/python-ironicclient/python-ironicclient-4.8.0.tar.gz
BuildRequires: openstack-macros
BuildRequires: python3-Babel
BuildRequires: python3-PyYAML >= 3.13
@@ -56,7 +56,7 @@
Requires: python3-appdirs >= 1.3.0
Requires: python3-dogpile.cache >= 0.8.0
Requires: python3-jsonschema >= 3.2.0
-Requires: python3-keystoneauth1 >= 3.4.0
+Requires: python3-keystoneauth1 >= 3.11.0
Requires: python3-openstackclient
Requires: python3-osc-lib >= 2.0.0
Requires: python3-oslo.i18n
@@ -88,13 +88,13 @@
This package contains auto-generated documentation.
%prep
-%autosetup -p1 -n python-ironicclient-4.6.1
+%autosetup -p1 -n python-ironicclient-4.8.0
%py_req_cleanup
%build
%{py3_build}
-PBR_VERSION=4.6.1 %sphinx_build -b html doc/source doc/build/html
+PBR_VERSION=4.8.0 %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.AMM1vs/_old 2022-06-19 21:11:59.910227377 +0200
+++ /var/tmp/diff_new_pack.AMM1vs/_new 2022-06-19 21:11:59.914227384 +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/wallaby</param>
+ <param
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/master/openstack/python-ironicclient/python-ironicclient.spec.j2</param>
<param name="output-name">python-ironicclient.spec</param>
- <param
name="requirements">https://opendev.org/openstack/python-ironicclient/raw/branch/stable/wallaby/requirements.txt</param>
+ <param
name="requirements">https://opendev.org/openstack/python-ironicclient/raw/branch/stable/xena/requirements.txt</param>
<param name="changelog-email">[email protected]</param>
<param name="changelog-provider">gh,openstack,python-ironicclient</param>
</service>
++++++ python-ironicclient-4.6.1.tar.gz -> python-ironicclient-4.8.0.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/AUTHORS
new/python-ironicclient-4.8.0/AUTHORS
--- old/python-ironicclient-4.6.1/AUTHORS 2021-03-12 18:04:50.000000000
+0100
+++ new/python-ironicclient-4.8.0/AUTHORS 2021-08-31 15:09:07.000000000
+0200
@@ -10,7 +10,9 @@
Arne Wiebalck <[email protected]>
Arun S A G <[email protected]>
Ben Nemec <[email protected]>
+Bob Fournier <[email protected]>
Brad P. Crochet <[email protected]>
+Cenne <[email protected]>
ChangBo Guo(gcb) <[email protected]>
Chaozhe.Chen <[email protected]>
Charles Short <[email protected]>
@@ -134,6 +136,7 @@
Vladyslav Drok <[email protected]>
Vu Cong Tuan <[email protected]>
William Stevenson <[email protected]>
+XinxinShen <[email protected]>
Yang Hongyang <[email protected]>
Yolanda Robla <[email protected]>
Yuiko Takada <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/ChangeLog
new/python-ironicclient-4.8.0/ChangeLog
--- old/python-ironicclient-4.6.1/ChangeLog 2021-03-12 18:04:50.000000000
+0100
+++ new/python-ironicclient-4.8.0/ChangeLog 2021-08-31 15:09:07.000000000
+0200
@@ -1,6 +1,28 @@
CHANGES
=======
+4.8.0
+-----
+
+* Add support for changing 'boot\_mode' and 'secure\_boot' states
+* Add lower-constraints job to current development branch
+* Include BIOS registry fields in bios setting list command
+* Fix for missing fonts in PDF jobs
+* Add support for 'boot\_mode' and 'secure\_boot' node resource fields
+* Changed minversion in tox to 3.18.0
+* Update project conundrum related docs
+* Switch testing to Xena testing runtime
+
+4.7.0
+-----
+
+* setup.cfg: Replace dashes with underscores
+* Make baremetal --debug actually work
+* Fix the functional tests
+* Add Python3 xena unit tests
+* Update master for stable/wallaby
+* Fix --fields network\_data
+
4.6.1
-----
@@ -10,6 +32,7 @@
* Clearer error message when unable to parse JSON
* Support YAML files wherever JSON files are accepted
+* Add missing unit tests for provision state commands
* Update minversion of tox
* Add 'deploy steps' for provisioning API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/PKG-INFO
new/python-ironicclient-4.8.0/PKG-INFO
--- old/python-ironicclient-4.6.1/PKG-INFO 2021-03-12 18:04:51.037501000
+0100
+++ new/python-ironicclient-4.8.0/PKG-INFO 2021-08-31 15:09:07.817825600
+0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: python-ironicclient
-Version: 4.6.1
+Version: 4.8.0
Summary: OpenStack Bare Metal Provisioning API Client Library
Home-page: https://docs.openstack.org/python-ironicclient/latest/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/bindep.txt
new/python-ironicclient-4.8.0/bindep.txt
--- old/python-ironicclient-4.6.1/bindep.txt 1970-01-01 01:00:00.000000000
+0100
+++ new/python-ironicclient-4.8.0/bindep.txt 2021-08-31 15:08:24.000000000
+0200
@@ -0,0 +1,4 @@
+# install fonts missing for PDF job
+# see https://bugs.launchpad.net/openstack-i18n/+bug/1935742
+tex-gyre [platform:dpkg doc]
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/doc/source/contributor/contributing.rst
new/python-ironicclient-4.8.0/doc/source/contributor/contributing.rst
--- old/python-ironicclient-4.6.1/doc/source/contributor/contributing.rst
2021-03-12 18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/doc/source/contributor/contributing.rst
2021-08-31 15:08:24.000000000 +0200
@@ -7,9 +7,9 @@
If you're interested in contributing to the python-ironicclient project,
the following will help get you started.
-#openstack-ironic on Freenode IRC Network
------------------------------------------
-There is a very active chat channel at irc://freenode.net/#openstack-ironic.
+#openstack-ironic on OFTC IRC Network
+-------------------------------------
+There is a very active chat channel at irc://irc.oftc.net/#openstack-ironic.
This is usually the best place to ask questions and find your way around.
IRC stands for Internet Relay Chat and it is a way to chat online in real
time. You can ask a question and come back later to read the answer in the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/ironicclient/common/http.py
new/python-ironicclient-4.8.0/ironicclient/common/http.py
--- old/python-ironicclient-4.6.1/ironicclient/common/http.py 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/common/http.py 2021-08-31
15:08:24.000000000 +0200
@@ -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 = 69
+LAST_KNOWN_API_VERSION = 76
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.6.1/ironicclient/osc/v1/baremetal_node.py
new/python-ironicclient-4.8.0/ironicclient/osc/v1/baremetal_node.py
--- old/python-ironicclient-4.6.1/ironicclient/osc/v1/baremetal_node.py
2021-03-12 18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/osc/v1/baremetal_node.py
2021-08-31 15:08:24.000000000 +0200
@@ -242,6 +242,38 @@
return zip(*sorted(info.items()))
+class BootmodeSetBaremetalNode(command.Command):
+ """Set boot mode for baremetal node"""
+
+ log = logging.getLogger(__name__ + ".BootmodeSetBaremetalNode")
+
+ def get_parser(self, prog_name):
+ parser = super(BootmodeSetBaremetalNode, self).get_parser(prog_name)
+
+ parser.add_argument(
+ 'node',
+ metavar='<node>',
+ help=_("Name or UUID of the node.")
+ )
+ parser.add_argument(
+ 'boot_mode',
+ choices=['uefi', 'bios'],
+ metavar='<boot_mode>',
+ help=_('The boot mode to set for node (uefi/bios)')
+ )
+
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action(%s)", parsed_args)
+
+ baremetal_client = self.app.client_manager.baremetal
+
+ baremetal_client.node.set_boot_mode(
+ parsed_args.node,
+ parsed_args.boot_mode)
+
+
class CleanBaremetalNode(ProvisionStateWithWait):
"""Set provision state of baremetal node to 'clean'"""
@@ -1086,6 +1118,50 @@
return parser
+class SecurebootOnBaremetalNode(command.Command):
+ """Turn secure boot on"""
+
+ log = logging.getLogger(__name__ + ".SecurebootOnBaremetalNode")
+
+ def get_parser(self, prog_name):
+ parser = super(SecurebootOnBaremetalNode, self).get_parser(prog_name)
+
+ parser.add_argument(
+ 'node',
+ metavar='<node>',
+ help=_("Name or UUID of the node")
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action(%s)", parsed_args)
+
+ baremetal_client = self.app.client_manager.baremetal
+ baremetal_client.node.set_secure_boot(parsed_args.node, 'on')
+
+
+class SecurebootOffBaremetalNode(command.Command):
+ """Turn secure boot off"""
+
+ log = logging.getLogger(__name__ + ".SecurebootOffBaremetalNode")
+
+ def get_parser(self, prog_name):
+ parser = super(SecurebootOffBaremetalNode, self).get_parser(prog_name)
+
+ parser.add_argument(
+ 'node',
+ metavar='<node>',
+ help=_("Name or UUID of the node")
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action(%s)", parsed_args)
+
+ baremetal_client = self.app.client_manager.baremetal
+ baremetal_client.node.set_secure_boot(parsed_args.node, 'off')
+
+
class SetBaremetalNode(command.Command):
"""Set baremetal properties"""
@@ -1978,15 +2054,52 @@
metavar='<node>',
help=_("Name or UUID of the node")
)
+ display_group = parser.add_mutually_exclusive_group(required=False)
+ display_group.add_argument(
+ '--long',
+ default=False,
+ help=_("Show detailed information about the BIOS settings."),
+ action='store_true')
+ display_group.add_argument(
+ '--fields',
+ nargs='+',
+ dest='fields',
+ metavar='<field>',
+ action='append',
+ default=[],
+ choices=res_fields.BIOS_DETAILED_RESOURCE.fields,
+ help=_("One or more node fields. Only these fields will be "
+ "fetched from the server. Can not be used when '--long' "
+ "is specified."))
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
labels = res_fields.BIOS_RESOURCE.labels
+ fields = res_fields.BIOS_RESOURCE.fields
+
+ params = {}
+ if parsed_args.long:
+ params['detail'] = parsed_args.long
+ fields = res_fields.BIOS_DETAILED_RESOURCE.fields
+ labels = res_fields.BIOS_DETAILED_RESOURCE.labels
+ elif parsed_args.fields:
+ params['detail'] = False
+ fields = itertools.chain.from_iterable(parsed_args.fields)
+ resource = res_fields.Resource(list(fields))
+ fields = resource.fields
+ labels = resource.labels
+ params['fields'] = fields
+
+ self.log.debug("params(%s)", params)
+
baremetal_client = self.app.client_manager.baremetal
- settings = baremetal_client.node.list_bios_settings(parsed_args.node)
- return (labels, [[s['name'], s['value']] for s in settings])
+ settings = baremetal_client.node.list_bios_settings(parsed_args.node,
+ **params)
+
+ return (labels,
+ (oscutils.get_dict_properties(s, fields) for s in settings))
class BIOSSettingShowBaremetalNode(command.ShowOne):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/ironicclient/shell.py
new/python-ironicclient-4.8.0/ironicclient/shell.py
--- old/python-ironicclient-4.6.1/ironicclient/shell.py 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/shell.py 2021-08-31
15:08:24.000000000 +0200
@@ -19,6 +19,7 @@
import ironic_inspector_client
except ImportError:
ironic_inspector_client = None
+import openstack
from openstack import config as os_config
from osc_lib import utils
import pbr.version
@@ -168,8 +169,25 @@
)
return parser
+ def _configure_ironic_logging(self):
+ openstack.enable_logging(debug=self.options.debug)
+ # NOTE(dtantsur): I wish logging.basicConfig worked.. but it does not.
+ for name in ('ironicclient', 'ironic_inspector_client'):
+ logger = logging.getLogger(name)
+ logger.setLevel(
+ logging.DEBUG if self.options.debug else logging.WARNING)
+ # warnings are already configured by something else, only configure
+ # debug logging for ironic.
+ if not logger.handlers and self.options.debug:
+ handler = logging.StreamHandler()
+ handler.setFormatter(logging.Formatter(
+ # This is the openstacksdk default value
+ '%(asctime)s %(levelname)s: %(name)s %(message)s'))
+ logger.addHandler(handler)
+
def initialize_app(self, argv):
super(App, self).initialize_app(argv)
+ self._configure_ironic_logging()
self.cloud_region = self.config.get_one(argparse=self.options)
# Compatibility with OSC
self.client_manager = ClientManager(self.cloud_region, self.options)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/base.py
new/python-ironicclient-4.8.0/ironicclient/tests/functional/osc/v1/base.py
--- old/python-ironicclient-4.6.1/ironicclient/tests/functional/osc/v1/base.py
2021-03-12 18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/tests/functional/osc/v1/base.py
2021-08-31 15:08:24.000000000 +0200
@@ -41,6 +41,18 @@
def construct_cmd(*parts):
return ' '.join(str(x) for x in parts)
+ @staticmethod
+ def generate_params(argument, params):
+ """Generate parameters string.
+
+ :param argument: argument
+ :param params: values passed with argument
+ """
+ parts = []
+ for key, value in params.items():
+ parts.append('{} {}={}'.format(argument, key, value))
+ return ' '.join(parts)
+
def assert_dict_is_subset(self, expected, actual):
"""Check if expected keys/values exist in actual response body.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/ironicclient/tests/unit/osc/v1/fakes.py
new/python-ironicclient-4.8.0/ironicclient/tests/unit/osc/v1/fakes.py
--- old/python-ironicclient-4.6.1/ironicclient/tests/unit/osc/v1/fakes.py
2021-03-12 18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/tests/unit/osc/v1/fakes.py
2021-08-31 15:08:24.000000000 +0200
@@ -152,6 +152,16 @@
BIOS_SETTINGS = [{'name': 'bios_name_1', 'value': 'bios_value_1', 'links': []},
{'name': 'bios_name_2', 'value': 'bios_value_2', 'links': []}]
+BIOS_DETAILED_SETTINGS = [{'name': 'SysName', 'value': 'my-system',
+ 'links': [], 'attribute_type': 'String',
+ 'min_length': '1', 'max_length': '16'},
+ {'name': 'NumCores', 'value': '10',
+ 'links': [], 'attribute_type': 'Integer',
+ 'lower_bound': '10', 'upper_bound': '20'},
+ {'name': 'ProcVirtualization', 'value': 'Enabled',
+ 'links': [], 'attribute_type': 'Enumeration',
+ 'allowable_values': ['Enabled', 'Disabled']}]
+
baremetal_volume_connector_uuid = 'vvv-cccccc-vvvv'
baremetal_volume_connector_type = 'iqn'
baremetal_volume_connector_connector_id = 'iqn.2017-01.connector'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
new/python-ironicclient-4.8.0/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
---
old/python-ironicclient-4.6.1/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
2021-03-12 18:03:56.000000000 +0100
+++
new/python-ironicclient-4.8.0/ironicclient/tests/unit/osc/v1/test_baremetal_node.py
2021-08-31 15:08:24.000000000 +0200
@@ -15,6 +15,7 @@
#
import copy
+import json
from unittest import mock
from osc_lib.tests import utils as oscutils
@@ -36,6 +37,29 @@
self.baremetal_mock.reset_mock()
+class TestAbort(TestBaremetal):
+ def setUp(self):
+ super(TestAbort, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.AbortBaremetalNode(self.app, None)
+
+ def test_abort(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'abort'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'abort', cleansteps=None, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
class TestAdopt(TestBaremetal):
def setUp(self):
super(TestAdopt, self).setUp()
@@ -109,6 +133,167 @@
poll_interval=2, timeout=0)
+class TestClean(TestBaremetal):
+ def setUp(self):
+ super(TestClean, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.CleanBaremetalNode(self.app, None)
+
+ def test_clean_without_steps(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'clean'),
+ ]
+
+ self.assertRaises(oscutils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
+
+ def test_clean_with_steps(self):
+ steps_dict = {
+ "clean_steps": [{
+ "interface": "raid",
+ "step": "create_configuration",
+ "args": {"create_nonroot_volumes": False}
+ }, {
+ "interface": "deploy",
+ "step": "erase_devices"
+ }]
+ }
+ steps_json = json.dumps(steps_dict)
+
+ arglist = ['--clean-steps', steps_json, 'node_uuid']
+ verifylist = [
+ ('clean_steps', steps_json),
+ ('provision_state', 'clean'),
+ ('node', 'node_uuid'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'clean', cleansteps=steps_dict, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
+class TestInspect(TestBaremetal):
+ def setUp(self):
+ super(TestInspect, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.InspectBaremetalNode(self.app, None)
+
+ def test_inspect(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'inspect'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'inspect', cleansteps=None, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
+class TestManage(TestBaremetal):
+ def setUp(self):
+ super(TestManage, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.ManageBaremetalNode(self.app, None)
+
+ def test_manage(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'manage'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'manage', cleansteps=None, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
+class TestProvide(TestBaremetal):
+ def setUp(self):
+ super(TestProvide, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.ProvideBaremetalNode(self.app, None)
+
+ def test_provide(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'provide'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'provide', cleansteps=None, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
+class TestRebuild(TestBaremetal):
+ def setUp(self):
+ super(TestRebuild, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.RebuildBaremetalNode(self.app, None)
+
+ def test_rebuild(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'rebuild'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'rebuild', cleansteps=None, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
+class TestUndeploy(TestBaremetal):
+ def setUp(self):
+ super(TestUndeploy, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.UndeployBaremetalNode(self.app, None)
+
+ def test_undeploy(self):
+ arglist = ['node_uuid']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('provision_state', 'deleted'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_provision_state.assert_called_once_with(
+ 'node_uuid', 'deleted', cleansteps=None, configdrive=None,
+ deploysteps=None, rescue_password=None)
+
+
class TestBootdeviceSet(TestBaremetal):
def setUp(self):
super(TestBootdeviceSet, self).setUp()
@@ -255,6 +440,69 @@
'node_uuid')
+class TestSecurebootOff(TestBaremetal):
+ def setUp(self):
+ super(TestSecurebootOff, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.SecurebootOffBaremetalNode(self.app, None)
+
+ def test_secure_boot_off(self):
+ arglist = ['node_uuid']
+ verifylist = [('node', 'node_uuid')]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_secure_boot.assert_called_once_with(
+ 'node_uuid', 'off')
+
+
+class TestSecurebootOn(TestBaremetal):
+ def setUp(self):
+ super(TestSecurebootOn, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.SecurebootOnBaremetalNode(self.app, None)
+
+ def test_console_enable(self):
+ arglist = ['node_uuid']
+ verifylist = [('node', 'node_uuid')]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_secure_boot.assert_called_once_with(
+ 'node_uuid', 'on')
+
+
+class TestBootmodeSet(TestBaremetal):
+ def setUp(self):
+ super(TestBootmodeSet, self).setUp()
+
+ # Get the command object to test
+ self.cmd = baremetal_node.BootmodeSetBaremetalNode(self.app, None)
+
+ def test_baremetal_boot_mode_bios(self):
+ arglist = ['node_uuid',
+ 'bios']
+ verifylist = [
+ ('node', 'node_uuid'),
+ ('boot_mode', 'bios'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.baremetal_mock.node.set_boot_mode.assert_called_once_with(
+ 'node_uuid',
+ 'bios'
+ )
+
+
class TestBaremetalCreate(TestBaremetal):
def setUp(self):
super(TestBaremetalCreate, self).setUp()
@@ -635,6 +883,7 @@
'Automated Clean',
'BIOS Interface',
'Boot Interface',
+ 'Boot Mode',
'Chassis UUID',
'Clean Step',
'Conductor',
@@ -662,6 +911,7 @@
'Maintenance Reason',
'Management Interface',
'Name',
+ 'Network Configuration',
'Network Interface',
'Owner',
'Power Interface',
@@ -677,6 +927,7 @@
'Resource Class',
'Retired',
'Retired Reason',
+ 'Secure Boot',
'Storage Interface',
'Target Power State',
'Target Provision State',
@@ -3843,14 +4094,76 @@
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- data = self.cmd.take_action(parsed_args)
+ columns, data = self.cmd.take_action(parsed_args)
self.baremetal_mock.node.list_bios_settings.assert_called_once_with(
'node_uuid')
- expected_data = (('BIOS setting name', 'BIOS setting value'),
- [[s['name'], s['value']]
- for s in baremetal_fakes.BIOS_SETTINGS])
- self.assertEqual(expected_data, data)
+ expected_columns = ('BIOS setting name', 'BIOS setting value')
+ self.assertEqual(expected_columns, columns)
+
+ expected_data = ([(s['name'], s['value'])
+ for s in baremetal_fakes.BIOS_SETTINGS])
+ self.assertEqual(tuple(expected_data), tuple(data))
+
+ def test_baremetal_list_bios_setting_long(self):
+ verifylist = [
+ ('long', True),
+ ]
+
+ arglist = ['node_uuid', '--long']
+ verifylist = [('node', 'node_uuid'), ('long', True)]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.baremetal_mock.node.list_bios_settings.return_value = (
+ baremetal_fakes.BIOS_DETAILED_SETTINGS)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ kwargs = {
+ 'detail': True,
+ }
+
+ self.baremetal_mock.node.list_bios_settings.assert_called_once_with(
+ 'node_uuid', **kwargs)
+ expected_columns = ('Name', 'Value', 'Attribute Type',
+ 'Allowable Values', 'Lower Bound',
+ 'Minimum Length', 'Maximum Length', 'Read Only',
+ 'Reset Required', 'Unique', 'Upper Bound')
+ self.assertEqual(expected_columns, columns)
+
+ expected_data = (('SysName', 'my-system', 'String', '', '', '1', '16',
+ '', '', '', ''),
+ ('NumCores', '10', 'Integer', '', '10', '', '', '',
+ '', '', '20'),
+ ('ProcVirtualization', 'Enabled',
+ 'Enumeration', ['Enabled', 'Disabled'], '', '', '',
+ '', '', '', ''))
+ self.assertEqual(expected_data, tuple(data))
+
+ def test_baremetal_list_bios_setting_fields(self):
+
+ arglist = ['node_uuid', '--fields', 'name', 'attribute_type']
+ verifylist = [
+ ('fields', [['name', 'attribute_type']]),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.baremetal_mock.node.list_bios_settings.return_value = (
+ baremetal_fakes.BIOS_DETAILED_SETTINGS)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ self.assertNotIn('Value', columns)
+ self.assertIn('Name', columns)
+ self.assertIn('Attribute Type', columns)
+
+ kwargs = {
+ 'detail': False,
+ 'fields': ('name', 'attribute_type'),
+ }
+
+ self.baremetal_mock.node.list_bios_settings.assert_called_with(
+ 'node_uuid', **kwargs)
class TestBIOSSettingShow(TestBaremetal):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/ironicclient/tests/unit/v1/test_node.py
new/python-ironicclient-4.8.0/ironicclient/tests/unit/v1/test_node.py
--- old/python-ironicclient-4.6.1/ironicclient/tests/unit/v1/test_node.py
2021-03-12 18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/tests/unit/v1/test_node.py
2021-08-31 15:08:24.000000000 +0200
@@ -86,6 +86,8 @@
NODE_STATES = {"last_error": None,
"power_state": "power on",
+ "boot_mode": "fake-efi",
+ "secure_boot": False,
"provision_state": "active",
"target_power_state": None,
"target_provision_state": None}
@@ -410,6 +412,13 @@
None,
),
},
+ '/v1/nodes/%s/states/boot_mode' % NODE1['uuid']:
+ {
+ 'PUT': (
+ {},
+ None,
+ ),
+ },
'/v1/nodes/%s/states/power' % NODE1['uuid']:
{
'PUT': (
@@ -417,6 +426,13 @@
POWER_STATE,
),
},
+ '/v1/nodes/%s/states/secure_boot' % NODE1['uuid']:
+ {
+ 'PUT': (
+ {},
+ None,
+ ),
+ },
'/v1/nodes/%s/validate' % NODE1['uuid']:
{
'GET': (
@@ -1450,6 +1466,53 @@
self.mgr.set_power_state,
NODE1['uuid'], 'off', soft=False, timeout='a')
+ def test_node_set_boot_mode_bios(self):
+ target_state = 'bios'
+ self.mgr.set_boot_mode(NODE1['uuid'], target_state)
+ body = {'target': target_state}
+ expect = [
+ ('PUT', '/v1/nodes/%s/states/boot_mode' % NODE1['uuid'], {}, body),
+ ]
+ self.assertEqual(expect, self.api.calls)
+
+ def test_node_set_boot_mode_invalid(self):
+ self.assertRaises(ValueError, self.mgr.set_boot_mode,
+ NODE1['uuid'], 'ancient-bios')
+
+ def test_node_set_secure_boot_bool(self):
+ secure_boot = self.mgr.set_secure_boot(NODE1['uuid'], True)
+ body = {'target': True}
+ expect = [
+ ('PUT', '/v1/nodes/%s/states/secure_boot' % NODE1['uuid'],
+ {}, body),
+ ]
+ self.assertEqual(expect, self.api.calls)
+ self.assertIsNone(secure_boot)
+
+ def test_node_set_secure_boot_on(self):
+ secure_boot = self.mgr.set_secure_boot(NODE1['uuid'], 'on')
+ body = {'target': True}
+ expect = [
+ ('PUT', '/v1/nodes/%s/states/secure_boot' % NODE1['uuid'],
+ {}, body),
+ ]
+ self.assertEqual(expect, self.api.calls)
+ self.assertIsNone(secure_boot)
+
+ def test_node_set_secure_boot_off(self):
+ secure_boot = self.mgr.set_secure_boot(NODE1['uuid'], 'off')
+ body = {'target': False}
+ expect = [
+ ('PUT', '/v1/nodes/%s/states/secure_boot' % NODE1['uuid'],
+ {}, body),
+ ]
+ self.assertEqual(expect, self.api.calls)
+ self.assertIsNone(secure_boot)
+
+ def test_node_set_secure_boot_bad(self):
+ self.assertRaises(exc.InvalidAttribute, self.mgr.set_secure_boot,
+ NODE1['uuid'], 'band')
+
def test_set_target_raid_config(self):
self.mgr.set_target_raid_config(
NODE1['uuid'], {'fake': 'config'})
@@ -1606,8 +1669,9 @@
('GET', '/v1/nodes/%s/states' % NODE1['uuid'], {}, None),
]
self.assertEqual(expect, self.api.calls)
- expected_fields = ['last_error', 'power_state', 'provision_state',
- 'target_power_state', 'target_provision_state']
+ expected_fields = ['boot_mode', 'last_error', 'power_state',
+ 'provision_state', 'target_power_state',
+ 'target_provision_state', 'secure_boot']
self.assertEqual(sorted(expected_fields),
sorted(states.to_dict().keys()))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/ironicclient/v1/node.py
new/python-ironicclient-4.8.0/ironicclient/v1/node.py
--- old/python-ironicclient-4.6.1/ironicclient/v1/node.py 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/v1/node.py 2021-08-31
15:08:24.000000000 +0200
@@ -590,6 +590,64 @@
os_ironic_api_version=os_ironic_api_version,
global_request_id=global_request_id)
+ def set_boot_mode(self, node_id, state,
+ os_ironic_api_version=None, global_request_id=None):
+ """Sets boot mode for a node.
+
+ :param node_id: Node identifier
+ :param state: One of target boot modes, 'uefi' or 'bios'
+ :param os_ironic_api_version: String version (e.g. "1.76") to use for
+ 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: ValueError if boot mode is not one of 'uefi' / 'bios'
+ :returns: The status of the request
+ """
+ if state not in ('uefi', 'bios'):
+ raise ValueError(
+ _("Valid boot modes are 'uefi' or 'bios'"))
+
+ path = "%s/states/boot_mode" % node_id
+ target = state
+ body = {'target': target}
+
+ return self.update(path, body, http_method='PUT',
+ os_ironic_api_version=os_ironic_api_version,
+ global_request_id=global_request_id)
+
+ def set_secure_boot(self, node_id, state,
+ os_ironic_api_version=None, global_request_id=None):
+ """Set the secure boot state for the node.
+
+ :param node_id: The UUID of the node.
+ :param state: the secure boot state; either a Boolean or a string
+ representation of a Boolean (eg, 'true', 'on', 'false',
+ 'off'). True to turn secure boot on; False
+ to turn secure boot off.
+ :param os_ironic_api_version: String version (e.g. "1.76") to use for
+ 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 state is an invalid string (that doesn't
+ represent a Boolean).
+ """
+ if isinstance(state, bool):
+ target = state
+ else:
+ try:
+ target = strutils.bool_from_string(state, strict=True)
+ except ValueError as e:
+ raise exc.InvalidAttribute(_("Argument 'state': %(err)s") %
+ {'err': e})
+ path = "%s/states/secure_boot" % node_id
+ body = {'target': target}
+
+ return self.update(path, body, http_method='PUT',
+ os_ironic_api_version=os_ironic_api_version,
+ global_request_id=global_request_id)
+
def set_target_raid_config(
self, node_ident, target_raid_config,
os_ironic_api_version=None, global_request_id=None):
@@ -847,8 +905,8 @@
path, os_ironic_api_version=os_ironic_api_version,
global_request_id=global_request_id).get(name)
- def list_bios_settings(self, node_ident, os_ironic_api_version=None,
- global_request_id=None):
+ def list_bios_settings(self, node_ident, detail=False, fields=None,
+ os_ironic_api_version=None, global_request_id=None):
"""List all BIOS settings from a node.
:param node_ident: node UUID or name.
@@ -856,8 +914,23 @@
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.
+ :param detail: Optional, boolean whether to return detailed information
+ about bios settings.
+ :param fields: Optional, a list with a specified set of fields
+ of the resource to be returned. Can not be used
+ when 'detail' is set.
+
"""
+ if detail and fields:
+ raise exc.InvalidAttribute(_("Can't fetch a subset of fields "
+ "with 'detail' set"))
+
+ filters = utils.common_filters(detail=detail, fields=fields)
path = "%s/bios" % node_ident
+
+ if filters:
+ path += '?' + '&'.join(filters)
+
return self._list_primitives(
self._path(path), 'bios',
os_ironic_api_version=os_ironic_api_version,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/ironicclient/v1/resource_fields.py
new/python-ironicclient-4.8.0/ironicclient/v1/resource_fields.py
--- old/python-ironicclient-4.6.1/ironicclient/v1/resource_fields.py
2021-03-12 18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/ironicclient/v1/resource_fields.py
2021-08-31 15:08:24.000000000 +0200
@@ -34,12 +34,13 @@
'address': 'Address',
'alive': 'Alive',
'allocation_uuid': 'Allocation UUID',
+ 'allowable_values': 'Allowable Values',
'async': 'Async',
+ 'attribute_type': 'Attribute Type',
'automated_clean': 'Automated Clean',
'attach': 'Response is attachment',
- 'bios_name': 'BIOS setting name',
- 'bios_value': 'BIOS setting value',
'boot_index': 'Boot Index',
+ 'boot_mode': 'Boot Mode',
'candidate_nodes': 'Candidate Nodes',
'chassis_uuid': 'Chassis UUID',
'clean_step': 'Clean Step',
@@ -88,9 +89,12 @@
'internal_info': 'Internal Info',
'last_error': 'Last Error',
'lessee': 'Lessee',
+ 'lower_bound': 'Lower Bound',
'maintenance': 'Maintenance',
'maintenance_reason': 'Maintenance Reason',
+ 'max_length': 'Maximum Length',
'fault': 'Fault',
+ 'min_length': 'Minimum Length',
'mode': 'Mode',
'name': 'Name',
'network_data': 'Network Configuration',
@@ -103,10 +107,13 @@
'provision_state': 'Provisioning State',
'provision_updated_at': 'Provision Updated At',
'raid_config': 'Current RAID configuration',
+ 'read_only': 'Read Only',
+ 'reset_required': 'Reset Required',
'reservation': 'Reservation',
'resource_class': 'Resource Class',
'retired': 'Retired',
'retired_reason': 'Retired Reason',
+ 'secure_boot': 'Secure Boot',
'state': 'State',
'steps': 'Steps',
'target_power_state': 'Target Power State',
@@ -116,6 +123,7 @@
'type': 'Type',
'updated_at': 'Updated At',
'uuid': 'UUID',
+ 'value': 'Value',
'volume_id': 'Volume ID',
'volume_type': 'Driver Volume Type',
'local_link_connection': 'Local Link Connection',
@@ -132,6 +140,8 @@
'raid_interface': 'RAID Interface',
'rescue_interface': 'Rescue Interface',
'storage_interface': 'Storage Interface',
+ 'unique': 'Unique',
+ 'upper_bound': 'Upper Bound',
'vendor_interface': 'Vendor Interface',
'standalone_ports_supported': 'Standalone Ports Supported',
'physical_network': 'Physical Network',
@@ -223,6 +233,7 @@
'automated_clean',
'bios_interface',
'boot_interface',
+ 'boot_mode',
'chassis_uuid',
'clean_step',
'conductor',
@@ -250,6 +261,7 @@
'maintenance_reason',
'management_interface',
'name',
+ 'network_data',
'network_interface',
'owner',
'power_interface',
@@ -265,6 +277,7 @@
'resource_class',
'retired',
'retired_reason',
+ 'secure_boot',
'storage_interface',
'target_power_state',
'target_provision_state',
@@ -376,7 +389,24 @@
)
BIOS_RESOURCE = Resource(
- ['bios_name', 'bios_value'],
+ ['name', 'value'],
+ override_labels={'name': 'BIOS setting name',
+ 'value': 'BIOS setting value'}
+)
+
+BIOS_DETAILED_RESOURCE = Resource(
+ ['name',
+ 'value',
+ 'attribute_type',
+ 'allowable_values',
+ 'lower_bound',
+ 'min_length',
+ 'max_length',
+ 'read_only',
+ 'reset_required',
+ 'unique',
+ 'upper_bound'
+ ],
)
# Drivers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/lower-constraints.txt
new/python-ironicclient-4.8.0/lower-constraints.txt
--- old/python-ironicclient-4.6.1/lower-constraints.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/python-ironicclient-4.8.0/lower-constraints.txt 2021-08-31
15:08:24.000000000 +0200
@@ -0,0 +1,25 @@
+PyYAML==3.13
+appdirs==1.3.0
+cliff==2.8.0
+coverage==4.0
+ddt==1.0.1
+dogpile.cache==0.8.0
+fixtures==3.0.0
+jsonschema==3.2.0
+keystoneauth1==3.11.0
+openstacksdk==0.18.0
+osc-lib==2.0.0
+oslo.config==6.3.0
+oslo.log==3.36.0
+oslo.utils==3.33.0
+oslotest==3.2.0
+pbr==2.0.0
+python-cinderclient==7.2.1
+python-novaclient==9.0.0
+python-openstackclient==3.12.0
+requests-mock==1.2.0
+requests==2.14.2
+stestr==1.0.0
+stevedore==1.20.0
+tempest==25.0.0
+testtools==2.2.0
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/python_ironicclient.egg-info/PKG-INFO
new/python-ironicclient-4.8.0/python_ironicclient.egg-info/PKG-INFO
--- old/python-ironicclient-4.6.1/python_ironicclient.egg-info/PKG-INFO
2021-03-12 18:04:50.000000000 +0100
+++ new/python-ironicclient-4.8.0/python_ironicclient.egg-info/PKG-INFO
2021-08-31 15:09:07.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: python-ironicclient
-Version: 4.6.1
+Version: 4.8.0
Summary: OpenStack Bare Metal Provisioning API Client Library
Home-page: https://docs.openstack.org/python-ironicclient/latest/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/python_ironicclient.egg-info/SOURCES.txt
new/python-ironicclient-4.8.0/python_ironicclient.egg-info/SOURCES.txt
--- old/python-ironicclient-4.6.1/python_ironicclient.egg-info/SOURCES.txt
2021-03-12 18:04:50.000000000 +0100
+++ new/python-ironicclient-4.8.0/python_ironicclient.egg-info/SOURCES.txt
2021-08-31 15:09:07.000000000 +0200
@@ -5,6 +5,8 @@
ChangeLog
LICENSE
README.rst
+bindep.txt
+lower-constraints.txt
requirements.txt
setup.cfg
setup.py
@@ -144,6 +146,7 @@
releasenotes/notes/SHA1-hash-auth-token-f8dce46f854c002c.yaml
releasenotes/notes/accept-valid_interfaces-3b8f5e3e362e04cd.yaml
releasenotes/notes/add-allocation-owner-0c6daad4ebfea5e6.yaml
+releasenotes/notes/add-bios-registry-in-list-21974873f146aff7.yaml
releasenotes/notes/add-chassis_uuid-removal-possibility-5bc0bc3a7953eaa5.yaml
releasenotes/notes/add-conductor-cli-233249ebc9d5a5f3.yaml
releasenotes/notes/add-create-command-3df5efbbecc33276.yaml
@@ -155,6 +158,8 @@
releasenotes/notes/add-network-data-node-attr-81dec9cecb7491b9.yaml
releasenotes/notes/add-neutron-integration-fields-cee7596c49722de6.yaml
releasenotes/notes/add-no-retired-opt-403bb5e466e4facb.yaml
+releasenotes/notes/add-node-boot-mode-08ac768649a2fc93.yaml
+releasenotes/notes/add-node-boot-mode-set-9746b45aa3f80fe8.yaml
releasenotes/notes/add-node-description-support-6efd0882eaa0c788.yaml
releasenotes/notes/add-node-lessee-c36409eb0415f75d.yaml
releasenotes/notes/add-node-owner-c2dce5a6075ce2b7.yaml
@@ -189,6 +194,7 @@
releasenotes/notes/conductor-group-9cfab3756aa108e4.yaml
releasenotes/notes/configdrive-7bd2b67830691b2e.yaml
releasenotes/notes/continue-del-next-node-8827e67e1c41a0a5.yaml
+releasenotes/notes/debug-e9dd680d783fa4b6.yaml
releasenotes/notes/deploy-templates-df354ce825b00430.yaml
releasenotes/notes/deprecate-http-client-8d664e5ec50ec403.yaml
releasenotes/notes/deprecate-ironic-cli-686b7a238ddf3e25.yaml
@@ -218,6 +224,7 @@
releasenotes/notes/manual-clean-09f6b49df7d2513f.yaml
releasenotes/notes/missing-session-cc11e62dc966b4e0.yaml
releasenotes/notes/negative-wrap-fix-4197e91b2ecfb722.yaml
+releasenotes/notes/network_data-c48b3878a5b04df5.yaml
releasenotes/notes/no-automated-clean-0e437581ded44eb3.yaml
releasenotes/notes/no-osc-requirement-411f25fd10f18caa.yaml
releasenotes/notes/no-resource-attributeerror-d0cb327abab7dcc0.yaml
@@ -298,6 +305,7 @@
releasenotes/source/unreleased.rst
releasenotes/source/ussuri.rst
releasenotes/source/victoria.rst
+releasenotes/source/wallaby.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.6.1/python_ironicclient.egg-info/entry_points.txt
new/python-ironicclient-4.8.0/python_ironicclient.egg-info/entry_points.txt
--- old/python-ironicclient-4.6.1/python_ironicclient.egg-info/entry_points.txt
2021-03-12 18:04:50.000000000 +0100
+++ new/python-ironicclient-4.8.0/python_ironicclient.egg-info/entry_points.txt
2021-08-31 15:09:07.000000000 +0200
@@ -36,6 +36,7 @@
baremetal_node_bios_setting_show =
ironicclient.osc.v1.baremetal_node:BIOSSettingShowBaremetalNode
baremetal_node_boot_device_set =
ironicclient.osc.v1.baremetal_node:BootdeviceSetBaremetalNode
baremetal_node_boot_device_show =
ironicclient.osc.v1.baremetal_node:BootdeviceShowBaremetalNode
+baremetal_node_boot_mode_set =
ironicclient.osc.v1.baremetal_node:BootmodeSetBaremetalNode
baremetal_node_clean = ironicclient.osc.v1.baremetal_node:CleanBaremetalNode
baremetal_node_console_disable =
ironicclient.osc.v1.baremetal_node:ConsoleDisableBaremetalNode
baremetal_node_console_enable =
ironicclient.osc.v1.baremetal_node:ConsoleEnableBaremetalNode
@@ -58,6 +59,8 @@
baremetal_node_rebuild =
ironicclient.osc.v1.baremetal_node:RebuildBaremetalNode
baremetal_node_remove_trait =
ironicclient.osc.v1.baremetal_node:RemoveTraitBaremetalNode
baremetal_node_rescue = ironicclient.osc.v1.baremetal_node:RescueBaremetalNode
+baremetal_node_secure_boot_off =
ironicclient.osc.v1.baremetal_node:SecurebootOffBaremetalNode
+baremetal_node_secure_boot_on =
ironicclient.osc.v1.baremetal_node:SecurebootOnBaremetalNode
baremetal_node_set = ironicclient.osc.v1.baremetal_node:SetBaremetalNode
baremetal_node_show = ironicclient.osc.v1.baremetal_node:ShowBaremetalNode
baremetal_node_trait_list =
ironicclient.osc.v1.baremetal_node:ListTraitsBaremetalNode
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/python_ironicclient.egg-info/pbr.json
new/python-ironicclient-4.8.0/python_ironicclient.egg-info/pbr.json
--- old/python-ironicclient-4.6.1/python_ironicclient.egg-info/pbr.json
2021-03-12 18:04:50.000000000 +0100
+++ new/python-ironicclient-4.8.0/python_ironicclient.egg-info/pbr.json
2021-08-31 15:09:07.000000000 +0200
@@ -1 +1 @@
-{"git_version": "59ffddd", "is_release": true}
\ No newline at end of file
+{"git_version": "b5df386", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/python_ironicclient.egg-info/requires.txt
new/python-ironicclient-4.8.0/python_ironicclient.egg-info/requires.txt
--- old/python-ironicclient-4.6.1/python_ironicclient.egg-info/requires.txt
2021-03-12 18:04:50.000000000 +0100
+++ new/python-ironicclient-4.8.0/python_ironicclient.egg-info/requires.txt
2021-08-31 15:09:07.000000000 +0200
@@ -3,7 +3,7 @@
cliff!=2.9.0,>=2.8.0
dogpile.cache>=0.8.0
jsonschema>=3.2.0
-keystoneauth1>=3.4.0
+keystoneauth1>=3.11.0
openstacksdk>=0.18.0
osc-lib>=2.0.0
oslo.utils>=3.33.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/notes/add-bios-registry-in-list-21974873f146aff7.yaml
new/python-ironicclient-4.8.0/releasenotes/notes/add-bios-registry-in-list-21974873f146aff7.yaml
---
old/python-ironicclient-4.6.1/releasenotes/notes/add-bios-registry-in-list-21974873f146aff7.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-ironicclient-4.8.0/releasenotes/notes/add-bios-registry-in-list-21974873f146aff7.yaml
2021-08-31 15:08:24.000000000 +0200
@@ -0,0 +1,8 @@
+---
+features:
+ - |
+ Adds new params to the ``baremetal node bios setting list`` command to
+ include support for the BIOS registry. The ``--long`` option will
+ retrieve and display the additonal BIOS registry fields, the ``--fields``
+ option will retrieve and display selected fields. The ``baremetal node
+ bios setting show`` includes these fields by default with no changes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/notes/add-node-boot-mode-08ac768649a2fc93.yaml
new/python-ironicclient-4.8.0/releasenotes/notes/add-node-boot-mode-08ac768649a2fc93.yaml
---
old/python-ironicclient-4.6.1/releasenotes/notes/add-node-boot-mode-08ac768649a2fc93.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-ironicclient-4.8.0/releasenotes/notes/add-node-boot-mode-08ac768649a2fc93.yaml
2021-08-31 15:08:24.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Adds support to display node fields ``boot_mode`` and ``secure_boot``
+ which are introduced in API 1.75.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/notes/add-node-boot-mode-set-9746b45aa3f80fe8.yaml
new/python-ironicclient-4.8.0/releasenotes/notes/add-node-boot-mode-set-9746b45aa3f80fe8.yaml
---
old/python-ironicclient-4.6.1/releasenotes/notes/add-node-boot-mode-set-9746b45aa3f80fe8.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-ironicclient-4.8.0/releasenotes/notes/add-node-boot-mode-set-9746b45aa3f80fe8.yaml
2021-08-31 15:08:24.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Adds support for changing node states ``boot_mode`` and ``secure_boot``
+ in sync with functionality introduced in API 1.76.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/notes/debug-e9dd680d783fa4b6.yaml
new/python-ironicclient-4.8.0/releasenotes/notes/debug-e9dd680d783fa4b6.yaml
---
old/python-ironicclient-4.6.1/releasenotes/notes/debug-e9dd680d783fa4b6.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-ironicclient-4.8.0/releasenotes/notes/debug-e9dd680d783fa4b6.yaml
2021-08-31 15:08:24.000000000 +0200
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ The ``--debug`` option now works correctly with the built-in ``baremetal``
+ command line tool.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/notes/network_data-c48b3878a5b04df5.yaml
new/python-ironicclient-4.8.0/releasenotes/notes/network_data-c48b3878a5b04df5.yaml
---
old/python-ironicclient-4.6.1/releasenotes/notes/network_data-c48b3878a5b04df5.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-ironicclient-4.8.0/releasenotes/notes/network_data-c48b3878a5b04df5.yaml
2021-08-31 15:08:24.000000000 +0200
@@ -0,0 +1,4 @@
+---
+fixes:
+ - |
+ Fixes using ``network_data`` with the ``--fields`` parameter.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/source/index.rst
new/python-ironicclient-4.8.0/releasenotes/source/index.rst
--- old/python-ironicclient-4.6.1/releasenotes/source/index.rst 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/releasenotes/source/index.rst 2021-08-31
15:08:24.000000000 +0200
@@ -6,6 +6,7 @@
:maxdepth: 1
unreleased
+ wallaby
victoria
ussuri
train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-ironicclient-4.6.1/releasenotes/source/wallaby.rst
new/python-ironicclient-4.8.0/releasenotes/source/wallaby.rst
--- old/python-ironicclient-4.6.1/releasenotes/source/wallaby.rst
1970-01-01 01:00:00.000000000 +0100
+++ new/python-ironicclient-4.8.0/releasenotes/source/wallaby.rst
2021-08-31 15:08:24.000000000 +0200
@@ -0,0 +1,6 @@
+============================
+Wallaby Series Release Notes
+============================
+
+.. release-notes::
+ :branch: stable/wallaby
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/requirements.txt
new/python-ironicclient-4.8.0/requirements.txt
--- old/python-ironicclient-4.6.1/requirements.txt 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/requirements.txt 2021-08-31
15:08:24.000000000 +0200
@@ -6,7 +6,7 @@
cliff!=2.9.0,>=2.8.0 # Apache-2.0
dogpile.cache>=0.8.0 # BSD
jsonschema>=3.2.0 # MIT
-keystoneauth1>=3.4.0 # Apache-2.0
+keystoneauth1>=3.11.0 # Apache-2.0
openstacksdk>=0.18.0 # Apache-2.0
osc-lib>=2.0.0 # Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/setup.cfg
new/python-ironicclient-4.8.0/setup.cfg
--- old/python-ironicclient-4.6.1/setup.cfg 2021-03-12 18:04:51.041501000
+0100
+++ new/python-ironicclient-4.8.0/setup.cfg 2021-08-31 15:09:07.817825600
+0200
@@ -1,11 +1,11 @@
[metadata]
name = python-ironicclient
summary = OpenStack Bare Metal Provisioning API Client Library
-description-file = README.rst
+description_file = README.rst
author = OpenStack
-author-email = [email protected]
-home-page = https://docs.openstack.org/python-ironicclient/latest/
-python-requires = >=3.6
+author_email = [email protected]
+home_page = https://docs.openstack.org/python-ironicclient/latest/
+python_requires = >=3.6
classifier =
Environment :: OpenStack
Intended Audience :: Information Technology
@@ -61,6 +61,7 @@
baremetal_node_bios_setting_show =
ironicclient.osc.v1.baremetal_node:BIOSSettingShowBaremetalNode
baremetal_node_boot_device_set =
ironicclient.osc.v1.baremetal_node:BootdeviceSetBaremetalNode
baremetal_node_boot_device_show =
ironicclient.osc.v1.baremetal_node:BootdeviceShowBaremetalNode
+ baremetal_node_boot_mode_set =
ironicclient.osc.v1.baremetal_node:BootmodeSetBaremetalNode
baremetal_node_clean =
ironicclient.osc.v1.baremetal_node:CleanBaremetalNode
baremetal_node_console_disable =
ironicclient.osc.v1.baremetal_node:ConsoleDisableBaremetalNode
baremetal_node_console_enable =
ironicclient.osc.v1.baremetal_node:ConsoleEnableBaremetalNode
@@ -82,6 +83,8 @@
baremetal_node_rebuild =
ironicclient.osc.v1.baremetal_node:RebuildBaremetalNode
baremetal_node_remove_trait =
ironicclient.osc.v1.baremetal_node:RemoveTraitBaremetalNode
baremetal_node_rescue =
ironicclient.osc.v1.baremetal_node:RescueBaremetalNode
+ baremetal_node_secure_boot_on =
ironicclient.osc.v1.baremetal_node:SecurebootOnBaremetalNode
+ baremetal_node_secure_boot_off =
ironicclient.osc.v1.baremetal_node:SecurebootOffBaremetalNode
baremetal_node_set = ironicclient.osc.v1.baremetal_node:SetBaremetalNode
baremetal_node_show =
ironicclient.osc.v1.baremetal_node:ShowBaremetalNode
baremetal_node_trait_list =
ironicclient.osc.v1.baremetal_node:ListTraitsBaremetalNode
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/tox.ini
new/python-ironicclient-4.8.0/tox.ini
--- old/python-ironicclient-4.6.1/tox.ini 2021-03-12 18:03:56.000000000
+0100
+++ new/python-ironicclient-4.8.0/tox.ini 2021-08-31 15:08:24.000000000
+0200
@@ -1,5 +1,5 @@
[tox]
-minversion = 3.9.0
+minversion = 3.18.0
envlist = py3,pep8
skipsdist = True
ignore_basepython_conflict=true
@@ -69,7 +69,7 @@
sphinx-build -W -b html doc/source doc/build/html
[testenv:pdf-docs]
-whitelist_externals = make
+allowlist_externals = make
deps = {[testenv:docs]deps}
commands =
sphinx-build -W -b latex doc/source doc/build/pdf
@@ -91,3 +91,9 @@
[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.6.1/zuul.d/ironicclient-jobs.yaml
new/python-ironicclient-4.8.0/zuul.d/ironicclient-jobs.yaml
--- old/python-ironicclient-4.6.1/zuul.d/ironicclient-jobs.yaml 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/zuul.d/ironicclient-jobs.yaml 2021-08-31
15:08:24.000000000 +0200
@@ -5,7 +5,6 @@
- ^.*\.rst$
- ^doc/.*$
- ^ironicclient/locale/.*$
- - ^ironicclient/tests/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^tools/.*$
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-ironicclient-4.6.1/zuul.d/project.yaml
new/python-ironicclient-4.8.0/zuul.d/project.yaml
--- old/python-ironicclient-4.6.1/zuul.d/project.yaml 2021-03-12
18:03:56.000000000 +0100
+++ new/python-ironicclient-4.8.0/zuul.d/project.yaml 2021-08-31
15:08:24.000000000 +0200
@@ -2,7 +2,8 @@
templates:
- check-requirements
- openstack-cover-jobs
- - openstack-python3-wallaby-jobs
+ - openstack-lower-constraints-master-branch-jobs
+ - openstack-python3-xena-jobs
- openstackclient-plugin-jobs
- publish-openstack-docs-pti
- release-notes-jobs-python3