我拥有一本已经被黑客入侵了一年的剧本,它可以正常运行,但是我知道那不是很好,它的一部分可以在目标计算机上通过“命令”任务运行。因此,在我的ansible剧本中看不到此任务的输出。

我需要在剧本的中间运行此剧本,因为它取决于上一个任务,而下一个任务则取决于它(否则我将以不同的方式分解)

我希望能够看到我所有剧本的输出,是否有更好的方法可以在剧本中分出剧本。

例如:给定一本在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 }}"


评论

您使用ansible运行的任务是否包括-m命令-s'一些命令',即您实际上不是在运行剧本?在您的最后一个示例中,是对HOST_A和HOST_B进行一次播放,然后对HOST_C和HOST_D运行ansible命令,然后对HOST_E和HOST_F进行最后播放吗?播放和命令示例对理解结构也很有帮助,即使您包含伪代码也是如此。

一段代码将极大地丰富您的问题...

@RichVel正如您所描述的,它非常简单,除了我使用的是ansible-playbook而不是ansible

#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