From e3ff1c3c69d76eab4115705c0c6ba71b25f8280a Mon Sep 17 00:00:00 2001
From: Victor Stinner <vstinner@redhat.com>
Date: Sun, 8 Nov 2015 22:13:14 +0100
Subject: [PATCH] Port zfssa driver to Python 3

* Replace base64.encodestring() with
  oslo_serialization.base64.encode_as_text() to accept Unicode as
  input (encoded to UTF-8). On Python 3, the function decodes base64
  from ASCII to get Unicode.
* tests-py3.txt: add cinder.tests.unit.test_zfssa

Partial-Implements: blueprint cinder-python3
Change-Id: I29a1a752d4cad5796fba1f21fe88238cb4414717
---
 cinder/volume/drivers/zfssa/zfssaiscsi.py | 12 +++++-------
 cinder/volume/drivers/zfssa/zfssanfs.py   |  4 ++--
 tests-py3.txt                             |  1 +
 3 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/cinder/volume/drivers/zfssa/zfssaiscsi.py b/cinder/volume/drivers/zfssa/zfssaiscsi.py
index 389182b0bd5..ccbcb74a79d 100644
--- a/cinder/volume/drivers/zfssa/zfssaiscsi.py
+++ b/cinder/volume/drivers/zfssa/zfssaiscsi.py
@@ -15,11 +15,11 @@
 ZFS Storage Appliance Cinder Volume Driver
 """
 import ast
-import base64
 import math
 
 from oslo_config import cfg
 from oslo_log import log
+from oslo_serialization import base64
 from oslo_utils import units
 import six
 
@@ -135,9 +135,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDriver):
         self.zfssa = factory_zfssa()
         self.tgt_zfssa = factory_zfssa()
         self.zfssa.set_host(lcfg.san_ip, timeout=lcfg.zfssa_rest_timeout)
-        auth_str = base64.encodestring('%s:%s' %
-                                       (lcfg.san_login,
-                                        lcfg.san_password))[:-1]
+        auth_str = '%s:%s' % (lcfg.san_login, lcfg.san_password)
+        auth_str = base64.encode_as_text(auth_str)[:-1]
         self.zfssa.login(auth_str)
 
         self.zfssa.create_project(lcfg.zfssa_pool, lcfg.zfssa_project,
@@ -401,9 +400,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDriver):
         host = lcfg.san_ip
         pool = lcfg.zfssa_pool
         project = lcfg.zfssa_project
-        auth_str = base64.encodestring('%s:%s' %
-                                       (lcfg.san_login,
-                                        lcfg.san_password))[:-1]
+        auth_str = '%s:%s' % (lcfg.san_login, lcfg.san_password)
+        auth_str = base64.encode_as_text(auth_str)[:-1]
         zfssa_tgt_group = lcfg.zfssa_target_group
         repl_ip = lcfg.zfssa_replication_ip
 
diff --git a/cinder/volume/drivers/zfssa/zfssanfs.py b/cinder/volume/drivers/zfssa/zfssanfs.py
index 71dcc32b6e1..519606d573e 100644
--- a/cinder/volume/drivers/zfssa/zfssanfs.py
+++ b/cinder/volume/drivers/zfssa/zfssanfs.py
@@ -14,13 +14,13 @@
 """
 ZFS Storage Appliance NFS Cinder Volume Driver
 """
-import base64
 import datetime as dt
 import errno
 import math
 
 from oslo_config import cfg
 from oslo_log import log
+from oslo_serialization import base64
 from oslo_utils import excutils
 from oslo_utils import units
 import six
@@ -133,7 +133,7 @@ class ZFSSANFSDriver(nfs.NfsDriver):
         self.zfssa = factory_zfssa()
         self.zfssa.set_host(host, timeout=lcfg.zfssa_rest_timeout)
 
-        auth_str = base64.encodestring('%s:%s' % (user, password))[:-1]
+        auth_str = base64.encode_as_text('%s:%s' % (user, password))[:-1]
         self.zfssa.login(auth_str)
 
         self.zfssa.create_project(lcfg.zfssa_nfs_pool, lcfg.zfssa_nfs_project,
diff --git a/tests-py3.txt b/tests-py3.txt
index 179e93af11d..11ef1e25aba 100644
--- a/tests-py3.txt
+++ b/tests-py3.txt
@@ -121,6 +121,7 @@ cinder.tests.unit.test_volume_types
 cinder.tests.unit.test_volume_types_extra_specs
 cinder.tests.unit.test_volume_utils
 cinder.tests.unit.test_vzstorage
+cinder.tests.unit.test_zfssa
 cinder.tests.unit.volume.drivers.emc.scaleio
 cinder.tests.unit.volume.flows.test_create_volume_flow
 cinder.tests.unit.windows.test_smbfs