在 Ansible 中尝试多个端口

  • 本文关键字:Ansible ansible
  • 更新时间 :
  • 英文 :


我正在编写一个 ansible 剧本来为我配置一个 Web 服务器。此过程的一部分涉及使用 geerlingguy/ansible-role-security 角色(我用它来更改默认的 ssh 端口(。但是,由于端口发生了更改,因此如果不更改 ansible_ssh_port 变量,则无法一遍又一遍地运行 playbook。这似乎违背了幂等性的整个要点,因为您必须在运行之间编辑剧本。所以我想知道是否有办法描述 2 个端口供 ansible 尝试。这样,它将在脚本第一次运行时使用端口 22,但在所有其他时间它将使用另一个端口。

我尝试寻找尝试不同端口的方法,但找不到任何东西。

我也有类似的情况,并使用wait_for和set_fact模块找到了解决方法。

这个想法是设置端口是否可访问ansible_port。 下面是检查和设置使用变量指定的端口的示例port1。在此示例方案中,无需使用ignore_errors或检查结果,但如果需要测试多个端口,则可能很有用。此外,如果播放使用远程主机,则可以使用delegate_to: localhost

根据需要使用循环、块、救援等进一步扩展实现。

- name: test1
wait_for:
host: hostname
port: "{{ port1 }}"
timeout: 10
ignore_errors: yes
register: result
delegate_to: localhost
- name: set ansible_port
set_fact:
ansible_port: "{{ port1 }}"
when: not result.failed

当它在收集事实步骤中失败时,我遇到了类似的问题,所以我

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

- hosts: all
gather_facts: no
vars:
refused: "port 22: Connection refused"

添加了检查连接的任务(默认端口为 22(

- name: Check ssh port
command: /bin/true
ignore_unreachable: yes
register: result
become: yes
- name: set ansible_port
set_fact:
ansible_port: {{ port }}
when: result.msg is defined and refused in result.msg

最新更新