Continue¶
Пользователь Ansible создаёт определённые «плейбуки» (playbook) в формате YAML с описанием требуемых состояний управляемой системы. «Плейбук» — это описание состояния ресурсов системы, в котором она должна находиться в конкретный момент времени, включая установленные пакеты, запущенные службы, созданные файлы и многое другое. Ansible проверяет, что каждый из ресурсов системы находится в ожидаемом состоянии и пытается исправить состояние ресурса, если оно не соответствует ожидаемому.
Для выполнения задач используется система модулей. Каждая задача представляет собой имя задачи, используемый модуль и список параметров, характеризующих задачу. Система Ansible поддерживает переменные, фильтры обработки переменных (поддержка осуществляется библиотекой Jinja2), условное выполнение задач, параллелизацию, шаблоны файлов. Адреса и настройки целевых систем содержатся в файлах «инвентаря» (inventory). Поддерживается группирование. Для реализации набора сходных задач существует система ролей.
Подключение к удаленным узлам
Ansible взаимодействует с удаленными машинами по протоколу SSH. По умолчанию Ansible использует собственный OpenSSH и подключается к удаленным машинам, используя ваше текущее имя пользователя, так же, как и ОНА. Действие: проверьте свои SSH-соединения
Подтвердите, что вы можете подключиться по SSH ко всем узлам в вашем инвентаре, используя одно и то же имя пользователя. При необходимости добавьте свой открытый SSH-ключ в файл authorized_keys в этих системах.
Пример
На компьютерах предприятии установлены ОС Centos и Debian. Centos - 192.168.0.10 - 192.168.0.20 Debian - 192.168.0.21 - 192.168.0.30 С помощью ansible, установленного на SRV (Centos8) создать сценарии автоматизации работы:
по установке программного обеспечения: lynx,vim,curl,tcpdump,wget
Решение:
На всех клиентах
Обозначения:
SRV: Сервер ansible - компьютер с установленным ansible Клиент - управляемое устройство
Настройка подключение по SSH¶
vim /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
systemctl restart sshd
если необходимо
setenforce 0
Создать на клиентах и сервере (на котором установлен ansible) учетную запись, под которой будет выполняться управление работой (например ansible):
- ::
useradd ansible passwd ansible
Дать право пользователю ansible на беспарольный запуск sudo команд
visudo
ansible ALL=(ALL) NOPASSWD:ALL
Сгенерировать ключ на сервере
ssh-keygen-t rsa -b 4096
Скопировать ключ на клиентов
ssh-copy-id ip_client
Заполнить инвентарный файл (используется при выполнении сценариев)
по умолчанию /etc/ansible/hosts
[centos]
ip1
ip2
ip3
FQDN1
FQDN2
FQDN3
[debian]
ip1
ip2
ip3
FQDN1
FQDN2
FQDN3
группы all и ungrouped - группы по умолчанию Все и “все, кто не в группе”
если необходимо разместить инвентраный файл в другом каталоге, то необходимо указать путь в /etc/ansible/ansible.cfg
Раздел [default] * inventory=<Путь> * Можно использовать $HOME
- ::
[default] inventory = $HOME/hosts …
Проверка связи:
ansible all -m ping
Модули Ansible: установка ПО
ansible.builtin.package:
- name: <Имя пакета>
- state: <Состояние>
* Возможные состояния:
present - установка
absent - удаление
Пример:
vim instsoft.yaml
- name: Install software
hosts: centos
become:yes
tasks:
- name: Install tcpdump
ansible.builtin.package:
name: tcpdump
state: present
- name: Remove firewalld
ansible.builtin.package
name: firewalld
state: absent
ansible-playbook instsoft.yaml
Note
Возможне причины неправильной работы: запуск playbook без sudo, неправильное имя пакета, нет ключа
yum:
name: <Имя пакета>
state: <Состояние>
enablerepo: <Репозиторий>
Возможные состояния
absent - удален
installed - установлен
latest - обновлен
- name: Install software
hosts: centos
become:yes
tasks:
- name: Install Apache on C8
yum:
name: httpd
state: installed
- name: Remove soft
yum:
name: firewalld
state: absent
**Ansible: управление службами **
ansible.builtin.systemd:
name: <Имя службы>
state: <Состояние>
enabled: < yes | no >
daemon_reload: < yes | no >
Cостояния
reloaded / restarted /
started / stopped
Автозапуск: yes / no
Обновление конфигурации
Пример:
- name: Install software
hosts: centos
become:yes
tasks:
- name: Start apache
ansible.builtin.systemd:
name: httpd
state: started
- name: Ensure autostart BIND
ansible.builtin.systemd:
name: named
state: started
enable: yes
Проверка сценария
–list-hosts
Перечисление хостов, на которых будет выполнен сценарий
–list-tasks
Перечисление задач к выполнению
–syntax-check
Проверка синтаксиса
Применение переменных
” {{ <Переменная> }} “
Применяется в файлах сценария и шаблонах
На момент вызова должна быть определена
Установка значения:
ansible-playbook -e <Переменная>=<Значение>
Может быть указана в inventory
[centos]
ip1
ip2
ip3
[centos:vars]
target_package = httpd
[debian]
ip1
ip2
ip3
[debian:vars]
target_package = apache2
Использование:
- ::
vim variablesoft.yaml
name: Install software hosts: all become:yes tasks:
name: Install apache ansible.builtin.package:
name: “{{ target_package }}” state: present
ansible-playbook variablesoft.yaml

