Ansible, Playbook
Подготовка к работе
- Работа в операционной системе семейства Linux;
- Уставленные Docker, Docker Compose;
- Установленный пакет Python3.
Отчет
Отчет в формате docx. Обязательное содержимое отчета:
- Фамилия и инициалы студента, номер группы, номер варианта;
- План и задачи лабораторной работы;
- Краткое описание хода выполнения работы;
- Скриншоты результатов заданий и ответы на вопросы задания.
Дополнительные материалы
Для выполнения лабораторной работы необходимы будут материалы лекций:
Подготовка проекта
-
Скачать проект DevOps на локальную машину:

-
Разархивировать проект и зайти в папку с проектом:
cd src/labs/ansibleСтруктура директории
├── ansible
│ ├── ansible.cfg
│ ├── Dockerfile
│ ├── inventory
│ │ ├── all_vars
│ │ ├── ansible_master_vars
│ │ ├── application_vars
│ │ ├── database_vars
│ │ └── workers
│ └── playbooks
│ ├── app
│ │ ├── app.py
│ │ ├── env.j2
│ │ └── requirements.txt
│ ├── mysql
│ │ ├── dump.sql
│ │ ├── permissions.sql
│ │ └── root_cnf.j2
│ ├── nginx
│ │ └── nginx.conf.j2
│ ├── playbook-application.yml
│ └── playbook-database.yml
├── docker-compose.yml
├── lab6-agent
│ ├── build.sh
│ └── Dockerfile
└── README.MD
Работу можно выполнять:
- на виртуальной машине (тогда с помощью
scpскопируйте папку из хостовой машины в виртуальную машину или выполните клонирование репозитория методички в виртуальную машину); - в хостовой операционной системе через Docker Desktop.
Установка lab6-agent и проверка тестового стенда
cd lab6-agent
# собираем образ базового контейнера для лабы
./build.sh
Поднимаем тестовый стенд:
cd ../
docker-compose up -d
После успешной компиляции образов и старта кластера:
docker-compose down
Задачи лабораторной работы
Задание 1: Поднять кластер и установить тестовую базу данных
Поднимаем тестовый стенд:
docker-compose up -d --scale app=3
О том, как работает горизонтальное масштабирование в Docker Compose, можно почитать здесь. Делаем листинг запущенных контейнеров:
docker ps

Находим контейнер ansible-ansible-1 или ansible_ansible_1 (в разных реализациях docker-compose бывает по разному).
Важно! Необходимо заменить в инвентори файле на _ или - в зависимости от названия в системе.
Заходим на хост с ансиблем:
docker exec -it `docker ps -aqf "name=ansible-ansible-1"` bash
# или
docker exec -it `docker ps -aqf "name=ansible_ansible_1"` bash
Ad-hoc команды
Ad-hoc - вызов отдельных команд.
ping - проверяем доступность хостов инвернтори:
ansible all -m ping
Пример вывода:
ansible-app-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ansible-app-3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ansible-app-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Команда uptime - проверяем сколько времени поднят сервер:
ansible all -m command -a 'uptime'
Пример вывода:
ansible-app-2 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
ansible-app-1 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
ansible-app-3 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
Запускаем плейбук для установки базы:
ansible-playbook /playbooks/playbook-database.yml
Плейбук поставит и установит базу на хост ansible_app_3.
Проверяем заходим на хост с базой (из масер-хоста ansible: ansible_ansible_1):
ssh ansible_app_3
На хосте заходим в клиент базы mysql:
mysql
выбираем созданную базу testdb:
mysql> use testdb
Пример вывода:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Сделаем SELECT из тестовой таблицы
mysql> select * from test;
Пример вывода
+--------------------+
| message |
+--------------------+
| Ansible To Do List |
| Get ready |
| Ansible is fun |
+--------------------+
3 rows in set (0.00 sec)
Задание 2: Подготовить работу приложений
Запускаем плейбук для установки приложений:
ansible-playbook /playbooks/playbook-application.yml
Проверим что процесс работает на хосте:
ssh ansible_app_1
После логина найдем что процесс запущен:
ps ax | grep python
И убедимся что порт 5000 открыт:
netstat -nlp | grep 5000
Для проверки, что приложение запущено на всех хостах и чтобы не проверять по одному, воспользуемся adhoc командой. C помощью утилиты curl проверим работу сервиса и загрузку данных из базы для всех нод:
ansible application -a "curl localhost:5000" -m shell