Ansible如何拆分命令输出的多节点合并数据并单独处理
Ansible 实现双节点返回数据拆分处理思路
- 捕获原始命令输出
调用shell/command模块执行获取双节点数据的单条命令,关闭changed_when标记避免误判任务变更,将命令返回的完整stdout内容存入临时变量,例如raw_output。
- 捕获原始命令输出
- 基于固定分隔符做无行数依赖的块拆分
利用输出内容中固定的节点头标记#################### <节点名> ####################做正则匹配拆分,不需要提前约定每个节点的返回行数:
匹配正则参考:
####################\s+([^\s#]+)\s+####################
借助Ansible内置的regex_findall、split过滤器,将原始文本切分为「节点名-对应数据块」的键值对字典,例如生成结构为{"NODE-1": "NODE1全量磁盘输出文本", "NODE-2": "NODE2全量磁盘输出文本"}的node_parsed_raw变量,自动适配每个节点返回行数不固定的场景。- 基于固定分隔符做无行数依赖的块拆分
- 单节点数据独立结构化
遍历node_parsed_raw字典,对每个节点名下的文本块单独做解析:跳过块内第一行表头,逐行拆分磁盘容量、使用率、挂载点等字段,转换为结构化的指标字典,挂载到对应节点的键下,例如node_parsed_raw['NODE-1']['metrics']存储NODE-1的所有结构化磁盘指标。
- 单节点数据独立结构化
- 独立输出/存储结果
针对每个节点的结构化指标单独做阈值校验、结论生成:
- 需要存独立变量时,直接通过
set_fact按节点名生成独立变量即可,例如node1_metrics、node2_metrics - 需要存独立文件时,调用
copy/template模块,按节点名生成单独的报告文件,例如NODE-1_disk_report.txt、NODE-2_disk_report.txt,写入对应节点的分析结论即可。
- 独立输出/存储结果
注:该逻辑不硬编码节点数量,若后续返回数据中新增其他节点块,可自动识别处理,无需调整拆分规则。
内容的提问来源于stack exchange,提问作者Aditya Siddarth
相关产品推荐
相关产品推荐

