Создание шаблонов в плейбуках Ansible

Ansible – это современный инструмент управления конфигурацией. Для связи и выполнения команд на управляемых серверах (нодах) он использует только SSH и Python – то есть вам не нужно устанавливать агентское программное обеспечение на удаленные ноды. В этой серии мануалов вы познакомитесь с основными функциями Ansible, которые можно использовать для написания сценариев автоматизации серверов. В конце серии вы найдете практический пример плейбука для автоматизации настройки удаленного веб-сервера Nginx и развертывания на нем статического HTML-сайта.

Примечание: Этот мануал является частью серии по работе с Ansible. Другие мануалы из этой серии вы найдете по тегу ansible-practice. Весь код можно найти в этом репозитории.

Шаблоны позволяют создавать на нодах новые файлы, используя предопределенные модели на основе системы Jinja2. Шаблоны Ansible обычно сохраняются в виде файлов .tpl и поддерживают переменные, циклы и условные выражения.

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

Чтобы испытать эту функцию на практическом примере, создайте новый каталог для хранения файлов, не относящихся к нашему плейбуку, внутри каталога ansible-practice:

mkdir ~/ansible-practice/files

Затем создайте новый файл шаблона для посадочной HTML-страницы. Позже мы создадим плейбук, который настроит наши удаленные ноды для обслуживания этой страницы с помощью Nginx.

nano ~/ansible-practice/files/landing-page.html.j2

В файл шаблона поместите следующие строки:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>{{ page_title }}</title>
  <meta name="description" content="Created with Ansible">
</head>
<body>
    <h1>{{ page_title }}</h1>
    <p>{{ page_description }}</p>
</body>
</html>

Сохраните и закройте файл.

В этом шаблоне используются две переменные, которые нужно определять всякий раз, когда в плейбуке применяется шаблон: это page_title и page_description.

В следующем плейбуке мы настроим необходимые переменные, установим Nginx, а затем применим указанный шаблон для замены стандартной приветственной страницы Nginx, расположенной по адресу /var/www/html/index.nginx-debian.html. Последняя задача использует модуль ufw для включения tcp-доступа на порт 80 (на случай, если у вас включен брандмауэр, как рекомендовано в руководстве по начальной настройке сервера).

Создайте новый файл playbook-11.yml в каталоге ansible-practice:

nano ~/ansible-practice/playbook-11.yml

Добавьте следующий контент в наш новый плейбук:

---
- hosts: all
  become: yes
  vars:
    page_title: My Landing Page
    page_description: This is my landing page description.
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: latest

    - name: Apply Page Template
      template:
        src: files/landing-page.html.j2
        dest: /var/www/html/index.nginx-debian.html

    - name: Allow all access to tcp port 80
      ufw:
        rule: allow
        port: '80'
        proto: tcp

Затем введите следующую команду, чтобы запустить плейбук (не забудьте указать флаг –K, поскольку дял этой операции нужны привилегии sudo):

ansible-playbook -i inventory playbook-11.yml -u 8host -K

BECOME password:

PLAY [all] **********************************************************************************************

TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]

TASK [Install Nginx] ************************************************************************************
changed: [203.0.113.10]

TASK [Apply Page Template] ******************************************************************************
changed: [203.0.113.10]

TASK [Allow all access to tcp port 80] ******************************************************************
changed: [203.0.113.10]

PLAY RECAP **********************************************************************************************
203.0.113.10                : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Когда плей будет выполнен, вы сможете получить доступ к внешнему IP-адресу веб-сервера с помощью своего браузера. Вы увидите такую страницу:

My Landing Page
This is my landing page description.

Это означает, что наш плейбук был выполнен должным образом, а приветственная страница Nginx по умолчанию заменена шаблоном, который мы создали ранее.

Tags: ,

Добавить комментарий