我需要在剧本的中间运行此剧本,因为它取决于上一个任务,而下一个任务则取决于它(否则我将以不同的方式分解)
我希望能够看到我所有剧本的输出,是否有更好的方法可以在剧本中分出剧本。
例如:给定一本在TASK 3上在HOST_A和HOST_B上运行的剧本,请暂停正在运行的播放,然后在HOST_C和HOST_D上运行下一个播放,然后是HOST_E和HOST_F?
- name: update other machines
command: "/usr/bin/ansible-playbook /etc/ansible/playbooks/other-machines.yml -e 'ansible_user={{ item.ansible_user }}' -l {{ item.ansible_hostname }}"
with_items: "{{ other_machine_connections }}"
#1 楼
如果我正确理解了您的问题:使用
ansible
任务,可以将中间的command
shell命令转换为简单的剧本-我们将其称为middle.yml
然后,您现有的剧本就可以直接导入此
middle.yml
剧本(甚至更复杂的剧本)。在Ansible 2.4+中,您将使用import_playbook,特别是import_playbook: middle.yml
,或者在较早的版本中,仅使用include: middle.yml
。这将整个
middle.yml
剧本当作主要剧本的一部分进行处理-您具有所有功能的播放次数(hosts
等),并且输出显示为主要剧本的一部分。根据您对我以上评论的回答,此答案可能需要更新。
评论
查看一些文档,我发现了我之前尝试过的东西,但忘了-将多个剧本放在同一个剧本中(应该认为这是显而易见的,因为它是一部剧本!),但我认为这可以完成我想要的完美。我唯一的问题是,我正在运行ansible的设备无法直接到达我想弄乱的设备,但这不是放映机。
– Peter Turner
17年11月24日在14:12
#2 楼
看一下委派-您可以将任务的执行从剧本中委派给其他主机: - name: enable the server in haproxy
haproxy: 'state=enabled backend=myapplb host={{ inventory_hostname }} socket=/var/lib/haproxy/stats'
delegate_to: "{{ item }}"
with_items: groups.lbservers
评论
您使用ansible运行的任务是否包括-m命令-s'一些命令',即您实际上不是在运行剧本?在您的最后一个示例中,是对HOST_A和HOST_B进行一次播放,然后对HOST_C和HOST_D运行ansible命令,然后对HOST_E和HOST_F进行最后播放吗?播放和命令示例对理解结构也很有帮助,即使您包含伪代码也是如此。一段代码将极大地丰富您的问题...
@RichVel正如您所描述的,它非常简单,除了我使用的是ansible-playbook而不是ansible