Debug Ansible
Данный опус является частью единого цикла заметок o CLI. Для его написания использовалось множество различных источников (скилы крутых специалистов, статьи с тематических сайтов, техническая документация, комментарии с форумов и социальных сетей и т. д и т. п.). К сожалению, указать все источники точно не представляется возможным! По этому, в конце заметки, будет указана ссылка только на основной источник.
Cчитается, что Ansible это крутой инструмент, который может автоматизировать работу, как на сетевом оборудовании так и на серверах. Считается что использовать его очень просто: один раз настроил мастера, подцеепил к нему ноды, разнес их по групаам написал(или позаимствовал у кого-то под них плейбуки) и начал радоваться результатам своей успешно автоматизированной рутинной работы.
На деле же все выглядит несколько сложнее. Допустим, установка ансибла каких-либо трудностей не вызывает, а вот настройка явно не из самых простых. Особенно если на всех серверах нужно организовать доступ по ключу и предполагается использовать для управления нодами учетую запись без привилегий рута.
Пред тем как начать выполнять что либо на нескольких нодах одновременно нужно провести инвентаризацию ховтов в сети и проверить связь между ними(по дефолту эта информация хранится в файле /etc/ansible/hosts :
Вывод команды: ansible-inventory --list -y позволяет получить актуальную информацию о хостах и группах:
ansible-inventory --list -y
Вывод:
all:
children:
ungrouped: {}
webservers:
hosts:
master.vdssytes.ru:
ansible_ssh_host: master.vdssytes.ru
ansible_ssh_user: neroot
noda1.vdssytes.ru:
ansible_ssh_host: noda1.vdssytes.ru
ansible_ssh_user: neroot
Вывод команды: ansible-inventory --list -y c ключем -i позволяет указать другой файл хостов /etc/ansible/hosts2 :
ansible-inventory --list -y -i /etc/ansible/hosts2
Вывод:
all:
children:
debian:
hosts:
master.vdssytes.ru:
ansible_ssh_host: master.vdssytes.ru
ansible_ssh_user: neroot
centos:
hosts:
noda1.vdssytes.ru:
ansible_ssh_host: noda1.vdssytes.ru
ansible_ssh_user: neroot
ungrouped: {}
После того как файл hosts успешно заполнен, нужно проверить связь между всеми нодами:
sudo ansible -m ping all
Проверяем связь между нодами из группы "webservers":
sudo ansible -m ping "webservers"
Проверяем есть ли на всех нодах группы группы "webservers" доступ в сеть и коректность настройки их DNS( на примере домена ya.ru)
sudo ansible -m command -a "ping -w 5 ya.ru" "webservers"
Проверяем связь Аnsible c участниками группы vpn :
sudo ansible -m ping vpn
Можем узнать версию операционной системы для centos или debian:
sudo ansible vpn -m shell -a 'cat /etc/redhat-release'
sudo ansible vpn -m shell -a 'cat /etc/debian_version'
sudo ansible vpn -m shell -a 'uname -a'
Аnsible позволяет узнать всю общую информацию о всех серверах в группе vpn:
sudo ansible vpn -m setup
Аnsible позволяет узнать ip-адреса всех хостов:
sudo ansible -i hosts -m setup -a 'filter=ansible_all_ipv4_addresses' all
Аnsible позволяет узнать сетевые настройки всех хостов:
sudo ansible -i hosts -m setup -a 'filter=ansible_default_ipv4' all
Аnsible позволяет узнать тип ОС всех хостов:
sudo ansible -i hosts -m setup -a 'filter=ansible_distribution' all
Аnsible позволяет узнать версию ОС для всех хостов:
sudo ansible -i hosts -m setup -a 'ansible_distribution_version' all
Предупреждение : Подробнее про то как работает ANSIBLE и его модули , утилиты и плагины можно почитать здесь.
Аnsible позволяет узнать сколько свободной памяти (FREE) доступно на всех серверах:
sudo ansible -i hosts -m setup -a 'filter=ansible_memtotal_mb' all
Аnsible позволяет узнать сколько и какой памяти (RAM) доступно на всех хостах:
sudo ansible -i hosts -m setup -a 'ansible_memory_mb' all
Аnsible позволяет узнать сколько (CPU) доступно на всех хостах:
sudo ansible -i hosts -m setup -a 'filter=ansible_processor' all
Аnsible позволяет узнать всю общую информацию о всех серверах:
sudo ansible all -m setup
Важно!
Пример содержимого файла:
cat ansible.cfg
#[defaults]
#inventory = /etc/ansible/hosts
#host_key_checking = False
#retry_files_enabled = False
#deprecation_warnings = False
[defaults]
inventory = hosts
remote_user = root
private_key_file = ~/.ssh/id_rsa
host_key_checking = False
retry_files_enabled = False
roles_path = ./roles
[diff]
always = false
context = 5
Linux SED
Cпасибо автору!
Источник: