Skip to content

Лабораторная работа №8: Динамическая конфигурация с шаблонами

Научиться использовать шаблоны Ansible (templates) для создания динамических конфигурационных файлов, что позволяет управлять параметрами развертывания (версии, порты) через переменные в плейбуке.

Основные теоретические положения

Section titled “Основные теоретические положения”

В отличие от модуля copy, который просто копирует файлы, модуль template сначала обрабатывает файл на управляющем узле с помощью движка шаблонов Jinja2, и только потом копирует результат на целевой хост. Это позволяет использовать в файлах переменные, циклы и условия.

Задания для выполнения

Section titled “Задания для выполнения”
  1. Создание шаблона (30 мин):

    • На Main-server создайте директорию templates в ansible-project.
    • Переместите ваш docker-compose.yml из ansible-project/files в ansible-project/templates/docker-compose.j2.
    • Откройте docker-compose.j2 и замените статичные версии образов и порт на переменные:
      # Файл: templates/docker-compose.j2
      services:
      ghost:
      image: ghost:{{ ghost_version }} # Переменная для версии
      ports:
      - "{{ ghost_port }}:2368" # Переменная для порта
      # ... остальное без изменений
      db:
      image: mysql:{{ mysql_version }}
      # ... остальное без изменений
  2. Написание плейбука с шаблоном (40 мин):

    • Создайте плейбук deploy_ghost.yml.
    • В секции vars определите значения для переменных, которые вы использовали в шаблоне.
    • Используйте модуль template для генерации docker-compose.yml на целевом хосте.
    deploy_ghost.yml
    ---
    - hosts: web
    become: yes
    vars:
    project_path: "/home/{{ ansible_user }}/ghost-project"
    ghost_version: "5.75.2"
    mysql_version: "8.0"
    ghost_port: "8080"
    tasks:
    - name: Create project directory
    file:
    path: "{{ project_path }}"
    state: directory
    owner: "{{ ansible_user }}"
    group: "{{ ansible_user }}"
    - name: Generate docker-compose.yml from template
    template:
    src: templates/docker-compose.j2
    dest: "{{ project_path }}/docker-compose.yml"
    - name: Copy .env file (пока оставляем так)
    copy:
    src: files/.env
    dest: "{{ project_path }}/.env"
    - name: Run docker-compose up
    community.docker.docker_compose:
    project_src: "{{ project_path }}"
    state: present
  3. Запуск и проверка (20 мин):

    • Запустите плейбук.
    • Подключитесь к Web-node, откройте /home/user/ghost-project/docker-compose.yml и убедитесь, что вместо {{...}} там стоят реальные значения (5.75.2, 8080 и т.д.).
    • Проверьте, что блог доступен по порту 8080.
  1. В чем ключевое отличие модуля template от copy?
  2. Что такое Jinja2?
  3. Как можно изменить версию разворачиваемого приложения Ghost, используя новый плейбук? Нужно ли для этого редактировать docker-compose.j2?