在Ansible中尝试多个端口

在Ansible中尝试多个端口,ansible,Ansible,我正在写一本ansible剧本,为我提供一个web服务器。这个过程的一部分涉及使用geerlingguy/ansible角色安全角色(我使用它来更改默认ssh端口)。但是,由于端口发生了变化,因此在不更改ansible_ssh_port变量的情况下,无法反复运行playbook。这似乎违背了幂等性的全部观点,因为您必须在两次运行之间编辑剧本。所以我想知道是否有一种方法可以描述ansible尝试的2个端口。这样,它将在脚本第一次运行时使用端口22,但所有其他时间都将使用另一个端口 我试图寻找尝试不

我正在写一本ansible剧本,为我提供一个web服务器。这个过程的一部分涉及使用geerlingguy/ansible角色安全角色(我使用它来更改默认ssh端口)。但是,由于端口发生了变化,因此在不更改ansible_ssh_port变量的情况下,无法反复运行playbook。这似乎违背了幂等性的全部观点,因为您必须在两次运行之间编辑剧本。所以我想知道是否有一种方法可以描述ansible尝试的2个端口。这样,它将在脚本第一次运行时使用端口22,但所有其他时间都将使用另一个端口


我试图寻找尝试不同端口的方法,但什么也找不到

我有类似的场景,并找到了使用和模块的解决方法

如果可以访问端口,则可以设置
ansible\u端口
。 下面的示例检查并设置使用
port1
变量指定的端口。在本示例场景中,不必使用
忽略\u错误
或检查结果,但如果需要测试多个端口,则可能非常有用。此外,如果某个播放正在使用远程主机,则可以使用
委托给:localhost

酌情使用循环、阻塞、救援等进一步扩展实现

-名称:test1
等待:
主机名:主机名
端口:“{{port1}}”
超时:10
忽略错误:是
寄存器:结果
委托给:localhost
-名称:设置ansible_端口
设定事实:
ansible_端口:“{{port1}}”
时间:not result.failed

当收集事实步骤失败时,我遇到了类似的问题,因此我

残疾人在我的剧本中收集事实:

-主机:所有
收集事实:不
变量:
拒绝:“端口22:连接被拒绝”
添加了检查连接的任务(默认端口为22)

-名称:检查ssh端口
命令:/bin/true
忽略无法访问的内容:是
寄存器:结果
变成:是的
-名称:设置ansible_端口
设定事实:
ansible_端口:{{port}
当:result.msg在result.msg中定义并拒绝时