正如在许多其他帖子和问题中所读到的,在执行 ansible-playbook 期间收集事实可能需要一些时间,并且可能由于多种原因而卡住。
就我而言,这种行为非常奇怪:
我得到了一个 ansible playbook 来设置我的服务器。一切都可以通过 SSH 访问,并且当一次只在一台主机上运行 playbook 时(与在哪台主机无关),它会按预期运行。收集事实非常有效,只需几秒钟即可完成。
针对多个主机运行剧本时,问题开始出现。只要我在主机文件中输入多个主机进行设置,收集事实就会花费大量时间。
有人也遇到过这种情况并能给我一些提示如何解决这个问题吗?
当启动剧本时
ansible-playbook frontend_rollout.yml -i hosts -K -vvv
Ansible 要求我按预期输入 sudo 密码和 SSH 密码。当要求输入每个服务器的 SSH 密码时,提示输出显示在一行中,如下所示:
Enter passphrase for key '/home/bouldrini/.ssh/ansible_ssh': Enter passphrase for key '/home/bouldrini/.ssh/ansible_ssh':
而且我只需在两个提示中输入一次密码。这是预期的行为吗?我是否遗漏了什么?
答案1
有些人可能感兴趣,所以我现在没有删除这个问题。
无休止地收集事实的原因是对 ssh 密码提示的描述行为。
正常人会期望以下行为:
[Pre fact gathering phase]
- prompt for ssh passphrase for host 1
- input for host 1
- prompt ssh passphrase for host 2
- input for host 2
[fact gathering phase]
但实际情况是这样的:
[Pre fact gathering phase]
- prompt ssh passphrase for host 1 AND host 2 in buggy output
- input for host 1
[fact gathering phase]
- host 1 fact gathering ok
- waiting for input for host 2 without any prompting
这真是令人困惑。
顺便说一下,我在 Ubuntu 16.04 上使用 Ansible 2.8 和 python3.7。我没有测试这个错误是否也出现在其他软件中,但可能会出现!