Ansible

Шпаргалка по Ansible

Ansible

Ansible — это инструмент с открытым исходным кодом для управления конфигурацией, развертывания приложений и автоматизации IT-задач. Он использует простой язык YAML, позволяющий описывать инфраструктуру как код (Infrastructure as Code, IaC).

Установка Ansible

На Ubuntu/Debian

sudo apt update
sudo apt install ansible

На CentOS/RHEL

sudo yum install epel-release
sudo yum install ansible

Проверка версии

ansible --version

Инвентарь (Inventory)

Инвентарь — это список узлов, которыми Ansible будет управлять.

Статический инвентарь

Файл hosts или inventory:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

Динамический инвентарь

Можно использовать скрипты или плагины для динамического получения списка узлов из облачных провайдеров (AWS, GCP, Azure и др.).

Ad-Hoc команды

Используются для выполнения одноразовых задач на удаленных узлах.

Общий синтаксис

ansible <pattern> -m <module> -a "<arguments>"

Примеры

  • Проверка доступности узлов:

    ansible all -m ping
  • Выполнение команды на удаленных узлах:

    ansible webservers -m shell -a "uname -a"

Playbooks

Playbooks — это сценарии, написанные на YAML, описывающие желаемое состояние системы.

Структура Playbook

- hosts: target_hosts
  become: yes  # Повышение привилегий до root
  tasks:
    - name: Описание задачи
      module_name:
        option1: value1
        option2: value2

Пример простого Playbook

- hosts: webservers
  become: yes
  tasks:
    - name: Установить Nginx
      apt:
        name: nginx
        state: present

Запуск Playbook

ansible-playbook playbook.yml

Модули

Ansible имеет множество встроенных модулей для управления различными аспектами системы.

Некоторые распространенные модули

  • package/apt/yum/dnf: Управление пакетами.

  • service/systemd: Управление системными сервисами.

  • user: Управление пользователями.

  • copy: Копирование файлов на удаленные узлы.

  • file: Управление правами доступа к файлам и директориям.

  • template: Развертывание файлов-шаблонов с использованием Jinja2.

Пример использования модуля

- name: Копировать файл конфигурации
  copy:
    src: ./nginx.conf
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: 0644

Переменные

Переменные позволяют параметризовать Playbooks.

Определение переменных

  • Внутри Playbook:

    vars:
      http_port: 80
      max_clients: 200
  • В отдельных файлах (group_vars, host_vars).

Использование переменных

- name: Настроить Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf

В шаблоне nginx.conf.j2:

server {
    listen {{ http_port }};
    # Другие настройки
}

Факты (Facts)

Ansible собирает системную информацию об узлах, называемую "фактами".

Использование фактов

- name: Показать версию ОС
  debug:
    msg: "Версия ОС: {{ ansible_distribution_version }}"

Условия (Conditionals)

Позволяют выполнять задачи на основе определенных условий.

Пример использования

- name: Установить Apache на Debian
  apt:
    name: apache2
    state: present
  when: ansible_os_family == "Debian"

Циклы (Loops)

Позволяют выполнять одну и ту же задачу с разными параметрами.

Пример использования

- name: Создать пользователей
  user:
    name: "{{ item }}"
    state: present
  loop:
    - alice
    - bob
    - charlie

Регистры (Register)

Сохраняют вывод команды для последующего использования.

Пример использования

- name: Проверить доступность сервиса
  shell: systemctl is-active nginx
  register: nginx_status
  ignore_errors: yes

- name: Вывести статус сервиса
  debug:
    msg: "Статус Nginx: {{ nginx_status.stdout }}"

Роли (Roles)

Роли помогают структурировать Playbooks и позволяют переиспользовать код.

Структура роли

roles/
└── role_name/
    ├── tasks/
    │   └── main.yml
    ├── handlers/
    │   └── main.yml
    ├── templates/
    ├── files/
    ├── vars/
    │   └── main.yml
    ├── defaults/
    │   └── main.yml
    ├── meta/
    │   └── main.yml
    └── README.md

Использование роли в Playbook

- hosts: webservers
  roles:
    - role_name

Обработчики (Handlers)

Используются для выполнения действий при возникновении определенных событий, обычно уведомлений notify.

Пример использования

- name: Изменить конфигурацию Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify:
    - Перезапустить Nginx

handlers:
  - name: Перезапустить Nginx
    service:
      name: nginx
      state: restarted

Шаблоны (Templates)

Ansible использует Jinja2 для шаблонизации файлов.

Пример шаблона

nginx.conf.j2:

server {
    listen {{ http_port }};
    server_name {{ domain_name }};
    # Другие настройки
}

Использование шаблона в Playbook

- name: Развернуть конфигурацию Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf

Ansible Vault

Ansible Vault позволяет шифровать секретные данные, такие как пароли или ключи API.

Создание зашифрованного файла

ansible-vault create secrets.yml

Редактирование зашифрованного файла

ansible-vault edit secrets.yml

Использование зашифрованных переменных

- hosts: all
  vars_files:
    - secrets.yml
  tasks:
    - name: Использовать секретный пароль
      debug:
        msg: "Пароль: {{ secret_password }}"

Запуск Playbook с Ansible Vault

ansible-playbook playbook.yml --ask-vault-pass

Фильтры и Функции

Ansible поддерживает различные фильтры для преобразования данных.

Пример использования фильтров

- name: Преобразовать строку в нижний регистр
  debug:
    msg: "{{ 'HELLO WORLD' | lower }}"

Практики лучшего использования

  • Организуйте код: Используйте роли и коллекции для структурирования.

  • Используйте версии: Храните Playbooks в системах контроля версий (Git).

  • Документируйте: Добавляйте описания к задачам и ролям.

  • Тестируйте: Проверяйте Playbooks перед применением в продакшене.

  • Следите за обновлениями: Регулярно обновляйте Ansible и модули.

Полезные команды

  • Проверка синтаксиса Playbook

    ansible-playbook playbook.yml --syntax-check
  • Просмотр фактов об узлах

    ansible all -m setup
  • Запуск Playbook в режиме проверки (Dry Run)

    ansible-playbook playbook.yml --check
  • Увеличение уровня подробности вывода

    ansible-playbook playbook.yml -v      # Уровень 1
    ansible-playbook playbook.yml -vvv    # Уровень 3
    ansible-playbook playbook.yml -vvvv   # Уровень 4 (максимальный)
  • Указание пользовательского инвентаря

    ansible-playbook -i custom_inventory playbook.yml

Ресурсы для дальнейшего изучения


Эта шпаргалка покрывает основные аспекты работы с Ansible. Для углубленного понимания рекомендуется ознакомиться с официальной документацией и практиковаться в написании собственных Playbooks и ролей.

Last updated