Ansible如何比较同一任务中多台主机的输出

Ansible如何比较同一任务中多台主机的输出,ansible,Ansible,我有一个ansible playbook,它的任务是为每个服务器输出已安装Jenkins插件的列表 以下是主机文件: [masters] server1 server2 server3 server4 server5 server6 以下是打印每个jenkins服务器上安装的插件列表的任务: - name: Obtaining a list of Jenkins Plugins jenkins_script: script: 'println(Jenkins.instance.pl

我有一个ansible playbook,它的任务是为每个服务器输出已安装Jenkins插件的列表

以下是主机文件:

[masters]
server1
server2
server3
server4
server5
server6
以下是打印每个jenkins服务器上安装的插件列表的任务:

- name: Obtaining a list of Jenkins Plugins
  jenkins_script:
    script: 'println(Jenkins.instance.pluginManager.plugins)'
    url: "http://{{ inventory_hostname }}.usa.com:8080/"
    user: 'admin'
    password: 'password'
接下来我要做的是比较所有服务器上安装的所有插件,以确保所有服务器都运行相同的插件

我不一定要强制更新--可能会破坏东西--只需通知用户他们正在运行与其他服务器不同的插件版本


我是ansible的新手,很乐意接受任何关于如何实现这一目标的建议。

这有点难看,但应该可以:

- hosts: master
  tasks:
    - jenkins_script:
        script: 'println(Jenkins.instance.pluginManager.plugins)'
        url: "http://{{ inventory_hostname }}.usa.com:8080/"
        user: 'admin'
        password: 'password'
      register: call_result

    - copy:
        content: '{{ call_result.output }}'
        dest: '/tmp/{{ inventory_hostname }}'
      delegate_to: 127.0.0.1

    - shell: 'diff /tmp/{{groups.master[0]}} /tmp/{{ inventory_hostname }}'
      delegate_to: 127.0.0.1
      register: diff_result
      failed_when: false

    - debug:
        var: diff_result.stdout_lines
      when: diff_result.stdout_lines | length != 0
这将把
jenkins_脚本
模块的结果保存到调用主机上(您正在运行
ansible playbook
),保存到
/tmp/{{hostname}}
中。之后,它将针对第一个服务器的结果和其他每个服务器的结果运行一个正常的
diff
,如果有任何差异,则打印出来

这有点难看,因为:

  • 在主叫主机上使用
    /tmp
    来存储一些临时数据
  • 不会自行清理
  • 使用diff shell命令实现一些可能通过巧妙使用jinja实现的功能
Ansible 2.3将提供,您可以使用它来清理
/tmp