ansible-在所有服务器上运行第一个任务,然后移动到第二个任务

ansible-在所有服务器上运行第一个任务,然后移动到第二个任务,ansible,Ansible,如何做到这一逻辑 在清单中的所有4台服务器上运行第一个任务,并在ls_文件中注册 然后使用第二个任务向用户发送一封包含ls_文件内容的邮件 - 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

如何做到这一逻辑

在清单中的所有4台服务器上运行第一个任务,并在ls_文件中注册 然后使用第二个任务向用户发送一封包含ls_文件内容的邮件

   - 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
       
简言之:

-名称:向用户发送邮件
邮寄:
主机:relay.server
港口:25
发件人:abcd@company.com
致:经理
主题:文件可用性
正文:|-
{hostvars | dict2items | map(attribute=“value”)| selectattr('ls_file','defined')%%中的servervars的%
{{servervars.inventory\u hostname}-{{servervars.ls\u file.stdout}
{%endfor%}
委托给:localhost
跑一次:对
这将在邮件中为存在变量
ls\u文件的任何服务器创建一行

一些参考文献值得一读:

  • (查找
    hostvars
  • (查找
    运行一次

出现此错误致命:[server1]:失败!=>{“msg”:"该任务包含一个带有未定义变量的选项。错误是:“ansible.vars.hostvars.hostvars对象”没有属性“ls\u file”\n\n错误似乎在“/ansible/ls.yml”中:第18行第10列,但可能在文件的其他位置,具体取决于语法问题。\n\n出现问题的行是:\n\n\n-name:send mail致经理\n^此处\n“}除了在其上运行命令的4台服务器之外,您的资源清册中还有其他服务器吗?在运行该任务之前,您是否在本地主机上运行过任何操作?是否仍要使用更安全的解决方案编辑答案。确保解决方案的安全性,以便在资源清册中的特定服务器未定义
ls\u文件
var时不会失败。只有4台服务器我的清单中有服务器。任务开始前没有运行任何程序。您的答案中是否更正了输入错误“enfor”?我注意到它并首先使用了“endfor”。因此,剧本给了我该错误。该输入错误给出了其他错误消息,我也修复了它。当前版本的结果如何?
       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