如何在Ansible中获取Redis Cluster特定主节点的槽位数
提取Redis Cluster特定主节点槽位数的Ansible Playbook实现
核心思路
先通过redis-cli --cluster check获取集群全量信息,再精准筛选目标IP对应的主节点行,最后从该行提取槽位数,避免全局替换的问题。
完整Playbook代码
--- - name: 获取指定Redis主节点的槽位数 hosts: localhost # 替换为实际运行redis-cli的节点(如管控节点或目标Redis所在节点) vars: target_redis_ip: "{{ input_target_ip }}" # 通过ansible-playbook -e "input_target_ip=192.168.56.116"传入 redis_port: 6379 # 若集群需密码,添加redis_password变量,命令中加对应参数 # redis_password: "your_redis_cluster_password" tasks: - name: 执行Redis集群检查命令 command: > redis-cli {% if redis_password is defined %}--cluster-password {{ redis_password }}{% endif %} --cluster check {{ target_redis_ip }}:{{ redis_port }} register: redis_cluster_output changed_when: false # 标记任务无状态变更 - name: 筛选目标主节点行并提取槽位数 set_fact: target_slot_count: >- {{ redis_cluster_output.stdout_lines | select('search', target_redis_ip) | # 筛选包含目标IP的行 select('search', 'slots') | # 筛选主节点行(从节点无slots字段) first | # 取唯一匹配行 regex_search('(\\d+) slots') | # 匹配"数字 slots"片段 regex_replace(' slots', '') # 去除后缀,保留纯数字 }} - name: 输出结果 debug: msg: "目标节点{{ target_redis_ip }}的槽位数: {{ target_slot_count }}"
关键说明
- 精准筛选逻辑:通过两次
select过滤,先锁定目标IP的行,再筛选带slots的主节点行,避免误匹配从节点或其他节点。 - 正则提取:用
regex_search精准匹配目标行中的槽位数字片段,再用regex_replace清理无关字符,而非全局替换所有行。 - 密码适配:如果Redis集群启用认证,取消注释
redis_password变量,并在命令中添加密码参数(不同Redis版本可能需用-a替代--cluster-password,按需调整)。 - 节点适配:
hosts字段需替换为实际能运行redis-cli且能访问目标Redis集群的节点(如本地管控节点或目标Redis所在节点)。
内容的提问来源于stack exchange,提问作者Behnia FB
相关产品推荐
相关产品推荐

