SaltStack源码分析之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 server  To enable this returner the minion will need the python client for redis installed and the following values configured in the minion or master config, 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 libs import json  # Import Salt libs import salt.utils  # Import third party libs try:     import redis     HAS_REDIS = True except 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 ret   def 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 ret   def 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


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注