我正在通过Terraform供应新服务器,并将Ansible作为本地系统上的供应商。Ansible wait_for似乎不起作用
Terraform为EC2提供了一个系统,然后运行Ansible playbook,提供新建系统的IP作为库存。
我想使用Ansible等待系统完成引导,并阻止尝试进一步的任务直到建立连接。直到这一点,我一直在使用不方便和不精确的手动暂停。
Ansible似乎没有做文件说明它会(除非我错了,一个非常可能的场景)。这里是我的代码:
- name: waiting for server to be alive
wait_for:
state: started
port: 22
host: "{{ ansible_ssh_host | default(inventory_hostname) }}"
delay: 10
timeout: 300
connect_timeout: 300
search_regex: OpenSSH
delegate_to: localhost
在此步骤中会发生什么事是连接不等待任何超过10秒进行连接,它失败。如果服务器已启动,并且我再次尝试操作手册,它可以正常工作并按预期执行。
我也试过do_until
风格循环似乎从来没有工作。文档中给出的所有示例都使用shell输出,我不认为它可以用于非shell模块。
我也似乎无法得到任何调试信息,如果我尝试注册一个结果并使用调试模块打印出来。
任何人有什么建议,我做错了什么?
对不起,我回滚到原来的版本。当然,我建议的作品,我之前测试过,并且在您的评论后感到困惑,因为我重新运行了“gather_facts”功能,并且它甚至没有关闭主机。 (同时请清理你的意见) – techraf
'set_fact'然后在本地机器上运行吗? – smiller171
运行我附带的剧本并亲自体验。为什么Ansible会在远程机器上调用Python来为变量设置一个值? – techraf