Я начинаю играть с анзибль. У меня есть куча серверов (Ubuntu, Centos, Red Hat ...).
На серверах разные пользователи. Для серверов ubuntu я использую пользователя sudo, для остальных я использую пользователя root.
Как я мог указать пользователя по операционной системе?
В документы упомянуть выполнение задач только для определенных операционных систем. Вы можете настроить это, чтобы установить пользователя для каждой ОС. Например
- hosts: CentOS
user: centos
tasks:
- # some tasks
- hosts: Debian
user: default
- # some tasks
- hosts: Ubuntu
user: ubuntu
- # some tasks
Из источника видно, что эти операционные системы поддерживаются, хотя я не мог подтвердить это в официальной документации на момент написания этой статьи.
Вы также можете определить переменные для каждой ОС в vars/<os-name>.yaml
файлы и условно использовать их с помощью ansible_os_family
переменная шаблона, как показано Вот.
CentOS и так далее не автоматические. Это группа над доступной переменной. Вот полный пример работы с CentOS plus VM или без VM.
---
- name: RG Ansible for ALL
hosts: all
tasks:
- name: group by OS versions
group_by: key="{{ ansible_distribution }}_{{ ansible_distribution_version.split('.')[0] }}"
- name: group by physical/virtual machine
group_by: key="{{ ansible_virtualization_role }}"
...
- name: RG Ansible for CentOS 6
hosts: CentOS_6
gather_facts: false
tasks:
...
- name: RG Ansible for CentOS 5
hosts: CentOS_5
gather_facts: false
tasks:
- name: RG Ansible for VM
hosts: guest
gather_facts: false
tasks:
- service: name=acpid state=stopped enabled=no
- service: name=cpuspeed state=stopped enabled=no
Укажите пользователя на командная строка:
ansible-playbook foo.yml --extra-vars "user=bar"
-----
- user: '{{ user }}'
Укажите другой user
на группу хостов в /etc/ansible/hosts
[targets]
localhost ansible_connection=local
other1.example.com ansible_connection=ssh ansible_ssh_user=mpdehaan
other2.example.com ansible_connection=ssh ansible_ssh_user=mdehaan