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 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: 6379To 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 redisHAS_REDIS = True
except ImportError:HAS_REDIS = False# Define the module's virtual name
__virtualname__ = 'redis'def __virtual__():if not HAS_REDIS:return Falsereturn __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:continuedata = 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()

转载于:https://blog.51cto.com/john88wang/1660833

SaltStack源码分析之Redis Returner相关推荐

  1. 10年大厂程序员是如何高效学习使用redis的丨redis源码分析丨redis存储原理

    10年大厂程序员是怎么学习使用redis的 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表和B+树详细对比分析 视频讲解如下,点击观看: 10年大厂程序员是如何高效学 ...

  2. SaltStack源码分析之:master端执行salt模块大致流程

    2019独角兽企业重金招聘Python工程师标准>>> ##JOB执行流程 先看下官网对于master端的工作流程的介绍: The Salt master works by alwa ...

  3. 【Redis源码分析】Redis命令处理生命周期

    运营研发团队 李乐 前言 本文主要讲解服务器处理客户端命令请求的整个流程,包括服务器启动监听,接收命令请求并解析,执行命令请求,返回命令回复等,这也是本文的主题"命令处理的生命周期" ...

  4. java 最少使用(lru)置换算法_「Redis源码分析」Redis中的LRU算法实现

    如果对我的文章感兴趣.希望阅读完可以得到你的一个[三连],这将是对我最大的鼓励和支持. LRU是什么 LRU(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新 ...

  5. 【redis源码分析】Redis Sentinel 是如何实际解决分布式共识问题的

    文章目录 开题 Sentinel 结构 Sentinel故障与安全模式:TITL模式 故障转移主逻辑 心跳监测 判断下线 及 投票表决 投票选举 leader哨兵 故障转移状态机 开题 前几篇都偏离了 ...

  6. Redis源码分析:基础概念介绍与启动概述

    Redis源码分析 基于Redis-5.0.4版本,进行基础的源码分析,主要就是分析一些平常使用过程中的内容.仅作为相关内容的学习记录,有关Redis源码学习阅读比较广泛的便是<Redis设计与 ...

  7. Redis 数据结构-字典源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 相关文章 Redis 初探-安装与使用 Redis 数据结构-字符串源码分析 本文将从以下几个方面介绍 前言 字典结构图 字典 ...

  8. Redis学习之intset整数集合源码分析

    1.整数集合:整数的集合,升序排序,无重复元素 2.整数集合intset是集合键的底层实现之一,当一个集合只包含整数值的元素,并且这个集合的元素数量不多时,redis会使用整数集合作为集合键的底层实现 ...

  9. Redis源码分析(一)redis.c //redis-server.c

    Redis源码分析(一)redis.c //redis-server.c 入口函数 int main() 4450 int main(int argc, char **argv) {4451 init ...

  10. Redis 过期策略与源码分析

    在 Redis 中我们可以给一些元素设置过期时间,那当它过期之后 Redis 是如何处理这些过期键呢? 过期键执行流程 Redis 之所以能知道那些键值过期,是因为在 Redis 中维护了一个字典,存 ...

最新文章

  1. S-T平面图中利用最短路求最小割(BZOJ 1001)
  2. 使用pinchzoom实现头像剪裁
  3. linux 邮件中继转发,linux – 如何使sendmail中继本地邮件?
  4. Linux下做双向同步
  5. 在Python中使用正则表达式去掉字符串里的html标签
  6. 旋流式沉砂池计算_以高效旋流器为核心的超低成本选煤技术
  7. c语言求上升沿次数,[求助]上升沿信号在C语言中怎么写啊
  8. Android 自定义控件一 带圆形进度的按钮 ControlButton2
  9. SCSF 系列:Smart Client Software Factory 中的 MVP 模式概述
  10. log4j2 无日志记录_在Log4j2中更好地执行非日志记录器调用
  11. 字段定义_ArcGIS开发amp;gdb、shapefile创建与投影定义,字段创建
  12. srsLTE源码学习:度量中心:metrics_hub.h
  13. 软件测试—软件测试基础知识—测试用例设计的方法判定表和因果图
  14. windows版mysql添加远程访问
  15. 【深度学习】你该会的精选面试题(二)
  16. vue 花括号里面的变量_二、Vue条件指令
  17. USB 格式化,提示The volume is too big for FAT32(卷对FAT32来说太大)
  18. 阿里云,腾讯云CDN谁更胜一筹?
  19. DDR内存家族演进史
  20. angular directive 入门

热门文章

  1. 计算机应用程序错误怎么解决办法,应用错误,教您怎么解决explorer.exe应用程序错误...
  2. STM8S的按键PWM调光灯历程
  3. Admob激励视频广告(rewarded ad)的服务器端验证(server-side )的疑问
  4. Design Patterns of SourceMaking
  5. 云服务器被攻击了快速解决方案
  6. 大话GraphQL新手上车
  7. n918st能刷Android5吗?,中兴 N918ST中文Recovery刷机教程
  8. Eureka入口之DiscoveryClient
  9. 禅道项目管理软件测试功能模块,禅道使用分享:禅道用例管理流程
  10. 用angular Material 做统计表格