Ansible playbook hosts — файл, в котором задается на каких из подконтрольных серверов должны быть выполнены команды. Это способ группировки управляемых Ansible серверов по назначению или какому-то другому признаку.
Группу серверов можно выбирать из файла и передавать в playbook или в командной строке. Операции в этом случае будут выполняться для этой группы.
Ansible playbook hosts
В первом материале по Ansible в /etc/ansible/hosts задавались две машины. Их может быть больше, машины делятся на группы, в каждой возможно неограниченное количество IP адресов или hostname.
Группировка может выполняться по любому признаку. Чаще всего используют группировку по назначению: веб-сервера, сервера баз данных, сервера приложений и так далее.
В примере две группы: сервера приложений app и сервера баз данных db. В каждой группе по одному хосту.
mcedit /etc/ansible/hosts
[app] node1 123.123.123.123 [db] node2 123.123.123.124
ansible all -m shell -a 'hostname' -v
123.123.123.123 | CHANGED | rc=0 >>
test1
node1 | CHANGED | rc=0 >>
node1
node2 | CHANGED | rc=0 >>
node2
Сейчас в командной строке передан аргумент all, поэтому выполняется действие на всех серверах.
Если указать db — команда уйдет на одну машину в одноименной группе.
ansible all -m shell -a 'hostname' -v
node2 | CHANGED | rc=0 >>
node2
Использование в playbook
Таким же образом hosts работают с playbook.
Синтаксис может быть аналогичен, в httpd.yml , но в поле hosts задается all. Вызывая playbook ключем -l можно передать нужную группы.
Так, если в httpd.yml прописано all, -i задает путь к файлу, -l — группу в нем.
ansible-playbook httpd.yml -i /etc/ansible/hosts -l db
Любая команда направляется на сервера группы db, несмотря на то, что в playbook заданы все машины. Командная строка в этом случае имеет больший приоритет, чем playbook.
Ansible распознав команду заходит на подконтрольные сервера по ssh, выполняет необходимые действия и возвращает результат.
Самые используемые команды Ansbile собраны в этом материале.