2

我正在使用 Ansible 2.1。假设我的主机已经分组在库存中。然后我运行这样的剧本:

- hosts: foo
  roles:
    - bar

- hosts: baz
  roles:
    - eek

...more...

Ansible 似乎一个一个地应用角色,不管我设置了多少个分叉。有没有更好的方法来构建我的剧本以获得更多的执行并行性,而不会用无用的任务跳过消息向控制台发送垃圾邮件?

换句话说,所以角色bar适用于所有主机,foo同时eek适用于所有baz主机。如果我以组成员身份为条件应用角色,这似乎是一种工作,但是所有的跳过都会使输出变得非常难以阅读。

4

1 回答 1

1

如果只是输出中跳过的任务让您感到困扰,您可以display_skipped_hosts=Falseansible.cfg中进行设置。

如果设置为 False,ansible 将不会显示被跳过的任务的任何状态。默认行为是显示跳过的任务。

这样做的问题可能是,这会删除所有跳过的任务输出。在某些情况下,用户可能会依赖跳过的任务,并且需要了解正在发生的事情。可能有一个选项可以以编程方式解决这个问题。创建自定义回调插件。Ansible 生成的输出实际上是一个回调插件。您可以通过更改ansible.cfgstdout_callback = your_plugin来更改此默认回调插件。在您的插件中,您可以决定在哪些条件下要显示输出。

更改策略甚至创建自定义策略插件对您来说也可能很有趣。尽管据我所知,每次播放都会应用策略,所以没有办法让两个播放并行执行,我很确定第二次播放只有在第一次播放的所有主机都完成后才会开始。(但真的,这只是我的理解,我还没有玩过策略插件)

于 2016-06-20T19:26:18.983 回答