🅰️ 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.