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
: Показать изменения, которые будут внесены в файлы конфигурации.yaml
- name: Установка пакета nginx
hosts: webservers
become: true
tasks:
- name: Обновление кэша apt
apt:
update_cache: yes
- name: Установка пакета nginx
apt:
name: nginx
state: present
yaml
- name: Управление сервисом apache2
hosts: webservers
become: true
tasks:
- name: Запуск сервиса apache2
service:
name: apache2
state: started
- name: Остановка сервиса apache2
service:
name: apache2
state: stopped
yaml
- name: Копирование файла конфигурации
hosts: webservers
tasks:
- name: Копирование nginx.conf
copy:
src: /path/to/nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify: restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
become: true
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 - это мощный и удобный инструмент автоматизации, который широко используется для управления конфигурацией, развертывания приложений и оркестрации задач в IT-инфраструктуре. Его agentless архитектура, простота использования и идемпотентность делают его привлекательным выбором для автоматизации как небольших, так и крупных сред.
apt
, yum
, service
, user
, file
, copy
).