diff options
-rw-r--r-- | ironic/api/acl.py | 2 | ||||
-rw-r--r-- | ironic/common/rpc.py | 14 | ||||
-rw-r--r-- | ironic/conductor/manager.py | 10 | ||||
-rw-r--r-- | ironic/drivers/modules/irmc/management.py | 5 | ||||
-rw-r--r-- | ironic/objects/utils.py | 3 | ||||
-rw-r--r-- | ironic/tests/cmd/__init__.py | 0 | ||||
-rw-r--r-- | ironic/tests/cmd/test_dbsync.py (renamed from ironic/tests/test_dbsync.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/__init__.py | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_disk_partitioner.py (renamed from ironic/tests/test_disk_partitioner.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_driver_factory.py (renamed from ironic/tests/test_driver_factory.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_exception.py (renamed from ironic/tests/test_exception.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_fsm.py (renamed from ironic/tests/test_fsm.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_glance_service.py (renamed from ironic/tests/test_glance_service.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_hash_ring.py (renamed from ironic/tests/test_hash_ring.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_image_service.py (renamed from ironic/tests/test_image_service.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_images.py (renamed from ironic/tests/test_images.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_keystone.py (renamed from ironic/tests/test_keystone.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_network.py (renamed from ironic/tests/test_network.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_policy.py (renamed from ironic/tests/test_policy.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_pxe_utils.py (renamed from ironic/tests/test_pxe_utils.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_raid.py (renamed from ironic/tests/test_raid.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_states.py (renamed from ironic/tests/test_states.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_swift.py (renamed from ironic/tests/test_swift.py) | 0 | ||||
-rw-r--r-- | ironic/tests/common/test_utils.py (renamed from ironic/tests/test_utils.py) | 0 | ||||
-rw-r--r-- | ironic/tests/drivers/irmc/test_management.py | 9 | ||||
-rw-r--r-- | ironic/tests/drivers/third_party_driver_mock_specs.py | 1 | ||||
-rw-r--r-- | ironic/tests/objects/test_objects.py | 16 | ||||
-rw-r--r-- | requirements.txt | 2 |
28 files changed, 28 insertions, 34 deletions
diff --git a/ironic/api/acl.py b/ironic/api/acl.py index 5d839a221..ef5532b0c 100644 --- a/ironic/api/acl.py +++ b/ironic/api/acl.py @@ -22,7 +22,7 @@ from ironic.api.middleware import auth_token def install(app, conf, public_routes): """Install ACL check on application. - :param app: A WSGI applicatin. + :param app: A WSGI application. :param conf: Settings. Dict'ified and passed to keystonemiddleware :param public_routes: The list of the routes which will be allowed to access without authentication. diff --git a/ironic/common/rpc.py b/ironic/common/rpc.py index 19b929b08..f6455c192 100644 --- a/ironic/common/rpc.py +++ b/ironic/common/rpc.py @@ -13,20 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -__all__ = [ - 'init', - 'cleanup', - 'set_defaults', - 'add_extra_exmods', - 'clear_extra_exmods', - 'get_allowed_exmods', - 'RequestContextSerializer', - 'get_client', - 'get_server', - 'get_notifier', - 'TRANSPORT_ALIASES', -] - from oslo_config import cfg import oslo_messaging as messaging from oslo_serialization import jsonutils diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index c2f5b0276..44d1ba8c7 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -2049,7 +2049,7 @@ def do_node_deploy(task, conductor_id, configdrive=None): # NOTE(deva): there is no need to clear conductor_affinity task.process_event('fail') args = {'node': task.node.uuid, 'err': e} - LOG.warning(logmsg, args) + LOG.error(logmsg, args) node.last_error = errmsg % e try: @@ -2060,7 +2060,7 @@ def do_node_deploy(task, conductor_id, configdrive=None): with excutils.save_and_reraise_exception(): handle_failure( e, task, - _LW('Error while uploading the configdrive for ' + _LE('Error while uploading the configdrive for ' '%(node)s to Swift'), _('Failed to upload the configdrive to Swift. ' 'Error: %s')) @@ -2071,7 +2071,7 @@ def do_node_deploy(task, conductor_id, configdrive=None): with excutils.save_and_reraise_exception(): handle_failure( e, task, - _LW('Error while preparing to deploy to node %(node)s: ' + _LE('Error while preparing to deploy to node %(node)s: ' '%(err)s'), _("Failed to prepare to deploy. Error: %s")) @@ -2081,7 +2081,7 @@ def do_node_deploy(task, conductor_id, configdrive=None): with excutils.save_and_reraise_exception(): handle_failure( e, task, - _LW('Error in deploy of node %(node)s: %(err)s'), + _LE('Error in deploy of node %(node)s: %(err)s'), _("Failed to deploy. Error: %s")) # Update conductor_affinity to reference this conductor's ID @@ -2283,7 +2283,7 @@ def _do_inspect_hardware(task): def cleaning_error_handler(task, msg, tear_down_cleaning=True): """Put a failed node in CLEANFAIL or ZAPFAIL and maintenance.""" # Reset clean step, msg should include current step - if task.node.provision_state == states.CLEANING: + if task.node.provision_state in (states.CLEANING, states.CLEANWAIT): task.node.clean_step = {} task.node.last_error = msg task.node.maintenance = True diff --git a/ironic/drivers/modules/irmc/management.py b/ironic/drivers/modules/irmc/management.py index b51e20e10..077ebf7e5 100644 --- a/ironic/drivers/modules/irmc/management.py +++ b/ironic/drivers/modules/irmc/management.py @@ -57,7 +57,10 @@ def _get_sensors_data(task): report = irmc_common.get_irmc_report(task.node) sensor = scci.get_sensor_data(report) - except Exception as e: + except (exception.InvalidParameterValue, + exception.MissingParameterValue, + scci.SCCIInvalidInputError, + scci.SCCIClientError) as e: LOG.error(_LE("SCCI get sensor data failed for node %(node_id)s " "with the following error: %(error)s"), {'node_id': task.node.uuid, 'error': e}) diff --git a/ironic/objects/utils.py b/ironic/objects/utils.py index 1edc07d89..f732d731f 100644 --- a/ironic/objects/utils.py +++ b/ironic/objects/utils.py @@ -13,6 +13,7 @@ # under the License. """Utility methods for objects""" +from datetime import datetime from oslo_utils import timeutils @@ -21,7 +22,7 @@ def dt_serializer(name): """Return a datetime serializer for a named attribute.""" def serializer(self, name=name): if getattr(self, name) is not None: - return timeutils.isotime(getattr(self, name)) + return datetime.isoformat(getattr(self, name)) else: return None return serializer diff --git a/ironic/tests/cmd/__init__.py b/ironic/tests/cmd/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/ironic/tests/cmd/__init__.py diff --git a/ironic/tests/test_dbsync.py b/ironic/tests/cmd/test_dbsync.py index 2b68b0bd0..2b68b0bd0 100644 --- a/ironic/tests/test_dbsync.py +++ b/ironic/tests/cmd/test_dbsync.py diff --git a/ironic/tests/common/__init__.py b/ironic/tests/common/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/ironic/tests/common/__init__.py diff --git a/ironic/tests/test_disk_partitioner.py b/ironic/tests/common/test_disk_partitioner.py index 4badcdbf7..4badcdbf7 100644 --- a/ironic/tests/test_disk_partitioner.py +++ b/ironic/tests/common/test_disk_partitioner.py diff --git a/ironic/tests/test_driver_factory.py b/ironic/tests/common/test_driver_factory.py index 8cc49e46d..8cc49e46d 100644 --- a/ironic/tests/test_driver_factory.py +++ b/ironic/tests/common/test_driver_factory.py diff --git a/ironic/tests/test_exception.py b/ironic/tests/common/test_exception.py index c4dee6045..c4dee6045 100644 --- a/ironic/tests/test_exception.py +++ b/ironic/tests/common/test_exception.py diff --git a/ironic/tests/test_fsm.py b/ironic/tests/common/test_fsm.py index ab0f8fc3c..ab0f8fc3c 100644 --- a/ironic/tests/test_fsm.py +++ b/ironic/tests/common/test_fsm.py diff --git a/ironic/tests/test_glance_service.py b/ironic/tests/common/test_glance_service.py index ce255283a..ce255283a 100644 --- a/ironic/tests/test_glance_service.py +++ b/ironic/tests/common/test_glance_service.py diff --git a/ironic/tests/test_hash_ring.py b/ironic/tests/common/test_hash_ring.py index ac448480f..ac448480f 100644 --- a/ironic/tests/test_hash_ring.py +++ b/ironic/tests/common/test_hash_ring.py diff --git a/ironic/tests/test_image_service.py b/ironic/tests/common/test_image_service.py index b06ac5cd1..b06ac5cd1 100644 --- a/ironic/tests/test_image_service.py +++ b/ironic/tests/common/test_image_service.py diff --git a/ironic/tests/test_images.py b/ironic/tests/common/test_images.py index d94888324..d94888324 100644 --- a/ironic/tests/test_images.py +++ b/ironic/tests/common/test_images.py diff --git a/ironic/tests/test_keystone.py b/ironic/tests/common/test_keystone.py index f3e3b4cbb..f3e3b4cbb 100644 --- a/ironic/tests/test_keystone.py +++ b/ironic/tests/common/test_keystone.py diff --git a/ironic/tests/test_network.py b/ironic/tests/common/test_network.py index 77c8f2f41..77c8f2f41 100644 --- a/ironic/tests/test_network.py +++ b/ironic/tests/common/test_network.py diff --git a/ironic/tests/test_policy.py b/ironic/tests/common/test_policy.py index 231541468..231541468 100644 --- a/ironic/tests/test_policy.py +++ b/ironic/tests/common/test_policy.py diff --git a/ironic/tests/test_pxe_utils.py b/ironic/tests/common/test_pxe_utils.py index db8d866be..db8d866be 100644 --- a/ironic/tests/test_pxe_utils.py +++ b/ironic/tests/common/test_pxe_utils.py diff --git a/ironic/tests/test_raid.py b/ironic/tests/common/test_raid.py index 6e76ef075..6e76ef075 100644 --- a/ironic/tests/test_raid.py +++ b/ironic/tests/common/test_raid.py diff --git a/ironic/tests/test_states.py b/ironic/tests/common/test_states.py index 8b38fa504..8b38fa504 100644 --- a/ironic/tests/test_states.py +++ b/ironic/tests/common/test_states.py diff --git a/ironic/tests/test_swift.py b/ironic/tests/common/test_swift.py index 43e3ef033..43e3ef033 100644 --- a/ironic/tests/test_swift.py +++ b/ironic/tests/common/test_swift.py diff --git a/ironic/tests/test_utils.py b/ironic/tests/common/test_utils.py index 30f51456e..30f51456e 100644 --- a/ironic/tests/test_utils.py +++ b/ironic/tests/common/test_utils.py diff --git a/ironic/tests/drivers/irmc/test_management.py b/ironic/tests/drivers/irmc/test_management.py index 6a582849d..2b8dde515 100644 --- a/ironic/tests/drivers/irmc/test_management.py +++ b/ironic/tests/drivers/irmc/test_management.py @@ -281,12 +281,15 @@ class IRMCManagementTestCase(db_base.DbTestCase): @mock.patch.object(irmc_common, 'get_irmc_report', spec_set=True, autospec=True) - def test_management_interface_get_sensors_data_exception1( + def test_management_interface_get_sensors_data_exception( self, get_irmc_report_mock): """'FailedToGetSensorData Exception.""" - get_irmc_report_mock.side_effect = iter([Exception("Report Error")]) + get_irmc_report_mock.side_effect = exception.InvalidParameterValue( + "Fake Error") + irmc_management.scci.SCCIInvalidInputError = Exception + irmc_management.scci.SCCIClientError = Exception with task_manager.acquire(self.context, self.node.uuid) as task: task.node.driver_info['irmc_sensor_method'] = 'scci' @@ -294,5 +297,5 @@ class IRMCManagementTestCase(db_base.DbTestCase): self.driver.management.get_sensors_data, task) self.assertEqual("Failed to get sensor data for node 1be26c0b-" + - "03f2-4d2e-ae87-c02d7f33c123. Error: Report Error", + "03f2-4d2e-ae87-c02d7f33c123. Error: Fake Error", str(e)) diff --git a/ironic/tests/drivers/third_party_driver_mock_specs.py b/ironic/tests/drivers/third_party_driver_mock_specs.py index 9adc7051c..94666d043 100644 --- a/ironic/tests/drivers/third_party_driver_mock_specs.py +++ b/ironic/tests/drivers/third_party_driver_mock_specs.py @@ -94,6 +94,7 @@ SCCICLIENT_IRMC_SCCI_SPEC = ( 'MOUNT_FD', 'UNMOUNT_FD', 'SCCIClientError', + 'SCCIInvalidInputError', 'get_share_type', 'get_client', 'get_report', diff --git a/ironic/tests/objects/test_objects.py b/ironic/tests/objects/test_objects.py index 58fa4206e..3f29fb392 100644 --- a/ironic/tests/objects/test_objects.py +++ b/ironic/tests/objects/test_objects.py @@ -15,6 +15,7 @@ import contextlib import datetime import gettext +import iso8601 from oslo_context import context from oslo_utils import timeutils @@ -128,17 +129,16 @@ class TestUtils(test_base.TestCase): foo = utils.dt_serializer('bar') obj = Obj() - obj.bar = timeutils.parse_isotime('1955-11-05T00:00:00Z') - self.assertEqual('1955-11-05T00:00:00Z', obj.foo()) + obj.bar = timeutils.parse_isotime('1955-11-05T00:00:00+00:00') + self.assertEqual('1955-11-05T00:00:00+00:00', obj.foo()) obj.bar = None self.assertIsNone(obj.foo()) obj.bar = 'foo' - self.assertRaises(AttributeError, obj.foo) + self.assertRaises(TypeError, obj.foo) def test_dt_deserializer(self): dt = timeutils.parse_isotime('1955-11-05T00:00:00Z') - self.assertEqual(utils.dt_deserializer(None, timeutils.isotime(dt)), - dt) + self.assertEqual(utils.dt_deserializer(None, dt.isoformat()), dt) self.assertIsNone(utils.dt_deserializer(None, None)) self.assertRaises(ValueError, utils.dt_deserializer, None, 'foo') @@ -358,7 +358,7 @@ class _TestObject(object): self.assertRemotes() def test_base_attributes(self): - dt = datetime.datetime(1955, 11, 5) + dt = datetime.datetime(1955, 11, 5, 0, 0, tzinfo=iso8601.iso8601.Utc()) obj = MyObj(self.context) obj.created_at = dt obj.updated_at = dt @@ -368,8 +368,8 @@ class _TestObject(object): 'ironic_object.changes': ['created_at', 'updated_at'], 'ironic_object.data': - {'created_at': timeutils.isotime(dt), - 'updated_at': timeutils.isotime(dt), + {'created_at': dt.isoformat(), + 'updated_at': dt.isoformat(), } } actual = obj.obj_to_primitive() diff --git a/requirements.txt b/requirements.txt index 7857ad7c5..adad62455 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,7 +23,7 @@ websockify>=0.6.1 oslo.concurrency>=2.3.0 # Apache-2.0 oslo.config>=2.1.0 # Apache-2.0 oslo.context>=0.2.0 # Apache-2.0 -oslo.db>=2.4 # Apache-2.0 +oslo.db>=2.4.1 # Apache-2.0 oslo.rootwrap>=2.0.0 # Apache-2.0 oslo.i18n>=1.5.0 # Apache-2.0 oslo.log>=1.8.0 # Apache-2.0 |