Ansible 可变和寄存器值
如何使用Jinja2筛选ansible获得两台主机的总和 主机1和主机2Ansible 可变和寄存器值,ansible,jinja2,Ansible,Jinja2,如何使用Jinja2筛选ansible获得两台主机的总和 主机1和主机2 --- - name: Count Check hosts: MYGROUP gather_facts: true user: sv_admin tasks: - name: count check shell: cat /etc/hosts | wc -l register: command_result - debug: var: command_
---
- name: Count Check
hosts: MYGROUP
gather_facts: true
user: sv_admin
tasks:
- name: count check
shell: cat /etc/hosts | wc -l
register: command_result
- debug:
var: command_result.stdout
- set_fact:
total_result: "{{ command_result.stdout | map('int') | sum(start=0) }}"
- debug:
msg: "Total count: {{ total_result }}"
剧本输出
TASK [debug] *****************************************************************
ok: [Host-01] => {
"msg": "Total count: 134"
}
ok: [Host-02] => {
"msg": "Total count: 133"
}
您可以使用自定义统计信息来执行此操作: 所以对于你的情况来说
---
-姓名:计数检查
主持人:MYGROUP
收集事实:真实
用户:sv_管理员
任务:
-姓名:计数检查
外壳:cat/etc/hosts | wc-l
寄存器:命令\u结果
-调试:
var:command_result.stdout
-设定事实:
主机_结果:“{{command_result.stdout}”
-调试:
msg:“此主机的计数:{{host_result}}”
-设置统计信息:
数据:“{{‘总计数’:主机结果{124; int}}”
然后,如果使用ANSIBLE\u SHOW\u CUSTOM\u STATS=yes运行它,它将在最后显示结果:
$ ANSIBLE_SHOW_CUSTOM_STATS=yes ansible-playbook -i inventory pb.yml
... (usual output)
CUSTOM STATS: *************************************************************
RUN: { "total_count": 267}
默认情况下,set_stats
任务将所有主机的结果相加,这就是您要查找的。不过,您需要确保这些值是整数,因为如果它们是字符串,它只会将它们串联起来,最终会得到类似于RUN:{“total\u count”:“134133”}
的结果。这就是为什么我将数据:
按我的方式放置—如果您尝试用常规yaml创建字典,如
数据:
总计数:“{host_result}int}”
您将看到该值仍然是一个字符串(由于yaml/jinja的工作方式),它无法正常工作。使用和。例如,下面的剧本
shell>cat playbook.yml
-主持人:测试组01:测试组03
收集事实:错误
任务:
-外壳:cat/etc/hosts | wc-l
寄存器:命令\u结果
-调试:
var:command_result.stdout
-设定事实:
总结果:“{{ansible\u play\u hosts\u all”|
映射('extract',hostvars,['command_result','stdout']))|
映射('int')|
和}}”
跑一次:对
-调试:
var:总结果
给出(节略)
shell>ansible playbook playbook.yml
播放[测试01:测试03]****
任务[外壳]****
更改:[测试单元01]
更改:[测试03]
任务[调试]****
确定:[测试\u 01]=>{
“命令结果.标准输出”:“62”
}
确定:[测试03]=>{
命令\u结果.stdout:“31”
}
任务[设置事实]****
ok:[测试单元01]
任务[调试]****
确定:[测试03]=>{
“总结果”:“93”
}
确定:[测试\u 01]=>{
“总结果”:“93”
}
- 看
- 看到两者的区别了吗