Введение
В этом лабораторном занятии вы узнаете основы Ansible playbooks (плейбуков Ansible). Ansible playbooks - это файлы в формате YAML, которые описывают набор задач, которые должны быть выполнены на удаленных хостах. Они являются основными строительными блоками для сложных рабочих процессов автоматизации ИТ-инфраструктуры. Вы создадите свой первый playbook, поймете его структуру и узнаете, как его выполнить. К концу этого лабораторного занятия у вас будет практический опыт написания и запуска Ansible playbooks, который послужит основой для более продвинутого использования Ansible.
Создание вашего первого Playbook
Начнем с создания простого Ansible playbook (плейбука Ansible), который создаст директорию и файл на локальной машине. Это поможет вам понять базовую структуру playbook и как его выполнить.
Сначала создадим новый файл с именем first_playbook.yml в директории /home/labex/project:
nano /home/labex/project/first_playbook.yml
Эта команда открывает текстовый редактор nano. Если вы не знакомы с nano, не беспокойтесь - это простой текстовый редактор. Вы можете вводить текст прямо в него.
Теперь добавьте следующее содержимое в файл:
---
- name: My First Playbook
hosts: localhost
connection: local
tasks:
- name: Create a directory
file:
path: /home/labex/project/test_directory
state: directory
mode: "0755"
- name: Create a file
copy:
content: "Hello from Ansible!"
dest: /home/labex/project/test_directory/hello.txt
Разберем этот playbook, чтобы понять каждую его часть:
- Символы
---вверху файла отмечают начало файла в формате YAML. YAML - это формат, используемый для Ansible playbooks. name: My First Playbook- это описательное имя для этого play (этапа выполнения). Это помогает вам понять, что делает этот playbook.hosts: localhostуказывает, что этот playbook будет выполняться на локальной машине. В реальной ситуации вы можете указать здесь удаленные хосты.connection: localсообщает Ansible выполнить playbook локально, а не использовать SSH. Это полезно для тестирования и для задач, которые должны выполняться непосредственно на узле управления Ansible.tasks:за которым следует список задач, которые должны быть выполнены. Каждая задача представляет собой действие, которое вы хотите, чтобы Ansible выполнил.- Каждая задача имеет
nameдля описания. Это помогает вам понять, что делает каждая задача и упрощает устранение неполадок. - В задачах используются модули Ansible:
- Модуль
fileиспользуется для создания директории. - Модуль
copyиспользуется для создания файла с определенным содержимым.
- Модуль
Не беспокойтесь, если вы еще не понимаете все модули. По мере продвижения вы узнаете о многих других модулях и их применении.
Сохраните и выйдите из редактора. В nano вы можете сделать это, нажав Ctrl+X, затем Y, а затем Enter.
Теперь запустим этот playbook. В терминале введите:
ansible-playbook /home/labex/project/first_playbook.yml
Эта команда сообщает Ansible выполнить playbook, который мы только что создали. Вы должны увидеть вывод, похожий на следующий:
PLAY [My First Playbook] ******************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Create a directory] ******************************************************
changed: [localhost]
TASK [Create a file] ***********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Этот вывод показывает, что Ansible успешно выполнил наши задачи. Статус "changed" указывает, что Ansible внес изменения в систему (создал директорию и файл).
Если вы хотите вручную проверить результаты, вы можете использовать следующие команды:
ls -l /home/labex/project/test_directory
cat /home/labex/project/test_directory/hello.txt
Первая команда должна показать директорию, которую мы создали, а вторая - содержимое файла, который мы создали.
Понимание структуры Playbook
Теперь, когда вы создали и запустили свой первый playbook (плейбук), давайте углубимся в его структуру. Понимание структуры playbook является важным для написания более сложных автоматизационных задач в будущем.
Ansible playbooks состоят из одного или нескольких plays (этапов выполнения), и каждый play состоит из нескольких ключевых элементов. Отредактируем наш файл first_playbook.yml, чтобы добавить комментарии, объясняющие каждую часть:
nano /home/labex/project/first_playbook.yml
Обновите содержимое следующим образом:
---
## Playbook starts with three dashes
- name: My First Playbook ## Name of the play
hosts: localhost ## Target host(s) for this play
connection: local ## Connection type (local in this case)
tasks: ## List of tasks to be executed
- name: Create a directory ## Name of the first task
file: ## The 'file' module is used for this task
path: /home/labex/project/test_directory ## Path of the directory to create
state: directory ## Desired state (create the directory)
mode: "0755" ## Permissions for the directory
- name: Create a file ## Name of the second task
copy: ## The 'copy' module is used for this task
content: "Hello from Ansible!" ## Content to be written to the file
dest: /home/labex/project/test_directory/hello.txt ## Destination path for the file
Сохраните и выйдите из редактора.
Эта версия playbook с комментариями помогает понять структуру и назначение каждого элемента. Вот несколько важных моментов, которые стоит запомнить:
- Playbook может содержать несколько plays, каждый из которых начинается с дефиса (
-). В данном случае у нас только один play. - Каждый play нацеляется на определенные хосты и определяет список задач. Поле
hostsуказывает, на каких машинах должен выполняться play. - Задачи используют модули Ansible (например,
fileиcopy) для выполнения действий. Ansible имеет множество встроенных модулей для различных целей. - Каждая задача должна иметь описательное имя. Это помогает понять, что делает задача, и упрощает устранение неполадок.
- Отступы важны в файлах YAML. Убедитесь, что ваш playbook имеет правильные отступы. Неправильные отступы могут вызвать ошибки при запуске playbook.
Модуль file является универсальным и может быть использован для создания, изменения или удаления файлов и директорий. В нашем случае мы используем его для создания директории.
Модуль copy используется для копирования файлов в удаленные места или, как в нашем случае, для создания нового файла с определенным содержимым.
Понимание этих базовых структур поможет вам в будущем создавать более сложные playbooks.
Добавление переменных в Playbook
Переменные делают ваши playbooks (плейбуки) более гибкими и повторно используемыми. Они позволяют вам писать playbooks, которые могут адаптироваться к различным сценариям без необходимости изменения самого playbook. Изменим наш playbook, чтобы использовать переменные.
Отредактируйте файл first_playbook.yml:
nano /home/labex/project/first_playbook.yml
Обновите содержимое следующим образом:
---
- name: My First Playbook
hosts: localhost
connection: local
vars:
dir_path: /home/labex/project/test_directory
file_content: "Hello from Ansible! The time is {{ ansible_date_time.iso8601 }}"
tasks:
- name: Create a directory
file:
path: "{{ dir_path }}"
state: directory
mode: "0755"
- name: Create a file
copy:
content: "{{ file_content }}"
dest: "{{ dir_path }}/hello.txt"
- name: Display file content
debug:
msg: "The content of the file is: {{ file_content }}"
Разберем изменения и новые элементы в этом обновленном playbook:
Мы добавили раздел
varsдля определения переменных. Именно здесь вы можете задать значения, которые будут использоваться несколько раз в вашем playbook.dir_pathиfile_contentтеперь являются переменными. Мы можем легко изменить эти значения в одном месте, чтобы повлиять на несколько задач.Мы используем синтаксис
{{ }}для обращения к переменным. Это сообщает Ansible заменить переменную ее значением.Мы использовали встроенную переменную Ansible
ansible_date_time.iso8601для включения текущей временной метки. Ansible предоставляет множество таких переменных, которые вы можете использовать в своих playbooks.Добавлена новая задача с использованием модуля
debug. Модульdebugочень полезен для отображения информации во время выполнения playbook, что может помочь при устранении неполадок.
Использование переменных делает этот playbook более гибким. Например, если вы хотите изменить путь к директории, вам нужно будет изменить его только в разделе vars, а не в каждой задаче.
Сохраните и выйдите из редактора.
Теперь запустим обновленный playbook:
ansible-playbook /home/labex/project/first_playbook.yml
Вы должны увидеть вывод, показывающий выполнение задач, включая отладочное сообщение с содержимым файла и текущей временной меткой. Вывод будет выглядеть приблизительно так:
PLAY [My First Playbook] ******************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Create a directory] ******************************************************
ok: [localhost]
TASK [Create a file] ***********************************************************
changed: [localhost]
TASK [Display file content] ****************************************************
ok: [localhost] => {
"msg": "The content of the file is: Hello from Ansible! The time is 2023-06-09T12:34:56Z"
}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Фактическая временная метка будет отличаться при каждом запуске playbook.
Это демонстрирует, как переменные могут сделать ваши playbooks более динамическими. Содержимое файла теперь включает временную метку, которая будет разной каждый раз, когда вы запускаете playbook.
Резюме
В этом лабораторном занятии вы узнали основы Ansible playbooks (плейбуков Ansible). Вы перешли от создания своего первого простого playbook к пониманию его структуры и использованию переменных для того, чтобы сделать свои playbooks более динамическими и повторно используемыми.
Основные выводы из этого лабораторного занятия:
- Ansible playbooks пишутся в формате YAML и описывают набор задач, которые должны быть выполнены на указанных хостах.
- Playbook состоит из одного или нескольких plays (этапов выполнения), каждый из которых содержит список задач.
- Задачи используют модули Ansible для выполнения действий на целевых хостах. В этом лабораторном занятии мы использовали модули
file,copyиdebug. - Переменные можно определять и использовать в playbooks для повышения гибкости и повторного использования. Они обозначаются с помощью синтаксиса
{{ }}. - Модуль
debugполезен для отображения информации во время выполнения playbook, что может помочь при устранении неполадок. - Правильные отступы важны в файлах YAML и Ansible playbooks.
По мере продолжения изучения Ansible вы обнаружите, что playbooks - это мощный инструмент для автоматизации сложных ИТ-задач. Практикуйте написание playbooks для различных сценариев, чтобы стать более уверенным в использовании их структуры и возможностей. Попробуйте изменить playbooks, которые мы создали сегодня - измените путь к директории, добавьте больше задач или используйте другие модули.
В будущих лабораторных занятиях вы узнаете о более продвинутых функциях playbook, таких как условные операторы, циклы и роли, которые позволят вам создавать еще более мощные и гибкие автоматизационные рабочие процессы.
Помните, ключ к овладению Ansible - это практика и исследование. Не бойтесь экспериментировать с разными модулями и структурами в своих playbooks. Документация по Ansible - отличный ресурс для дальнейшего обучения и развития ваших навыков.


