Страницы

Поиск по вопросам

четверг, 7 марта 2019 г.

Перебирать порты для соединения по ssh в Ansible

Есть, к примеру, хост:
[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: - остальные таски

Комментариев нет:

Отправить комментарий