Я пытаюсь установить пакет в списке серверов, у них есть общий тег, поэтому я использую этот тег, поскольку для всех них тег Environment установлен на Dev. Но проблема в том, что у некоторых из них есть ОС как Amazon Linux (вход в систему работает с пользователем ec2), у некоторых из них есть Centos (вход работает с пользователем CentOS), а у других - Ubuntu.
У меня есть возможность выполнить определенную задачу с помощью remote_user для этой конкретной задачи, но когда я даю user: centos, логин работает только на тех серверах, где OS / user - centos и не работает на других.
Я ищу решение, в котором я могу использовать предложение OR вместе с пользователем, например, если один пользователь не может войти в систему, он должен попытаться войти в систему со вторым пользователем.
Самый простой способ - создать три отдельных файла задач, чтобы делать все, что вы хотите, и включить файл для конкретного дистрибутива машины, на которой запущена книга воспроизведения. Вы можете проверить это с помощью ansible_distribution состояние. Например, добавьте это в свою книгу:
- include_tasks: install_amazon.yml
when: ansible_distribution == 'Amazon'
- include_tasks: install_centos.yml
when: ansible_distribution == 'CentOS'
- include_tasks: install_ubuntu.yml
when: ansible_distribution == 'Ubuntu'
Затем в данном файле задач вы можете указать remote_user
параметр. Например ваш install_centos.yml
файл мог бы выглядеть так:
---
- name: Install package as CentOS user
yum:
name: foo
state: present
remote_user: centos
Это установит foo
пакет как пользователь centos
. Вы можете сделать то же самое для других файлов задач.