Fix get keyring content failed when ceph auth disabled

When ceph auth diasbled, both 'user' and 'keyring' will be 'None',
and the method _check_or_get_keyring_contents must return strings
for ceph conf file writelines() generation.

Change-Id: Ieafd40ace4f50c1a966c9097c5de270c68b0666b
Closes-Bug: #1817271
This commit is contained in:
Rui Yuan Dou 2019-02-22 16:53:28 +08:00
parent fb5ebc2f9e
commit a6dff156d7
2 changed files with 11 additions and 5 deletions

View File

@ -71,11 +71,14 @@ class RBDConnector(base.BaseLinuxConnector):
def _check_or_get_keyring_contents(self, keyring, cluster_name, user):
try:
if keyring is None and user:
keyring_path = ("/etc/ceph/%s.client.%s.keyring" %
(cluster_name, user))
with open(keyring_path, 'r') as keyring_file:
keyring = keyring_file.read()
if keyring is None:
if user:
keyring_path = ("/etc/ceph/%s.client.%s.keyring" %
(cluster_name, user))
with open(keyring_path, 'r') as keyring_file:
keyring = keyring_file.read()
else:
keyring = ''
return keyring
except IOError:
msg = (_("Keyring path %s is not readable.") % (keyring_path))

View File

@ -123,6 +123,9 @@ class RBDConnectorTestCase(test_connector.ConnectorTestCase):
self.assertEqual(
conn._check_or_get_keyring_contents(keyring, 'cluster',
'user'), keyring_data)
self.assertEqual(
conn._check_or_get_keyring_contents(keyring, 'cluster',
None), '')
def test_keyring_raise_error(self):
conn = rbd.RBDConnector(None)