Лабораторная работа №8: Динамическая конфигурация с шаблонами
Цель работы
Section titled “Цель работы”Научиться использовать шаблоны Ansible (templates) для создания динамических конфигурационных файлов, что позволяет управлять параметрами развертывания (версии, порты) через переменные в плейбуке.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Модуль template
Section titled “1. Модуль template”В отличие от модуля copy, который просто копирует файлы, модуль template сначала обрабатывает файл на управляющем узле с помощью движка шаблонов Jinja2, и только потом копирует результат на целевой хост. Это позволяет использовать в файлах переменные, циклы и условия.
- Синтаксис Jinja2: Переменные вставляются в двойных фигурных скобках:
{{ my_variable }}. - Рекомендуемая литература: Templating (Jinja2) (Документация Ansible)
Задания для выполнения
Section titled “Задания для выполнения”-
Создание шаблона (30 мин):
- На
Main-serverсоздайте директориюtemplatesвansible-project. - Переместите ваш
docker-compose.ymlизansible-project/filesвansible-project/templates/docker-compose.j2. - Откройте
docker-compose.j2и замените статичные версии образов и порт на переменные:# Файл: templates/docker-compose.j2services:ghost:image: ghost:{{ ghost_version }} # Переменная для версииports:- "{{ ghost_port }}:2368" # Переменная для порта# ... остальное без измененийdb:image: mysql:{{ mysql_version }}# ... остальное без изменений
- На
-
Написание плейбука с шаблоном (40 мин):
- Создайте плейбук
deploy_ghost.yml. - В секции
varsопределите значения для переменных, которые вы использовали в шаблоне. - Используйте модуль
templateдля генерацииdocker-compose.ymlна целевом хосте.
deploy_ghost.yml ---- hosts: webbecome: yesvars:project_path: "/home/{{ ansible_user }}/ghost-project"ghost_version: "5.75.2"mysql_version: "8.0"ghost_port: "8080"tasks:- name: Create project directoryfile:path: "{{ project_path }}"state: directoryowner: "{{ ansible_user }}"group: "{{ ansible_user }}"- name: Generate docker-compose.yml from templatetemplate:src: templates/docker-compose.j2dest: "{{ project_path }}/docker-compose.yml"- name: Copy .env file (пока оставляем так)copy:src: files/.envdest: "{{ project_path }}/.env"- name: Run docker-compose upcommunity.docker.docker_compose:project_src: "{{ project_path }}"state: present - Создайте плейбук
-
Запуск и проверка (20 мин):
- Запустите плейбук.
- Подключитесь к
Web-node, откройте/home/user/ghost-project/docker-compose.ymlи убедитесь, что вместо{{...}}там стоят реальные значения (5.75.2,8080и т.д.). - Проверьте, что блог доступен по порту
8080.
Контрольные вопросы
Section titled “Контрольные вопросы”- В чем ключевое отличие модуля
templateотcopy? - Что такое Jinja2?
- Как можно изменить версию разворачиваемого приложения Ghost, используя новый плейбук? Нужно ли для этого редактировать
docker-compose.j2?