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

您可以尝试使用github的v2分支,该功能应该在那里可用.
你可以用1.9.1做的是将你的任务转移到一个角色,并在你的剧本中多次引用这个角色.
Wto*_*wer 21
更新:
在2.0中你可以使用
with_循环和任务包括(但不包括playbook),这增加了一次性循环任务集的能力.有一些事情需要记住,一个包含它的with_循环的任务将覆盖特殊项变量的值.因此,如果您想要访问包含项目和当前任务的项目,您应该使用它set_fact来创建外部项目的别名:Run Code Online (Sandbox Code Playgroud)- include: test.yml with_items: - 1 - 2 - 3在test.yml中:
Run Code Online (Sandbox Code Playgroud)- set_fact: outer_loop="{{item}}" - debug: msg="outer item={{outer_loop}} inner item={{item}}" with_items: - a - b - c
资料来源:Ansible Docs
我设法通过基于条件递归包含相同的 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)