Implement key rotation for MDS daemons

This patchset implements key rotation for MDS daemons, which
essentially involves the ceph-fs charm. It works in a very
similar fashion to RGW units.

Change-Id: I06570d9602137b804af56e358cabf552d6f1e9fd
This commit is contained in:
Luciano Lo Giudice 2024-04-22 20:52:09 -03:00
parent 446d17f625
commit 27c01fe695
1 changed files with 30 additions and 0 deletions

View File

@ -99,6 +99,34 @@ def _handle_rgw_key_rotation(entity, event, model):
event.fail("Entity %s not found" % entity)
def _find_mds_unit(relations, mds_name):
for relation in relations:
for unit in relation.units:
try:
if mds_name == relation.data[unit]['mds-name']:
return relation.data
except KeyError:
logger.exception('mds name not found in relation data bag')
def _handle_mds_key_rotation(entity, event, model):
mds_name = entity[4:]
relations = model.relations.get('mds')
if not relations:
event.fail('No mds relations found')
return
key_name = mds_name + '_mds_key'
bag = _find_mds_unit(relations, key_name)
if bag is None:
event.fail('No unit found for entity: %s' % entity)
return
pending_key = _create_key(entity, event)
bag[model.unit]['pending_key'] = json.dumps({mds_name: pending_key})
event.set_results({'message': 'success'})
def rotate_key(event, model=None) -> None:
"""Rotate the key of the specified entity."""
entity = event.params.get("entity")
@ -125,5 +153,7 @@ def rotate_key(event, model=None) -> None:
event.set_results({"message": "success"})
elif entity.startswith('client.rgw.'):
_handle_rgw_key_rotation(entity, event, model)
elif entity.startswith('mds.'):
_handle_mds_key_rotation(entity, event, model)
else:
event.fail("Unknown entity: %s" % entity)