多个Ansible任务的一个循环

Ave*_*ker 26 loops ansible ansible-playbook

我创建了一个Ansible playbook,它创建了一个云实例,然后在实例上安装了一些程序.我想多次运行这个剧本(不使用bash脚本).是否可以使用循环将这两个任务循环在一起(IE One循环用于两个任务?).到目前为止,我所能找到的只是每个任务的一个循环

udo*_*dan 27

不,这是目前不可能的.with_items用于处理include以前版本的Ansible中的语句,但遗憾的是丢弃了.

虽然它将在Ansible 2.0中重新出现,但请参阅第2部分第14/15页的第2部分新内容 - AnsibleFest London 2015

在此输入图像描述

您可以尝试使用githubv2分支,该功能应该在那里可用.

你可以用1.9.1做的是将你的任务转移到一个角色,并在你的剧本中多次引用这个角色.

  • 杜德,萤幕撷取画面是怎么回事? (5认同)

Wto*_*wer 21

更新:

在2.0中你可以使用with_循环和任务包括(但不包括playbook),这增加了一次性循环任务集的能力.有一些事情需要记住,一个包含它的with_循环的任务将覆盖特殊项变量的值.因此,如果您想要访问包含项目和当前任务的项目,您应该使用它set_fact来创建外部项目的别名:

- include: test.yml
  with_items:
    - 1
    - 2
    - 3
Run Code Online (Sandbox Code Playgroud)

在test.yml中:

- set_fact: outer_loop="{{item}}"
- debug: msg="outer item={{outer_loop}} inner item={{item}}"
  with_items:
    - a
    - b
    - c
Run Code Online (Sandbox Code Playgroud)

资料来源:Ansible Docs

  • 这已在2.1中得到改进,具有为外循环指定不同变量名的功能 - 请参阅Ansible的[循环控制部分](http://docs.ansible.com/ansible/playbooks_loops.html#loop-control)文档.2.2在同一部分有相关的改进. (7认同)

Par*_*oke 6

我设法通过基于条件递归包含相同的 yaml 文件来做到这一点。这是要点:https : //gist.github.com/ParagDoke/5ddfc3d5647ce9b0110d1b9790090092。实际上,在您的剧本中,包含一个包含一些变量的文件:

  - name: Invoke poller
    vars:
      some_condition: '"failed" not in response.content and response.json.status=="running"'
    include_tasks: status-poller.yml
Run Code Online (Sandbox Code Playgroud)

然后在status-poller.yml,包括它自己:

- include_tasks: includes/status-poller.yml
  when: some_condition
Run Code Online (Sandbox Code Playgroud)