View file File name : ceph.py Content :""" Manage ceph with salt. .. versionadded:: 2016.11.0 """ import logging import salt.utils.json from salt.exceptions import CommandExecutionError, CommandNotFoundError log = logging.getLogger(__name__) def _unchanged(name, msg): """ Utility function: Return structure unchanged """ return {"name": name, "result": True, "comment": msg, "changes": {}} def _test(name, msg): """ Utility function: Return structure test """ return {"name": name, "result": None, "comment": msg, "changes": {}} def _error(name, msg): """ Utility function: Return structure error """ return {"name": name, "result": False, "comment": msg, "changes": {}} def _changed(name, msg, **changes): """ Utility function: Return structure changed """ return {"name": name, "result": True, "comment": msg, "changes": changes} def _ordereddict2dict(input_ordered_dict): """ Convert ordered dictionary to a dictionary """ return salt.utils.json.loads(salt.utils.json.dumps(input_ordered_dict)) def quorum(name, **kwargs): """ Quorum state This state checks the mon daemons are in quorum. It does not alter the cluster but can be used in formula as a dependency for many cluster operations. Example usage in sls file: .. code-block:: yaml quorum: sesceph.quorum: - require: - sesceph: mon_running """ parameters = _ordereddict2dict(kwargs) if parameters is None: return _error(name, "Invalid parameters:%s") if __opts__["test"]: return _test(name, "cluster quorum") try: cluster_quorum = __salt__["ceph.cluster_quorum"](**parameters) except (CommandExecutionError, CommandNotFoundError) as err: return _error(name, err.strerror) if cluster_quorum: return _unchanged(name, "cluster is quorum") return _error(name, "cluster is not quorum")