ansible- 在所有服务器上运行第一个任务并移动到第二个任务 [英] ansible- run first task on all servers and move to 2nd task

查看:23
本文介绍了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 control structure
  • Playbook delegation, controlling where task run
  • Ansible special variables (look for hostvars)
  • Playbook keywords (look for run_once).

这篇关于ansible- 在所有服务器上运行第一个任务并移动到第二个任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆