def _edit(ioctx, mirror_mode=None): if mirror_mode: mode_enum = {x[1]: x[0] for x in self.MIRROR_MODES.items()}.get(mirror_mode, None) if mode_enum is None: raise rbd.Error('invalid mirror mode "{}"'.format(mirror_mode)) current_mode_enum = rbd.RBD().mirror_mode_get(ioctx) if mode_enum != current_mode_enum: rbd.RBD().mirror_mode_set(ioctx, mode_enum) _reset_view_cache()
def import_token(self, pool_name, direction, token): ioctx = mgr.rados.open_ioctx(pool_name) directions = { 'rx': rbd.RBD_MIRROR_PEER_DIRECTION_RX, 'rx-tx': rbd.RBD_MIRROR_PEER_DIRECTION_RX_TX } direction_enum = directions.get(direction) if direction_enum is None: raise rbd.Error('invalid direction "{}"'.format(direction)) rbd.RBD().mirror_peer_bootstrap_import(ioctx, direction_enum, token) return {}
def create(self, pool_name, cluster_name, client_id, mon_host=None, key=None): ioctx = mgr.rados.open_ioctx(pool_name) mode = rbd.RBD().mirror_mode_get(ioctx) if mode == rbd.RBD_MIRROR_MODE_DISABLED: raise rbd.Error('mirroring must be enabled') uuid = rbd.RBD().mirror_peer_add(ioctx, cluster_name, 'client.{}'.format(client_id)) attributes = {} if mon_host is not None: attributes[rbd.RBD_MIRROR_PEER_ATTRIBUTE_NAME_MON_HOST] = mon_host if key is not None: attributes[rbd.RBD_MIRROR_PEER_ATTRIBUTE_NAME_KEY] = key if attributes: rbd.RBD().mirror_peer_set_attributes(ioctx, uuid, attributes) _reset_view_cache() return {'uuid': uuid}