Ansible. Переподключение соединения в playbook

Создается сервер. Изначально есть пользователь root, его пароль и ssh на 22 порту (стандартно).

Есть написанный playbook, например, для react приложения.

При запуске playbook'a для него все разворачивается, но, перед развертыванием нужно минимально настроить сервер. Т.е. создать нового sudo пользователя, поменять порт ssh и копировать ssh ключ на сервер. Я думаю это нужно, наверное, для любого сервера.

После этой настройки в каталоге host_vars появляется yaml с переменными для этого сервера (ansible_user, ansible_sudo_pass и т.д)

Например есть 2 роли: initial-server, deploy-react-app. И сам playbook (main.yml) для конкретного приложения:

- name: Deploy
  hosts: prod
  roles:
  - role: initial-server
  - role: deploy-react-app

Как сделать так, что бы при запуске ansible-playbook main.yml роль initial-server выполнялась от пользователя root с его паролем, а роль deploy-react-app от нового созданного пользователя и соединение было по ssh ключу, а не по паролю (root) ? Или это в принципе не правильный подход?


Ответы (1 шт):

Автор решения: zersh

Не совсем понятно, зачем обязательно переподключаться - ведь всё можно настроить в рамках той же сессии. Но если надо - вот тут интересное решение: https://serverfault.com/questions/747604/how-can-i-have-ansible-restart-the-ssh-session-after-installing-nvm использовать async.

Разбейте плейбук на три задачи: role initial-server, потом примерно такой таск

- name: Kill open ssh sessions - ansible should log back in on next task
  shell: "ps -ef | grep sshd | grep `whoami` | awk '{print \"kill -9\", $2}' | sh"
  async: 0
  poll: 0
  when: nvm_installed | changed

- name: waiting for server to come back
  local_action: wait_for host={{ inventory_hostname }} state=started
        

и последняя роль deploy-react-app

→ Ссылка