使ansible在不登录的情况下等待服务器启动

使ansible在不登录的情况下等待服务器启动,ansible,provisioning,Ansible,Provisioning,当我配置一个新服务器时,在我创建它和它变得可用之间有一个延迟。所以我需要等到它准备好 我认为这就是wait_for任务的目的: 主持人: [servers] 42.42.42.42 playbook.yml: --- - hosts: all gather_facts: no tasks: - name: wait until server is up wait_for: port=22 此操作失败,权限被拒绝。我想那是因为还没有任何设置 我希望它打开一个ssh连接并等待

当我配置一个新服务器时,在我创建它和它变得可用之间有一个延迟。所以我需要等到它准备好

我认为这就是
wait_for
任务的目的:

主持人:

[servers]
42.42.42.42
playbook.yml:

---
- hosts: all
  gather_facts: no
  tasks:
  - name: wait until server is up
    wait_for: port=22
此操作失败,权限被拒绝。我想那是因为还没有任何设置

我希望它打开一个ssh连接并等待提示——只是想看看服务器是否启动了。但实际发生的是它试图登录


是否有其他方法执行不尝试登录的等待?

正如您正确指出的,此任务在“待配置”主机上执行,因此ansible首先尝试连接到它(通过ssh),然后尝试等待端口启动。这适用于其他端口/服务,但不适用于给定主机上的22,因为22是在该主机上执行任何任务的“先决条件”

您可以做的是尝试将此任务委派给ansible主机(即您运行PB的主机),并将
host
参数添加到
wait\u for
任务中

例如:

- name: wait until server is up
  wait_for: 
    port: 22
    host: <the IP of the host you are trying to provision>
  delegate_to: localhost
-name:等待服务器启动
等待:
港口:22
主持人:
委托给:localhost

希望对您有所帮助

正如您正确指出的,此任务在“待配置”主机上执行,因此ansible首先尝试连接到它(通过ssh),然后尝试等待端口启动。这适用于其他端口/服务,但不适用于给定主机上的22,因为22是在该主机上执行任何任务的“先决条件”

您可以做的是尝试将此任务委派给ansible主机(即您运行PB的主机),并将
host
参数添加到
wait\u for
任务中

例如:

- name: wait until server is up
  wait_for: 
    port: 22
    host: <the IP of the host you are trying to provision>
  delegate_to: localhost
-name:等待服务器启动
等待:
港口:22
主持人:
委托给:localhost
希望能有帮助

问:“是否有其他方法来执行不尝试登录的等待?”

A:有可能。比如说

- hosts: all
  gather_facts: no
  tasks:
    - name: wait until server is up
      wait_for_connection:
        delay: 60
        timeout: 300
问:“是否有其他方法来执行不尝试登录的等待?”

A:有可能。比如说

- hosts: all
  gather_facts: no
  tasks:
    - name: wait until server is up
      wait_for_connection:
        delay: 60
        timeout: 300

谢谢你能解释一下委派给本地主机意味着什么吗?我刚刚试过,它似乎有效,但我不清楚为什么?关于授权,请参阅。简而言之,您可以在Y主机上执行任务(例如,您希望运行
uri
任务从internet获取页面,但只有某些主机可以访问internet,您可以将任务委托给他们),而不是向您的播放所指的主机执行任务我读了文档,但仍然不明白为什么这样做:-):-)如果任务失败是因为ansible还不能登录(这是一个新服务器),为什么授权给localhost(运行playbook的机器)会突然改变行为?这是否意味着它在带外执行
ssh
,即在ansible运行时之外执行?
wait_for
模块仅在给定端口打开时检查服务器,并等待其可用。但要在任何主机上执行任何任务,ansible必须首先连接到该主机。在您的情况下,ssh服务仍然不可用,只要sshd未运行/配置正确,您就无法在其上运行任何任务。当您将此任务委托给另一台主机时,ansible将成功连接到该主机(该机器上的sshd没有问题),并只监视远程服务器,等待22端口可用。希望清楚:)哈哈,我真的很想理解你,但请原谅,我还是一个可靠的新手。。。你是说它正在检查sshd是否在本地主机上运行?我的本地主机不运行sshd(我真正想知道的是远程主机,而不是本地主机)。这很管用,但现在看起来有点不可思议:)谢谢!你能解释一下委派给本地主机意味着什么吗?我刚刚试过,它似乎有效,但我不清楚为什么?关于授权,请参阅。简而言之,您可以在Y主机上执行任务(例如,您希望运行
uri
任务从internet获取页面,但只有某些主机可以访问internet,您可以将任务委托给他们),而不是向您的播放所指的主机执行任务我读了文档,但仍然不明白为什么这样做:-):-)如果任务失败是因为ansible还不能登录(这是一个新服务器),为什么授权给localhost(运行playbook的机器)会突然改变行为?这是否意味着它在带外执行
ssh
,即在ansible运行时之外执行?
wait_for
模块仅在给定端口打开时检查服务器,并等待其可用。但要在任何主机上执行任何任务,ansible必须首先连接到该主机。在您的情况下,ssh服务仍然不可用,只要sshd未运行/配置正确,您就无法在其上运行任何任务。当您将此任务委托给另一台主机时,ansible将成功连接到该主机(该机器上的sshd没有问题),并只监视远程服务器,等待22端口可用。希望清楚:)哈哈,我真的很想理解你,但请原谅,我还是一个可靠的新手。。。你是说它正在检查sshd是否在本地主机上运行?我的本地主机不运行sshd(我真正想知道的是远程主机,而不是本地主机)。这是可行的,但现在看起来有点不可思议:)没有剧本(特别是因为缺少
-hosts:…
)答案和注释都有歧义。没有剧本(特别是因为缺少
-hosts:…
)答案和注释都有歧义。谢谢!Hmmm如果服务器已经在运行,即使
delay
设置为1,也似乎没有检测到。我认为这不起作用,因为它说
这个模块使用内部ansible tr