2015-12-17 3 views
5

Вот файл инвентаризациианзибль изменения SSH порт в PlayBook

--- 
[de-servers] 
192.26.32.32 

[uk-servers] 
172.21.1.23 
172.32.2.11 

и мой сборник пьес это выглядит следующим образом:

- name: Install de-servers configurations 
    hosts: de-servers 
    roles: 
    - de-server-setup 

- name: Install uk-servers configurations 
    hosts: uk-servers 
    roles: 
    - uk-server-setup 

- name: Do some other job on de-servers (cannot be done until uk-servers is installed) 
    hosts: de-servers 
    roles: 
    - de-servers-rest-of-jobs 

В роли де-сервера-настройки роли SSH порта изменяется с 22 - 8888, поэтому, когда последняя задача называется, она терпит неудачу, потому что она не может подключиться к хосту через 22 порт. Как преодолеть это изменение порта ssh?

ответ

10

В роли de-server-setup добавить задача изменить переменную хоста ansible_ssh_port.

- name: Change ssh port to 8888 
    set_fact: 
    ansible_ssh_port: 8888 
+2

Это будет работать только в том случае, если вы впервые запускаете playbook, нет? – Erfan

5

Единственное, что я могу думать о том, что может работать, это создать псевдонимы ssh для ваших хостов. В вашей .ssh/config:

Host de.1.before 
    HostName 192.26.32.32 
    Port 22 

Host de.1.after 
    HostName 192.26.32.32 
    Port 8888 

Затем используйте эти псевдонимы в вашем анзибль инвентаря:

[de-servers-before] 
de.1.before 

[de-servers-after] 
de.1.after 

и определенных групп, то, соответственно, в ваших спектаклях:

- name: Install de-servers configurations 
    hosts: de-servers-before 
    roles: 
    - de-server-setup 

- name: Install uk-servers configurations 
    hosts: uk-servers 
    roles: 
    - uk-server-setup 

- name: Do some other job on de-servers (cannot be done until uk-servers is installed) 
    hosts: de-servers-after 
    roles: 
    - de-servers-rest-of-jobs 
3

Мне нужно изменить SSH портов на хозяев я управляю, и я хочу использовать анзибль, чтобы сделать это. По существу, анзибль использует следующую логику для управления это SSH-соединения:

if self.port is not None: 
     ssh -p {{ self.port }} ... 
    else: 
     ssh ... 

где «self.port» является спецификация порта от хоста инвентаризации, или переопределить с помощью параметра «-e», или явное объявление переменных «ansible_port» и/или «ansible_ssh_port». Рекомендованное решение для изменения портов - это использовать модули «wait_for» и «when» в «pre_tasks», но есть много недостатков для этого подхода, особенно когда задействовано много хостов , и особенно, когда вы хотите использовать разные порты на разных хостах.

Я клонирован и пропатчил SSH плагина (версии 1 и 2), чтобы изменить логика следующим образом:

if self.port is not None and self.port is OPEN: 
    ssh -p {{ self.port }} ... 
else: 
    ssh ... 

Пластырь, сам по себе, не делает никаких изменений на целевых узлах, но позволяет соединения с преуспеть, даже если порты на узлах еще не изменились. С помощью патча теперь очень легко написать роли/задачи для изменения портов ssh на все, что находится в инвентаре хоста .

Если вам интересно, вы можете найти патч и образцы о том, как использовать его на https://github.com/crlb/ansible; the README.md содержит дополнительную информацию.

Смежные вопросы