🅰️ Ansible
Автоматизация без агентов: инвентарь, playbook, модули, роли, ad-hoc команды.
Шпаргалки · Инфраструктура · #ansible #automation #iac
Установка и проверка
pip install ansible
ansible --version
ansible all -i inventory.ini -m ping
Инвентарь (inventory.ini)
[web]
web1 ansible_host=10.0.0.11
web2 ansible_host=10.0.0.12
[db]
db1 ansible_host=10.0.0.21 ansible_user=admin
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Playbook
- name: Настроить веб-серверы
hosts: web
become: true
vars:
app_port: 8080
tasks:
- name: Установить nginx
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
- name: Конфиг
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Перезапустить nginx
- name: Включить службу
ansible.builtin.service:
name: nginx
state: started
enabled: true
handlers:
- name: Перезапустить nginx
ansible.builtin.service: { name: nginx, state: restarted }
Запуск
ansible-playbook -i inventory.ini site.yml
ansible-playbook site.yml --check --diff # пробный запуск
ansible-playbook site.yml --limit web1 --tags nginx
ansible-playbook site.yml -e "app_port=9000" -K # -K пароль sudo
ansible-vault encrypt vars/secret.yml
ansible-galaxy install geerlingguy.docker
Частые модули
| Модуль | Задача |
|---|---|
apt, dnf, package |
пакеты |
copy, template |
файлы |
file |
права, папки, ссылки |
service, systemd |
службы |
user, group |
пользователи |
command, shell |
команды (по возможности используйте модули) |
git, get_url, unarchive |
загрузка |
lineinfile, blockinfile |
правка файлов |
Приёмы
- Идемпотентность: повторный запуск ничего не меняет, если всё уже в нужном состоянии.
- Условия
when:, циклыloop:, регистрация результатаregister:. - Роли:
roles/<имя>/tasks, handlers, templates, defaults.