Новая страница

Управление подмножеством хостов в Ansible
В Ansible есть несколько способов гибко управлять, на каких хостах запускать playbook, без необходимости каждый раз редактировать inventory или создавать отдельные файлы. Это особенно полезно, когда у вас есть большой inventory, но вы хотите ограничить выполнение только на части хостов (например, только на ваших 3 Docker-хостах). Вот основные подходы:
Использование опции --limit в команде ansible-playbook:
n-1-dsw1, n-1-dsw2, n-1-dsw3, то запустите playbook так:ansible-playbook -i inventories/your_inventory.ini playbooks/your_playbook.yml --limit "n-1-dsw1,n-1-dsw2,n-1-dsw3"
--limit принимает запятые для списка хостов или паттерны вроде n-1-dsw* (если все хосты начинаются с n-1-dsw и вы хотите захватить только первые три — уточните паттерн по именам).Группы в inventory:
inventories/production.ini или аналогичном). Это позволит ссылаться на группы вместо перечисления хостов каждый раз.[all_hosts]
n-1-dsw1
n-1-dsw2
n-1-dsw3
other-host1
other-host2
[docker_hosts]
n-1-dsw1
n-1-dsw2
n-1-dsw3
hosts: docker_hosts вместо hosts: all.ansible-playbook -i inventories/production.ini playbooks/your_playbook.yml — выполнится только на группе docker_hosts.hosts: all в playbook и --limit docker_hosts в команде для ограничения.Переменные и conditional в playbook:
when в задачах.group_vars/docker_hosts.yml добавьте is_docker_host: true. Затем в задаче: when: is_docker_host | default(false).--limit или группы проще.Другие советы:
--check в команду, чтобы playbook симулировал изменения без применения.--limit '!other-host1,!other-host2' (с восклицательным знаком для negation).Это позволит вам легко переключаться между "только на 3 Docker-хостах" и "на всех".
Конкретная операция: Копирование конфигурации Docker на хосты n-1-dsw(1,2,3)
Для вашей задачи (создать /etc/docker, записать daemon.json с логами, рестартить Docker) создайте отдельный playbook. Я предполагаю, что хосты — n-1-dsw1, n-1-dsw2, n-1-dsw3 (если имена другие, подставьте). Playbook выполнит всё с правами sudo (через become: yes).
Создайте файл, например, playbooks/configure_docker_logs.yml:
---
- name: Configure Docker logging on specific hosts
hosts: all # Или укажите группу, если она есть, например: docker_hosts
become: yes # Для sudo
tasks:
- name: Create /etc/docker directory if not exists
file:
path: /etc/docker
state: directory
mode: '0755'
- name: Write daemon.json configuration
copy:
dest: /etc/docker/daemon.json
content: |
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
mode: '0644'
- name: Restart Docker service
systemd:
name: docker
state: restarted
Запуск (только на ваших 3 хостах):
ansible-playbook -i inventories/your_inventory.ini playbooks/configure_docker_logs.yml --limit "n-1-dsw1,n-1-dsw2,n-1-dsw3"
--check --diff.--ask-become-pass).Если у вас есть вопросы по настройке или ошибки, предоставьте больше деталей!