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): def _check_or_get_keyring_contents(self, keyring, cluster_name, user):
try: try:
if keyring is None and user: if keyring is None:
keyring_path = ("/etc/ceph/%s.client.%s.keyring" % if user:
(cluster_name, user)) keyring_path = ("/etc/ceph/%s.client.%s.keyring" %
with open(keyring_path, 'r') as keyring_file: (cluster_name, user))
keyring = keyring_file.read() with open(keyring_path, 'r') as keyring_file:
keyring = keyring_file.read()
else:
keyring = ''
return keyring return keyring
except IOError: except IOError:
msg = (_("Keyring path %s is not readable.") % (keyring_path)) msg = (_("Keyring path %s is not readable.") % (keyring_path))

View File

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