На этом этапе вы узнаете, как использовать переменные в плейбуке Ansible. Переменные необходимы для того, чтобы сделать автоматизацию гибкой, пригодной для повторного использования, а также более простой для чтения и поддержки. Вместо того чтобы жестко прописывать значения (например, имена пакетов или пути к файлам) непосредственно в задачах, вы можете определить их как переменные и ссылаться на них по всему плейбуку. Мы создадим простой плейбук, который использует переменные для установки веб-сервера Apache (httpd) и развертывания базовой веб-страницы.
-
Переход в каталог проекта
Сначала убедитесь, что вы находитесь в правильном рабочем каталоге. Вся работа в этой лабораторной будет выполняться в каталоге ~/project, который был создан для вас.
cd ~/project
Установите пакет ansible-core.
sudo dnf install -y ansible-core
-
Создание плейбука Ansible
Теперь создадим файл плейбука. Назовем его playbook.yml. Вы можете использовать консольный текстовый редактор, например nano, для создания и редактирования файла.
nano playbook.yml
Эта команда откроет пустой файл в редакторе nano. Добавьте начальную часть плейбука. В этом разделе определяется имя сценария (play), целевой хост (localhost, так как мы запускаем его на той же машине) и раздел vars, где мы определим наши переменные.
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
Разбор структуры плейбука:
hosts: localhost: Указывает, что плейбук должен выполняться на локальной машине.
become: true: Указывает Ansible использовать повышение привилегий (аналог sudo) для задач, что необходимо для установки программного обеспечения.
vars: Это словарь, где мы определяем пары «ключ-значение» для переменных. Мы определили web_pkg для имени пакета и web_content для содержимого нашей тестовой веб-страницы.
-
Добавление задач в плейбук
Затем, под разделом vars, добавьте tasks (задачи), которые будут использовать эти переменные. Первая задача установит пакет Apache, а вторая создаст файл index.html. Добавьте следующий блок tasks в ваш файл playbook.yml, оставаясь в редакторе nano.
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
Обратите внимание, как мы используем {{ variable_name }} для обращения к ранее определенным переменным. Это шаблонизация Jinja2, которую Ansible использует для переменных. Это делает определения задач универсальными; если бы вы захотели установить Nginx вместо Apache, вам нужно было бы изменить только переменную web_pkg, а не саму задачу.
-
Проверка и сохранение плейбука
Ваш полный файл playbook.yml теперь должен выглядеть так. Еще раз проверьте содержимое и отступы, так как YAML очень чувствителен к пробелам.
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
Чтобы сохранить файл в nano, нажмите Ctrl+X, затем Y для подтверждения изменений и, наконец, Enter для записи файла под именем playbook.yml.
-
Проверка синтаксиса плейбука
Перед запуском плейбука всегда полезно проверить его синтаксис на наличие ошибок.
ansible-playbook --syntax-check playbook.yml
Если синтаксис верен, вы увидите путь к файлу плейбука в выводе, что подтверждает его корректность:
playbook: playbook.yml
Если вы видите ошибки, снова откройте файл с помощью nano playbook.yml и исправьте их. Обратите особое внимание на правильные отступы (обычно два пробела).
-
Запуск плейбука
Теперь выполните плейбук. Ansible подключится к localhost, прочитает переменные и выполнит задачи.
ansible-playbook playbook.yml
Вы должны увидеть вывод, указывающий на успешное выполнение каждой задачи. Статус changed означает, что Ansible внес изменения в систему, например, установил пакет или создал файл.
PLAY [Deploy Apache using variables] *******************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Install the latest version of Apache] ************************************
changed: [localhost]
TASK [Create a basic index.html file] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Если вы запустите плейбук второй раз, задачи должны сообщить ok вместо changed, так как пакет уже установлен, а файл уже содержит правильное содержимое. Это демонстрирует идемпотентность Ansible.
-
Ручная проверка конфигурации
Хотя плейбук завершен, вы можете вручную проверить, что задачи сработали как ожидалось. Сначала проверьте, был ли установлен пакет httpd:
rpm -q httpd
Вывод должен показать имя пакета и версию:
httpd-2.4.57-7.el9.x86_64
Затем проверьте содержимое файла index.html:
cat /var/www/html/index.html
Вывод должен соответствовать значению вашей переменной web_content:
Hello from Ansible Variables
Вы успешно использовали переменные в плейбуке Ansible для настройки системы.