我有一个ansible playbook,其任务是为每个服务器输出已安装的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'
这是打印出每个jenkins服务器上安装的插件列表的任务:
loc
接下来我要做的是与所有服务器上安装的所有插件进行比较 - 以确保所有服务器都运行相同的插件。
我不一定要强制更新 - 可能会破坏 - 只是告知用户他们正在运行与其他服务器不同的插件版本。
我对ansible很新,很乐意接受任何关于如何实现这一目标的建议。
答案 0 :(得分:0)
这有点难看,但应该有效:
- 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_script
模块的结果保存到调用主机(您运行ansible-playbook
的位置),进入/tmp/{{hostname}}
。之后,它将针对第一个服务器的结果以及其他每个人的正常diff
运行,然后在有任何差异时打印出来。
它有点难看,因为它:
/tmp
来存储一些临时数据 Ansible 2.3将有tempfile module,您可以用它来清理/tmp