Fix logs encoding in py3

Make sure that logs are encoded as text (not byte strings) in
python3 to allow theirs serialization in JSON.

Closes-Bug: #1668533

Change-Id: I3d0d87ca766146457d905f89c26331a415bd54f8
This commit is contained in:
zackchen 2017-02-28 17:55:26 +08:00
parent 9b77ba530a
commit 000eaa3554
3 changed files with 9 additions and 1 deletions

View File

@ -27,6 +27,7 @@ import mock
from oslo_concurrency import processutils
from oslo_serialization import base64
from oslotest import base as test_base
import six
import testtools
from ironic_python_agent import errors
@ -385,6 +386,7 @@ class TestUtils(testtools.TestCase):
contents = b'Squidward Tentacles'
io_dict = {'fake-name': io.BytesIO(bytes(contents))}
data = utils.gzip_and_b64encode(io_dict=io_dict)
self.assertIsInstance(data, six.text_type)
res = io.BytesIO(base64.decode_as_bytes(data))
with tarfile.open(fileobj=res) as tar:

View File

@ -383,7 +383,7 @@ def gzip_and_b64encode(io_dict=None, file_list=None):
tar.add(f)
fp.seek(0)
return base64.encode_as_bytes(fp.getvalue())
return base64.encode_as_text(fp.getvalue())
def collect_system_logs(journald_max_lines=None):

View File

@ -0,0 +1,6 @@
---
fixes:
- JSON serialization of logs collected for ironic-python-agent.
In python3 logs were encoded as byte strings, which can't be serialized.
Make sure that logs are encoded as text for both py2.7 and py3. See
https://bugs.launchpad.net/ironic-python-agent/+bug/1668533 for details.