Есть, к примеру, хост:
[api]
10.0.0.1 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_port=22
Здесь мы указываем 22 порт для ssh. Но на некоторых серверных стоит другой порт, скажем 220
Возможно как-то задать дополнительный порт для соединения по ssh на случай, если не смог присоединиться по 22? Каким-нибудь списком, чтоб Ansible по очереди перебирал.
Ответ
Частично воспользовался примером от Nick Volynkin.
Вначале плейбука проверяем порты, выбираем тот, что доступен и устанавливаем в ansible_ssh_port, после чего Ansible будет уже подсоединяться к машине по этому порту. Единственный минус - использованием wait_for. То есть, в данном случае мы ждём 15 секунд (т.к. проверяем 3 порта), пока порты проверятся.
- name: just test
hosts: server
gather_facts: false
vars:
list_of_ssh_ports: [22, 220, 234]
tasks:
- name: test ssh on port
sudo: no
local_action: wait_for port={{item}} timeout=5 host={{inventory_hostname}}
register: ssh_checks
with_items: "{{list_of_ssh_ports}}"
ignore_errors: true
- debug: msg = "{{item}}"
with_items: "{{ssh_checks.results}}"
- name: set available ansible_ssh_port
sudo: no
set_fact: ansible_ssh_port={{item.item}}
when: ssh_checks is defined and {{item.elapsed}} < 5
with_items: "{{ssh_checks.results}}"
- hosts: server
roles:
- остальные таски
Комментариев нет:
Отправить комментарий