如何检查 Ansible 任务的结果在所有服务器上是否相同?

Rob*_*loi 4 ansible

作为 Ansible 剧本的一部分,我想验证我的服务器是否同步。

为此,我使用该shell模块在每台服务器上执行一个脚本,并将结果注册到一个变量中,例如result_value

棘手的部分是验证result_value所有服务器上是否相同。预期值事先未知。

在 Ansible 中是否有一种惯用的方法来实现这一目标?

Kon*_*rov 5

可能的方法之一:

---
- hosts: all
  tasks:
    - shell: /usr/bin/my_check.sh
      register: result_value
    - assert:
        that: hostvars[item]['result_value'].stdout == result_value.stdout
      with_items: "{{play_hosts}}"
      run_once: true
Run Code Online (Sandbox Code Playgroud)

  • @RobertoAloi如果使用标准运行策略,首先在每个主机上执行“shell”并将结果写入该主机的“result_value”var,然后在其中一个主机上执行“assert”(因为“run_once”),但是循环当前播放中的每个主机(因为“with_items”)并将每个主机的 result_value 与它自己的进行比较。 (2认同)
  • 请注意,我首先使用您的解决方案遇到错误(“错误!无法查找(挖掘):未安装模块 dns.resolver”)“pip install --upgrade dnspython”命令有所帮助。 (2认同)