Browse Source

New fix for rbd connector to work with ceph octopus

Found while testing cinder-backup with ceph on Ubuntu Focal, which
installs ceph Octopus.  Octopus apparently enforces the requirement
that the config file contain a '[global]' section for general
requirements.  The '[global]' section goes back at least to ceph
Hammer [0], so we will simply add it to the temporary ceph config
file that os-brick generates in the RBDConnector class.

[0] https://docs.ceph.com/docs/hammer/rados/configuration/mon-config-ref/

Co-authored-by: Alex Kavanagh <alex@ajkavanagh.co.uk>
Co-authored-by: Ivan Kolodyazhny <e0ne@e0ne.info>

Change-Id: I86eb31535d990291945de5d9846b1a03157ec2cf
Closes-bug: #1865754
(cherry picked from commit c6ad4d864c)
changes/55/750655/1
Brian Rosmaita 2 years ago
parent
commit
474583b4f8
  1. 7
      os_brick/initiator/connectors/rbd.py
  2. 4
      os_brick/tests/initiator/connectors/test_rbd.py
  3. 12
      releasenotes/notes/bug-1865754-ceph-octopus-compatibility-0aa9b8bc1b028301.yaml

7
os_brick/initiator/connectors/rbd.py

@ -102,7 +102,12 @@ class RBDConnector(base.BaseLinuxConnector):
try:
fd, ceph_conf_path = tempfile.mkstemp(prefix="brickrbd_")
with os.fdopen(fd, 'w') as conf_file:
conf_file.writelines([mon_hosts, "\n", keyring, "\n"])
# Bug #1865754 - '[global]' has been the appropriate
# place for this stuff since at least Hammer, but in
# Octopus (15.2.0+), Ceph began enforcing this.
conf_file.writelines(["[global]", "\n",
mon_hosts, "\n",
keyring, "\n"])
return ceph_conf_path
except IOError:
msg = (_("Failed to write data to %s.") % (ceph_conf_path))

4
os_brick/tests/initiator/connectors/test_rbd.py

@ -172,6 +172,10 @@ class RBDConnectorTestCase(test_connector.ConnectorTestCase):
self.keyring)
self.assertEqual(conf_path, tmpfile)
mock_mkstemp.assert_called_once_with(prefix='brickrbd_')
# Bug #1865754 - make sure generated config file has a '[global]'
# section
_, args, _ = mockopen().writelines.mock_calls[0]
self.assertIn('[global]', args[0])
@mock.patch('os_brick.privileged.rbd.root_create_ceph_conf')
def test_create_non_openstack_config(self, mock_priv_create):

12
releasenotes/notes/bug-1865754-ceph-octopus-compatibility-0aa9b8bc1b028301.yaml

@ -0,0 +1,12 @@
---
fixes:
- |
`Bug #1865754 <https://bugs.launchpad.net/cinder/+bug/1865754>`_:
the ``RBDConnector`` class generates a temporary configuration file
to connect to Ceph. Previously, os-brick did not include a
``[global]`` section to contain the options it sets, but with the
Octopus release (15.2.0+), Ceph has begun enforcing the presence
of this section marker, which dates back at least to the Hammer
release of Ceph. With this release, os-brick includes the
``[global]`` section in the generated configuration file, which
should be backward-compatible at least to Ceph Hammer.
Loading…
Cancel
Save