def METHOD_NAME(name, m_args=None, m_kwargs=None, condition=None, period=1, timeout=60):
    """
    Loop over an execution module until a condition is met.
    :param str name: The name of the execution module
    :param list m_args: The execution module's positional arguments
    :param dict m_kwargs: The execution module's keyword arguments
    :param str condition: The condition which must be met for the loop to break.
        This should contain ``m_ret`` which is the return from the execution module.
    :param period: The number of seconds to wait between executions
    :type period: int or float
    :param timeout: The timeout in seconds
    :type timeout: int or float
    """
    ret = {"name": name, "changes": {}, "result": False, "comment": ""}
    if m_args is None:
        m_args = ()
    if m_kwargs is None:
        m_kwargs = {}
    if name not in __salt__:
        ret["comment"] = "Cannot find module {}".format(name)
    elif condition is None:
        ret["comment"] = "An exit condition must be specified"
    elif not isinstance(period, (int, float)):
        ret["comment"] = "Period must be specified as a float in seconds"
    elif not isinstance(timeout, (int, float)):
        ret["comment"] = "Timeout must be specified as a float in seconds"
    elif __opts__["test"]:
        ret["comment"] = "The execution module {} will be run".format(name)
        ret["result"] = None
    else:
        if m_args is None:
            m_args = []
        if m_kwargs is None:
            m_kwargs = {}
        timeout = time.time() + timeout
        while time.time() < timeout:
            m_ret = __salt__[name](*m_args, **m_kwargs)
            if eval(condition):  # pylint: disable=W0123
                ret["result"] = True
                ret["comment"] = "Condition {} was met".format(condition)
                break
            time.sleep(period)
        else:
            ret["comment"] = "Timed out while waiting for condition {}".format(
                condition
            )
    return ret