ansible- 在所有服务器上运行第一个任务并移动到第二个任务 [英] ansible- run first task on all servers and move to 2nd task
本文介绍了ansible- 在所有服务器上运行第一个任务并移动到第二个任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何做这个逻辑.
在清单中的所有 4 个服务器上运行第一个任务并在 ls_file 中注册然后使用第二个任务向用户发送一封包含 ls_file 内容的邮件
run first task on all 4 servers in inventory and register in ls_file Then using 2nd task send a SINGLE mail to user with the contents of ls_file
- name: check file
shell: ls -l /var/abcd.txt
register: ls_file
- name: send mail to user
mail:
host: relay.server
port: 25
from: abcd@company.com
to: manager <manager@company.com>
subject: file availability
邮件正文应如下所示.
server1 - -rw-------. 1 root root 4405 Apr 20 2020 /var/abcd.txt
server2 - -rw-------. 1 root root 4405 Apr 12 2020 /var/abcd.txt
server3 - -rw-------. 1 root root 4405 Mar 15 2020 /var/abcd.txt
server4 - -rw-------. 1 root root 4405 Apr 19 2020 /var/abcd.txt
推荐答案
简而言之:
- name: send mail to user
mail:
host: relay.server
port: 25
from: abcd@company.com
to: manager <manager@company.com>
subject: file availability
body: |-
{% for servervars in hostvars | dict2items | map(attribute="value") | selectattr('ls_file', 'defined') %}
{{ servervars.inventory_hostname }} - {{ servervars.ls_file.stdout }}
{% endfor %}
delegate_to: localhost
run_once: true
这将在您的邮件中为存在变量 ls_file
的任何服务器创建一行.
This will create a line in your mail for any server where the variable ls_file
exists.
一些值得一读的参考:
- Jinja2
for
控制结构 - 剧本委托,控制任务运行的位置
- Ansible 特殊变量(查找
hostvars
) - Playbook 关键字(查找
run_once代码>).
- Jinja2
for
control structure - Playbook delegation, controlling where task run
- Ansible special variables (look for
hostvars
) - Playbook keywords (look for
run_once
).
这篇关于ansible- 在所有服务器上运行第一个任务并移动到第二个任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文