ini
[webservers]
web1.example.com
web2.example.com
[databases]
db01.example.com ansible_host=192.168.1.10 ansible_user=admin ansible_ssh_pass=secret
[all:vars]
http_port=80
* YAML формат (пример):
yaml
all:
hosts:
web1.example.com:
web2.example.com:
vars:
http_port: 80
webservers:
hosts:
web1.example.com:
web2.example.com:
databases:
hosts:
db01.example.com:
ansible_host: 192.168.1.10
ansible_user: admin
ansible_ssh_pass: secret
apt
, yum
, service
, user
, file
, template
).
* Модули являются идемпотентными.
* Вызываются внутри задач в плейбуках.
* Документацию по модулям можно найти на сайте Ansible или с помощью команды ansible-doc <module_name>
.
my_role/
├── defaults/
│ └── main.yml
├── files/
├── handlers/
│ └── main.yml
├── meta/
│ └── main.yml
├── tasks/
│ └── main.yml
├── templates/
└── vars/
└── main.yml
notify
в задачах.sudo apt update && sudo apt install -y ansible
sudo yum install -y epel-release && sudo yum install -y ansible
ansible-playbook <имя_плейбука>.yml -i <файл_inventory>
* Дополнительные опции:
* -l
или --limit <хост_или_группа>
: Ограничить выполнение плейбука указанными хостами или группами.
* -u
или --user <имя_пользователя>
: Указать пользователя для подключения к управляемым узлам (если не определено в inventory).
* -k
или --ask-pass
: Запросить пароль для подключения по SSH.
* --ask-become-pass
: Запросить пароль для повышения привилегий (sudo).
* -v
, -vv
, -vvv
, -vvvv
: Уровни verbosity (детализации вывода).
* --check
: Режим проверки (dry run) - Ansible сообщает, какие изменения будут внесены, но не выполняет их.
* --diff
: Показать изменения, которые будут внесены в файлы конфигурации.
# Ansible: Автоматизация управления конфигурацией, развертывания приложений и оркестрации
[webservers]
web1.example.com
web2.example.com
[databases]
db01.example.com ansible_host=192.168.1.10 ansible_user=admin ansible_ssh_pass=secret
[all:vars]
http_port=80
yaml
all:
hosts:
web1.example.com:
web2.example.com:
vars:
http_port: 80
webservers:
hosts:
web1.example.com:
web2.example.com:
databases:
hosts:
db01.example.com:
ansible_host: 192.168.1.10
ansible_user: admin
ansible_ssh_pass: secret
apt
, yum
, service
, user
, file
, template
).
* Модули являются идемпотентными.
* Вызываются внутри задач в плейбуках.
* Документацию по модулям можно найти на сайте Ansible или с помощью команды ansible-doc <module_name>
.
my_role/
├── defaults/
│ └── main.yml
├── files/
├── handlers/
│ └── main.yml
├── meta/
│ └── main.yml
├── tasks/
│ └── main.yml
├── templates/
└── vars/
└── main.yml
notify
в задачах.sudo apt update && sudo apt install -y ansible
sudo yum install -y epel-release && sudo yum install -y ansible
ansible-playbook <имя_плейбука>.yml -i <файл_inventory>
* Дополнительные опции:
* -l
или --limit <хост_или_группа>
: Ограничить выполнение плейбука указанными хостами или группами.
* -u
или --user <имя_пользователя>
: Указать пользователя для подключения к управляемым узлам (если не определено в inventory).
* -k
или --ask-pass
: Запросить пароль для подключения по SSH.
* --ask-become-pass
: Запросить пароль для повышения привилегий (sudo).
* -v
, -vv
, -vvv
, -vvvv
: Уровни verbosity (детализации вывода).
* --check
: Режим проверки (dry run) - Ansible сообщает, какие изменения будут внесены, но не выполняет их.
* --diff
: Показать изменения, которые будут внесены в файлы конфигурации.Запуск и остановка сервисов: YAML
Копирование файлов: YAML
handlers:
Развертывание приложений: YAML
- name: Развертывание веб-приложения hosts: appservers tasks: - name: Создание директории приложения file: path: /opt/myapp state: directory owner: appuser group: appuser mode: '0755' become: true - name: Копирование файлов приложения copy: src: /path/to/app_files/ dest: /opt/myapp/ owner: appuser group: appuser mode: '0644' become: true - name: Запуск приложения (например, через systemd) systemd: name: myapp.service state: started become: true
Преимущества Ansible
Простота и легкость обучения: Человекочитаемый синтаксис YAML. Agentless: Нет необходимости устанавливать агентов на управляемых узлах. Мощность и гибкость: Большое количество встроенных модулей и возможность написания собственных. Идемпотентность: Обеспечивает желаемое состояние системы без внесения избыточных изменений. Оркестрация: Поддержка сложных рабочих процессов и взаимодействия между различными системами. Большое сообщество и экосистема: Множество готовых ролей и модулей на Ansible Galaxy. Безопасность: Поддержка различных методов аутентификации и шифрования.
Недостатки Ansible
Зависимость от SSH/WinRM: Требуется настроенная связь с управляемыми узлами. Производительность для очень больших сред: В некоторых случаях может быть менее производительным по сравнению с агентскими системами при выполнении большого количества мелких задач. Обработка сложных сценариев: Для очень специфичных или низкоуровневых задач может потребоваться написание собственных модулей.
Заключение
Ansible - это мощный и удобный инструмент автоматизации, который широко используется для управления конфигурацией, развертывания приложений и оркестрации задач в IT-инфраструктуре. Его agentless архитектура, простота использования и идемпотентность делают его привлекательным выбором для автоматизации как небольших, так и крупных сред. Следующие шаги
Установка Ansible на контрольном узле. Настройка файла inventory для управления целевыми хостами. Написание простых плейбуков для выполнения базовых задач. Изучение основных модулей Ansible (например, apt, yum, service, user, file, copy). Организация автоматизации с помощью ролей. Исследование возможностей Ansible Galaxy для поиска готовых решений.