Ansible multi-play playbook 静默忽略播放

Ansible multi-play playbook silently ignore plays

希望您能帮助解决我的剧本未按预期完成的原因。

环境

配置

没什么令人兴奋的:

[defaults]
roles_path=./roles
host_key_checking = False
ssh_args= -t -t
allow_world_readable_tmpfiles = True

剧本

我有一个相当复杂的设置,在一本剧本中有很多剧本。

该剧本针对不同的目标系统运行;生产现场和开发平台。 (请不要建议我将它们结合起来……它是一个物联网系统,而且已经足够复杂了。)

这是我略微编辑过的剧本:

- hosts: all
  roles:
    - ...

- hosts: xmpp_server
  roles:
    - ...

- hosts: audit_server
  roles:
    - ...

- hosts: elk_server
  roles:
    - ...

- hosts: all
  roles:
    - ...

现在,请记住我有一个 IoT 设置,其中有各种冗余、复制和分发正在进行,所以尽管还有其他方法可以给猫剥皮,但上面分解成多个游戏是 真的 很适合我的设置,我想保留它。

同样重要:我的开发平台上没有 audit_serverelk_server 主机。这些组目前是空的,因为我正在处理一个正交问题并且不需要它们消耗有限的开发资源。我确实有那些在生产中,只是不在开发中。

预期行为

在制作现场,我希望所有的剧本都能触发,运行。

在开发平台上,我希望第一个播放 (all) 和 xmpp_server 播放到 运行,audit_serverelk_server 播放到跳过,然后最后一个 (all) 播放到 运行。

实际行为

生产现场完全符合预期。所有播放 运行.

由于 dev-piAxmpp_server 组的成员,开发人员完成了 xmpp_server 游戏。然后它静静地停止了。没有错误,没有信息,什么都没有。直接进入剧情回顾。这是输出:

...

TASK [xmppserver : include] ****************************************************
included: /Users/al/Studio/Projects/smc/ansible/roles/xmppserver/tasks/./openfire.yml for dev-piA

TASK [xmppserver : Get openfire deb file] **************************************
ok: [dev-piA]

TASK [xmppserver : Install openfire deb file] **********************************
ok: [dev-piA]

TASK [xmppserver : Check if schema has been uploaded previously] ***************
ok: [dev-piA]

TASK [xmppserver : Install openfire schema to postgres db] *********************
skipping: [dev-piA]
    to retry, use: --limit @fel.retry

PLAY RECAP *********************************************************************
dev-vagrant1               : ok=0    changed=0    unreachable=1    failed=0
dev-piA                    : ok=106  changed=3    unreachable=0    failed=0
dev-piB                    : ok=77   changed=3    unreachable=0    failed=0
dev-piC                    : ok=77   changed=3    unreachable=0    failed=0
...

所以,我 运行 它与 -vvvvv 并没有得到更多有用的东西:

...

TASK [xmppserver : Install openfire schema to postgres db] *********************
task path: /Users/al/Studio/Projects/smc/ansible/roles/xmppserver/tasks/openfire.yml:14
skipping: [dev-piA] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
    to retry, use: --limit @fel.retry

PLAY RECAP *********************************************************************
dev-vagrant1               : ok=0    changed=0    unreachable=1    failed=0
dev-piA                    : ok=106  changed=2    unreachable=0    failed=0
dev-piB                    : ok=77   changed=3    unreachable=0    failed=0
dev-piC                    : ok=77   changed=3    unreachable=0    failed=0
...

需要帮助

所以,我的问题是:为什么剧本就停在那里?怎么回事?!

实际上并没有明确表示 audit_server 播放没有更多的主机;这是我最好的猜测。它就像遇到 EOF 一样停止。

我完全被难住了。

编辑:注意:重试文件仅包含对 vag运行t 机器的引用,该机器目前处于关闭状态。但如果那是问题所在,那么 Ansible 的逻辑就非常有缺陷。我现在就检查以防万一

编辑:我的天哪,它实际上是丢失的 vag运行t 盒子,与该死的东西无关。这太令人震惊了,我将把它作为 Ansible 的一个问题提出来。但是......我会把它留在这里以防万一有人遇到同样的问题并用谷歌搜索它。

编辑:为清楚起见,vag运行t 机器不在任何戏剧的主机列表中,特殊的 'all' 情况除外。

如果游戏中的每个主机都不健康,Ansible 将中止执行。
如果 dev-vagrant1audit_server 组的唯一成员,这是预期的行为(如我们所见,dev-vagrant1 被标记为 unreachable)。

然而 to retry, use...

之前应该有一行 PLAY [audit_server] ********

Ansible 人员回复我并确认他们一直在为 2.1.1 版本解决该领域的许多问题。

我更新到 2.1.1.0 并且运行良好。