guestfs: With libguestfs >= v1.41.1 decode returned bytes to string

libguestfs >= v1.41.1 and commit 0ee02e0117527 changed the return type
of read_file from string to bytes.

0ee02e0117

As we don't check the version of libguestfs installed this change
handles both the original behaviour where a string is returned and the
newer behaviour by decoding any returned bytes to a string.

Closes-Bug: #1882421
Change-Id: I1c12b2903c1e5bf3a88394493456ad33233f3cd8
(cherry picked from commit 606d588e3e)
This commit is contained in:
Lee Yarwood 2021-04-23 12:14:42 +01:00
parent 68af588d5c
commit e98935f705
3 changed files with 11 additions and 4 deletions

View File

@ -109,7 +109,7 @@ class GuestFS(object):
"mode": 0o700
}
return self.files[path]["content"]
return bytes(self.files[path]["content"].encode())
def write(self, path, content):
if path not in self.files:

View File

@ -615,8 +615,8 @@ def _set_passwd(username, admin_passwd, passwd_data, shadow_data):
:param username: the username
:param admin_passwd: the admin password
:param passwd_data: path to the passwd file
:param shadow_data: path to the shadow password file
:param passwd_data: Data from the passwd file decoded as a string
:param shadow_data: Data from the shadow file decoded as a string
:returns: nothing
:raises: exception.NovaException(), IOError()

View File

@ -306,7 +306,14 @@ class VFSGuestFS(vfs.VFS):
def read_file(self, path):
LOG.debug("Read file path=%s", path)
path = self._canonicalize_path(path)
return self.handle.read_file(path)
data = self.handle.read_file(path)
# NOTE(lyarwood): libguestfs v1.41.1 (0ee02e0117527) switched the
# return type of read_file from string to bytes and as such we need to
# handle both here, decoding and returning a string if bytes is
# provided. https://bugzilla.redhat.com/show_bug.cgi?id=1661871
if isinstance(data, bytes):
return data.decode()
return data
def has_file(self, path):
LOG.debug("Has file path=%s", path)