summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ironic/api/acl.py2
-rw-r--r--ironic/common/rpc.py14
-rw-r--r--ironic/conductor/manager.py10
-rw-r--r--ironic/drivers/modules/irmc/management.py5
-rw-r--r--ironic/objects/utils.py3
-rw-r--r--ironic/tests/cmd/__init__.py0
-rw-r--r--ironic/tests/cmd/test_dbsync.py (renamed from ironic/tests/test_dbsync.py)0
-rw-r--r--ironic/tests/common/__init__.py0
-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.py9
-rw-r--r--ironic/tests/drivers/third_party_driver_mock_specs.py1
-rw-r--r--ironic/tests/objects/test_objects.py16
-rw-r--r--requirements.txt2
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