標籤:redis   returner   
Redis
/usr/lib/python2.6/site-packages/salt/returners/redis_return.py
需要Minion端安裝Redis的python驅動
# -*- coding: utf-8 -*-‘‘‘Return data to a redis serverTo enable this returner the minion will need the python client for redisinstalled and the following values configured in the minion or masterconfig, these are the defaults:    redis.db: ‘0‘    redis.host: ‘salt‘    redis.port: 6379  To use the redis returner, append ‘--return redis‘ to the salt command. ex:    salt ‘*‘ test.ping --return redis‘‘‘
# Import python libsimport json# Import Salt libsimport salt.utils# Import third party libstry:    import redis    HAS_REDIS = Trueexcept ImportError:    HAS_REDIS = False# Define the module‘s virtual name__virtualname__ = ‘redis‘def __virtual__():    if not HAS_REDIS:        return False    return __virtualname__
def _get_serv():    ‘‘‘    Return a redis server object    ‘‘‘    if ‘config.option‘ in __salt__:        return redis.Redis(                host=__salt__[‘config.option‘](‘redis.host‘),                port=__salt__[‘config.option‘](‘redis.port‘),                db=__salt__[‘config.option‘](‘redis.db‘))    else:        cfg = __opts__        return redis.Redis(                host=cfg.get(‘redis.host‘, None),                port=cfg.get(‘redis.port‘, None),                db=cfg.get(‘redis.db‘, None))
擷取Redis配置資訊
def returner(ret):    ‘‘‘    Return data to a redis data store    ‘‘‘    serv = _get_serv()    serv.set(‘{0}:{1}‘.format(ret[‘id‘], ret[‘jid‘]), json.dumps(ret))    serv.lpush(‘{0}:{1}‘.format(ret[‘id‘], ret[‘fun‘]), ret[‘jid‘])    serv.sadd(‘minions‘, ret[‘id‘])    serv.sadd(‘jids‘, ret[‘jid‘])
def save_load(jid, load):    ‘‘‘    Save the load to the specified jid    ‘‘‘    serv = _get_serv()    serv.set(jid, json.dumps(load))    serv.sadd(‘jids‘, jid)
def get_load(jid):    ‘‘‘    Return the load data that marks a specified jid    ‘‘‘    serv = _get_serv()    data = serv.get(jid)    if data:        return json.loads(data)    return {}def get_jid(jid):    ‘‘‘    Return the information returned when the specified job id was executed    ‘‘‘    serv = _get_serv()    ret = {}    for minion in serv.smembers(‘minions‘):        data = serv.get(‘{0}:{1}‘.format(minion, jid))        if data:            ret[minion] = json.loads(data)    return retdef get_fun(fun):    ‘‘‘    Return a dict of the last function called for all minions    ‘‘‘    serv = _get_serv()    ret = {}    for minion in serv.smembers(‘minions‘):        ind_str = ‘{0}:{1}‘.format(minion, fun)        try:            jid = serv.lindex(ind_str, 0)        except Exception:            continue        data = serv.get(‘{0}:{1}‘.format(minion, jid))        if data:            ret[minion] = json.loads(data)    return retdef get_jids():    ‘‘‘    Return a list of all job ids    ‘‘‘    serv = _get_serv()    return list(serv.smembers(‘jids‘))def get_minions():    ‘‘‘    Return a list of minions    ‘‘‘    serv = _get_serv()    return list(serv.smembers(‘minions‘))def prep_jid(nocache, passed_jid=None):  # pylint: disable=unused-argument    ‘‘‘    Do any work necessary to prepare a JID, including sending a custom id    ‘‘‘    return passed_jid if passed_jid is not None else salt.utils.gen_jid()
本文出自 “Linux SA John” 部落格,請務必保留此出處http://john88wang.blog.51cto.com/2165294/1660833
SaltStack源碼分析之Redis Returner