Ansible playbook循环控制流

时间:2017-02-27 18:51:54

标签: ansible

我有一个playbook,用于检查6个jenkins服务器的已安装插件列表。

这是主机文件:

[masters]
server1
server2
server3
server4
server5
server6

以下是playbook中处理获取已安装插件列表的任务:

 - name: Obtaining a list of Jenkins Plugins
   jenkins_script:
     script: 'println(Jenkins.instance.pluginManager.plugins)'
     url: "{{ item }}"
     user: 'admin'
     password: 'password'
   with_items:
     - 'url1'
     - 'url2'
     - 'url3'
     - 'url4'
     - 'url5'
     - 'url6'

这样运行得非常好,但打印出36个已安装插件列表而不是6个。看来playbook正在为每个主机插入每个url,但是我对ansible很新,所以有人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您有六台名为server1-server6的Jenkins服务器,则不需要进行循环。只需触发jenkins_script任务并设置hosts模式,即可在每台服务器上运行此任务:

---
- hosts: server*
  tasks:
    - name: Obtaining a list of Jenkins Plugins
      jenkins_script:
        script: 'println(Jenkins.instance.pluginManager.plugins)'
        url: 'http://{{ inventory_hostname }}:8080/'
        user: 'admin'
        password: 'password'

这将在每个服务器上执行一次任务。