diff --git a/ironic_staging_drivers/ovirt/ovirt.py b/ironic_staging_drivers/ovirt/ovirt.py index c27accc..b500cd3 100644 --- a/ironic_staging_drivers/ovirt/ovirt.py +++ b/ironic_staging_drivers/ovirt/ovirt.py @@ -19,7 +19,6 @@ via oVirt sdk API. For use in dev and test environments. """ - from ironic.common import boot_devices from ironic.common import exception from ironic.common.i18n import _ @@ -29,6 +28,7 @@ from ironic.drivers import base from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils +import six from ironic_staging_drivers.common import exception as staging_exception @@ -130,17 +130,18 @@ def _getvm(driver_info): password = driver_info['ovirt_password'] insecure = driver_info['ovirt_insecure'] ca_file = driver_info['ovirt_ca_file'] - name = driver_info['ovirt_vm_name'].encode('ascii', 'ignore') + name = six.ensure_str( + driver_info['ovirt_vm_name'], encoding='ascii', errors='ignore') url = "https://%s/ovirt-engine/api" % address try: - # pycurl.Curl.setopt doesn't support unicode stings - # convert them to a acsii str - url = url.encode('ascii', 'strict') + # pycurl.Curl.setopt doesn't support unicode strings, + # attempt to turn `url` into an all-ASCII string + url = six.ensure_str(url, encoding='ascii', errors='strict') + except UnicodeEncodeError: - # url contains unicode characters that can't be converted, attempt to - # use it, if we have a version of pycurl that rejects it then a - # sdk.Error will be thrown below - pass + LOG.warning("oVirt URL '%(url)s' contains non-ascii characters, " + "that might cause pycurl to explode " + "momentarily", {'url': url}) try: connection = sdk.Connection(url=url, username=username, diff --git a/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py b/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py index f6dd247..c0fa2f7 100644 --- a/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py +++ b/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py @@ -21,6 +21,7 @@ from ironic.conductor import task_manager from ironic.tests.unit.db import base as db_base from ironic.tests.unit.objects import utils as obj_utils import mock +import six from ironic_staging_drivers.ovirt import ovirt as ovirt_power @@ -64,11 +65,11 @@ class OVirtDriverTestCase(db_base.DbTestCase): ovirt_power._getvm(driver_info) ovirt_power.sdk.Connection.assert_called_with( ca_file=None, insecure='False', password='changeme', - url=b'https://127.0.0.1/ovirt-engine/api', + url='https://127.0.0.1/ovirt-engine/api', username='jhendrix@internal' ) url = ovirt_power.sdk.Connection.mock_calls[0][-1]['url'] - self.assertEqual(type(b''), type(url)) + self.assertIsInstance(url, six.string_types) @mock.patch.object(ovirt_power, "sdk", create=True) def test_getvm_unicode(self, sdk): @@ -82,7 +83,7 @@ class OVirtDriverTestCase(db_base.DbTestCase): username='jhendrix@internal' ) url = ovirt_power.sdk.Connection.mock_calls[0][-1]['url'] - self.assertEqual(type(u''), type(url)) + self.assertIsInstance(url, six.text_type) def test_get_properties(self): expected = list(ovirt_power.PROPERTIES.keys()) diff --git a/lower-constraints.txt b/lower-constraints.txt index eb1b333..4b08ec8 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -70,7 +70,7 @@ requestsexceptions==1.4.0 restructuredtext-lint==1.1.3 rfc3986==1.1.0 Routes==2.4.1 -six==1.10.0 +six==1.12.0 snowballstemmer==1.2.1 Sphinx==1.6.2 sphinxcontrib-websupport==1.0.1 diff --git a/releasenotes/notes/fixed-ovirt-py3-a04265738d9a4562.yaml b/releasenotes/notes/fixed-ovirt-py3-a04265738d9a4562.yaml new file mode 100644 index 0000000..be4cf1d --- /dev/null +++ b/releasenotes/notes/fixed-ovirt-py3-a04265738d9a4562.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed parameters types used to call ``ovirtsdk4`` package services in + ``ovirt`` driver to make it operational under Python 3 as well. diff --git a/requirements.txt b/requirements.txt index a9fdd53..60e146d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,6 @@ oslo.config>=5.2.0 # Apache-2.0 oslo.i18n>=3.15.3 # Apache-2.0 oslo.log>=3.36.0 # Apache-2.0 oslo.utils>=3.33.0 # Apache-2.0 -six>=1.10.0 # MIT +six>=1.12.0 # MIT jsonschema>=2.6.0 # MIT oslo.service!=1.28.1,>=1.24.0 # Apache-2.0