На этом шаге вы напишете свой первый Ansible Playbook. Плейбук — это файл, написанный в формате YAML, который описывает набор задач, выполняемых на управляемых хостах. Вы создадите плейбук, который установит веб-сервер Apache (httpd) и запустит его службу на машине localhost, определенной в вашей инвентаризации.
-
Сначала используйте текстовый редактор nano для создания нового файла с именем apache.yml. Этот файл будет содержать ваш плейбук.
nano apache.yml
-
В редакторе nano вы определите "play" (игру). Play — это основная единица плейбука, которая сопоставляет группу хостов с набором задач. Добавьте следующее содержимое в apache.yml.
---: Это стандартный маркер YAML, указывающий на начало документа.
- name: ...: Это начало вашего play. Присвоение ему описательного имени является лучшей практикой.
hosts: webservers: Это указывает Ansible выполнить этот play на всех хостах из группы webservers из вашего файла инвентаризации.
become: true: Это инструктирует Ansible использовать повышение привилегий (например, sudo) для выполнения задач. Это необходимо для таких действий, как установка программного обеспечения или управление службами.
tasks:: Этот ключевое слово начинает список выполняемых задач.
---
- name: Install and start Apache web server
hosts: webservers
become: true
tasks:
-
Теперь добавьте задачи в ваш плейбук. Каждая задача — это одно действие, вызывающее модуль Ansible. Отступы критически важны в YAML, поэтому убедитесь, что задачи правильно отступлены под секцией tasks:.
- Задача 1: Установить httpd. Эта задача использует модуль
ansible.builtin.dnf для обеспечения установки пакета httpd. Параметр state: present означает, что Ansible установит пакет, если он отсутствует, и ничего не будет делать, если он уже установлен.
- Задача 2: Запустить службу httpd. Эта задача использует модуль
ansible.builtin.service. state: started гарантирует, что служба запущена, а enabled: true гарантирует, что она будет автоматически запускаться при загрузке системы.
Добавьте следующие задачи в ваш файл apache.yml, непосредственно под строкой tasks::
- name: Install httpd package
ansible.builtin.dnf:
name: httpd
state: present
- name: Start and enable httpd service
ansible.builtin.service:
name: httpd
state: started
enabled: true
-
Ваш полный плейбук apache.yml теперь должен выглядеть следующим образом. Внимательно проверьте отступы.
---
- name: Install and start Apache web server
hosts: webservers
become: true
tasks:
- name: Install httpd package
ansible.builtin.dnf:
name: httpd
state: present
- name: Start and enable httpd service
ansible.builtin.service:
name: httpd
state: started
enabled: true
Сохраните файл и выйдите из nano (Ctrl+O, Enter, Ctrl+X).
-
Перед запуском плейбука хорошей практикой является проверка его на наличие синтаксических ошибок с помощью команды ansible-playbook с флагом --syntax-check.
ansible-playbook --syntax-check apache.yml
Если синтаксис правильный, команда выведет имя файла плейбука без ошибок.
playbook: apache.yml
-
Теперь выполните плейбук.
ansible-playbook apache.yml
Ansible выполнит задачи. Поскольку это первый запуск, вы увидите статус changed для обеих задач, что указывает на изменение состояния системы.
PLAY [Install and start Apache web server] *************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Install httpd package] ***************************************************
changed: [localhost]
TASK [Start and enable httpd service] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Наконец, проверьте, что веб-сервер Apache запущен, используя curl для запроса страницы по умолчанию с localhost.
curl http://localhost
Вы должны увидеть стандартную тестовую страницу Apache, что подтверждает успешную работу вашего плейбука.
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Test Page</h1>
<p>This is the default test page for the Apache HTTP server.</p>
</body>
</html>