Учебник для начинающих - Ansible Playbooks, Variables и Inventory

Beginner S Tutorial Ansible Playbooks



Плейбуки Ansible - это файлы, содержащие задачи, которые запускаются для настройки хостов с помощью Ansible. Плейбуки Ansible написаны в формате YAML. YAML - это очень простой формат файла, как и JSON. Я покажу вам, как выглядят сценарии Ansible YAML в следующем разделе этой статьи.

Файлы Ansible Inventory содержат список хостов, которые вы хотите настроить или управлять с помощью Ansible. Вы также можете сгруппировать эти хосты и управлять ими по группам. Вы также можете передавать разные переменные для каждого хоста или для группы хостов.







В этой статье я покажу вам, как работать с плейбуками Ansible, переменными, файлами инвентаризации и некоторыми распространенными модулями Ansible с практическими примерами. Итак, приступим!



Предпосылки

Если вы хотите попробовать примеры из этой статьи,



1) На вашем компьютере должен быть установлен Ansible.
2) У вас должен быть как минимум хост Ubuntu / Debian и хост CentOS / RHEL 8, настроенный для автоматизации Ansible.





На LinuxHint есть много статей, посвященных установке Ansible и настройке хостов для автоматизации Ansible. Вы можете проверить эти статьи при необходимости для получения дополнительной информации.

Создание каталога проекта

Сначала создайте каталог проекта ~ / проект / с помощью следующей команды:

$mkdir -pv~/проект/пьесы

Перейдите к ~ / проект / каталог следующим образом:

$CD~/проект

Основной файл инвентаризации:

Создайте файл инвентаризации Ansible хозяева в каталоге проекта с помощью следующей команды:

$нанохозяева

Вы можете ввести IP-адреса хостов, которые хотите настроить / автоматизировать с помощью Ansible, в хозяева инвентарный файл.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

По завершении этого шага сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Если вы хотите использовать DNS-имена вместо IP-адресов в файле инвентаризации, вы также можете сделать это.

Если у вас нет работающего DNS-сервера, вы можете использовать / etc / hosts файл на вашем компьютере для локального разрешения DNS.

Для локального разрешения DNS откройте / etc / hosts файл в текстовом редакторе ( нано , в моем случае) следующим образом:

$судо нано /так далее/хозяева

Введите IP-адреса и желаемые имена DNS следующим образом:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Когда вы закончите с этим шагом, нажмите + Икс с последующим А ТАКЖЕ а также .

Откройте файл инвентаря Ansible хозяева следующее:

$нанохозяева

Теперь вы можете ввести DNS-имена хостов, которые вы хотите настроить / автоматизировать с помощью Ansible, в хозяева инвентарный файл.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Когда вы закончите, сохраните файл инвентаризации хостов, нажав + Икс с последующим А ТАКЖЕ а также .

Тестирование подключения ко всем хостам

Теперь вы можете попробовать проверить связь со всеми хостами в файле инвентаризации следующим образом:

$анзибльпринимает все-uанзибль пинг

Как видите, все хосты в файле инвентаризации достижимы. Итак, мы готовы перейти к следующему разделу этой статьи.

Ваш первый Ansible Playbook

Давайте создадим простой сценарий Ansible playbook ping_all_hosts.yaml в пьесы / каталог. Это действие будет пинговать все хосты в хозяева файл инвентаризации, как и раньше.

$нанопьесы/ping_all_hosts.yaml

Введите следующие строки в ping_all_hosts.yaml Файл Ansible playbook:

- хосты: все
пользователь: ansible
задания:
- имя: пинговать все хосты
пинг:

Здесь,

хосты: все - выбирает все хосты из инвентарного файла хозяева .
пользователь: ansible - сообщает Ansible SSH к хостам в файле инвентаризации в качестве анзибль Пользователь.
задания - здесь перечислены все задачи, которые Ansible будет выполнять на хостах. Каждая из задач обычно имеет имя и одна или несколько опций, специфичных для модуля.

Пьеса ping_all_hosts.yaml имеет только одну задачу, пинговать все хосты в файле инвентаризации хозяева . Название задачи Пинговать все хосты и он использует пинг модуль.

В пинг модуль не нуждается ни в каких других опциях. Итак, я оставил его пустым (после двоеточия ничего нет, : )

По завершении этого шага сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Вы можете запустить ping_all_hosts.yaml Ansible playbook следующим образом:

$Ansible-playbookразмещает пьесы/ping_all_hosts.yaml

Как видите, задача ping выполнена успешно на всех хостах в файле инвентаризации.

Простой файл конфигурации Ansible

В предыдущем примере вам пришлось использовать возможность указать Ansible, какой файл инвентаризации использовать. В моем случае это хозяева инвентарный файл.

$Ansible-playbookразмещает пьесы/ping_all_hosts.yaml

Если вы не хотите передавать файл инвентаря с каждый раз, когда вы запускаете Ansible playbook, все, что вам нужно сделать, это установить файл инвентаризации по умолчанию для вашего проекта.

Для этого создайте новый файл конфигурации Ansible. ansible.cfg в корне вашего проекта следующим образом:

$наноansible.cfg

Введите следующие строки в ansible.cfg файл:

[значения по умолчанию]
инвентарь =./хозяева

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Вы можете запустить тот же сценарий Ansible следующим образом:

$пьесы для ansible-playbook/ping_all_hosts.yaml

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

Группировка хостов в файле инвентаризации

До сих пор я показал вам, как запустить набор задач (playbook) на всех хостах в файле инвентаризации. Но что, если вы хотите запустить набор задач на некоторых хостах и ​​другой набор задач на других хостах? Вы можете сгруппировать хосты в файле инвентаризации и запускать различные задачи в группах хостов.

В этом разделе я покажу вам, как группировать хосты в файле инвентаризации и как работать с группами хостов.

Сначала откройте файл инвентаря хозяева следующее:

$нанохозяева

Введите следующие строки в хозяева инвентарный файл:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Здесь я создал две группы хостов: debian10 а также centos8 .

в debian10 группа, у меня два хоста: vm1.nodekite.com а также vm2.nodekite.com

в centos8 группа, у меня два хоста: vm3.nodekite.com а также vm4.nodekite.com

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Теперь мы создадим новую пьесу ping_debian10_hosts.yaml , который будет пинговать хосты, как и раньше, но только хосты в debian10 группа хостов.

Создать пьесу ping_debian10_hosts.yaml в пьесы / каталог следующим образом:

$нанопьесы/ping_debian10_hosts.yaml

Введите следующие строки в ping_debian10_hosts.yaml Пособие по Ansible:

- хосты: debian10
пользователь: ansible
задания:
- name: Пинговать все Debian10хозяева
пинг:

Вместо того хосты: все , Я добавил хосты: debian10 здесь. debian10 это группа хостов. Этот сценарий будет работать только на хостах в debian10 группа хостов.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустите playbook следующим образом:

$пьесы для ansible-playbook/ping_debian10_hosts.yaml

Как видите, только хосты в debian10 группа узлов сети проверяется.

Используя тот же метод, создайте еще одну пьесу ping_centos8_hosts.yaml следующее:

$нанопьесы/ping_centos8_hosts.yaml

Введите следующие строки в ping_centos8_hosts.yaml Пособие по Ansible:

- хосты: centos8
пользователь: ansible
задания:
- имя: Пинговать все CentOS8хозяева
пинг:

Таким же образом я добавил хосты: centos8 здесь. centos8 это группа хостов. Этот сценарий будет работать только на хостах в centos8 группа хостов.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустите playbook следующим образом:

$пьесы для ansible-playbook/ping_centos8_hosts.yaml

Как видите, только хосты в centos8 группа узлов сети проверяется.

Типы Ansible переменных

В Ansible есть разные типы переменных. Основные типы переменных: Переменные Ansible Facts а также Пользовательские переменные .

Переменные Ansible Facts: В зависимости от хоста, на котором работает Ansible, Ansible генерирует переменные фактов Ansible. Переменные Ansible Фактов содержат информацию о хосте, такую ​​как IP-адреса, имя хоста, имя домена, дату, время, переменные среды оболочки и многое другое.

Пользовательские переменные: Это настраиваемые переменные, определяемые пользователем. Вы можете передавать определяемые пользователем переменные из командной строки или с помощью файла инвентаризации.

В основном пользовательские переменные бывают двух типов: Групповые переменные а также Переменные хоста .

Приоритет переменной Ansible

Приоритет переменных Ansible равен : Переменные командной строки > Переменные хоста > Групповые переменные

Если вы установите ту же переменную, что и переменная хоста и переменная группы, переменная хоста будет применена.

Точно так же переменные, которые вы устанавливаете из командной строки при запуске playbook, заменят переменные хоста и группы.

Работа с переменными Ansible Facts

В этом разделе я покажу вам, как работать с переменными фактов Ansible. Итак, приступим!

Вы можете перечислить все переменные Ansible Facts хостов в вашем хозяева файл инвентаризации следующим образом:

$анзибль все-uанзибльнастраивать

Как видите, все переменные Ansible Facts перечислены в формате JSON. Это очень длинный список.

Поскольку список довольно длинный, вы можете открыть его с помощью программы-пейджера, например меньше следующее:

$анзибль все-uанзибльнастраивать| меньше

Теперь вы можете прокручивать вывод вверх, вниз, влево и вправо по мере необходимости.

Вы также можете искать имена переменных на пейджере. Для этого нажмите кнопку / клавишу на клавиатуре. Затем введите строку поиска ( имя хоста в моем случае) и нажмите .

Как видите, переменная фактов Ansible, соответствующая строке поиска, имеет вид ansible_hostname . Вы можете нажать N перейти на следующий матч и п для перехода к предыдущему совпадению с пейджера. Вот как вы находите переменную фактов Ansible, которая вам нужна для вашего проекта Ansible.

Давайте теперь посмотрим, как получить доступ к переменным фактов Ansible.

Создать новую пьесу print_variable1.yaml следующее:

$нанопьесы/print_variable1.yaml

Введите следующие строки в print_variable1.yaml файл:

- хосты: все
пользователь: ansible
задания:
- имя: Печатьимя хоставсех хозяев
отлаживать:
сообщение:'{{ansible_hostname}}'

Здесь я добавил одну задачу Распечатать имя хоста всех хостов . В этой задаче используется Ansible отлаживать модуль для печати сообщения при запуске playbook.

сообщение единственный обязательный параметр отлаживать модуль. В сообщение Параметр принимает строку в кавычках, которая представляет собой сообщение, которое будет напечатано на консоли.

Здесь, {{variable_name}} формат используется для доступа к переменной. В этом случае, {{ansible_hostname}} используется для печати ansible_hostname переменная каждого хоста в файле инвентаризации.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Вы также можете получить доступ к переменной фактов Ansible как ansible_facts [имя_переменной] . Так что ansible_hostname переменная станет ansible_facts [имя хоста] .

Мы можем переписать print_variable1.yaml playbook, как это тоже. Мы получим тот же результат.

- хосты: все
пользователь: ansible
задания:
- имя: Печатьимя хоставсех хозяев
отлаживать:
сообщение:'{{ansible_facts [' имя_переменной ']}}'

Запустите playbook print_variable1.yaml следующее:

$пьесы для ansible-playbook/print_variable1.yaml

Как видите, имя каждого хоста в файле инвентаризации печатается на консоли.

Давайте теперь напечатаем IPv4-адрес по умолчанию для каждого хоста вместе с именем хоста. Как видите, к IPv4-адресу хоста по умолчанию можно получить доступ, используя адрес собственность ansible_default_ipv4 объект.

Создать новую пьесу print_variable2.yaml следующее:

$нанопьесы/print_variable2.yaml

Введите следующие строки в print_variable2.yaml файл:

- хосты: все
пользователь: ansible
задания:
- имя: Печатьимя хоставсех хозяев
отлаживать:
сообщение:'{{ansible_hostname}} - {{ansible_default_ipv4.address}}'

Этот сценарий такой же, как и раньше. Единственное отличие - новая переменная {{ansible_default_ipv4.address}} в сообщение вариант отлаживать модуль.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить print_variable2.yaml playbook следующим образом:

$пьесы для ansible-playbook/print_variable2.yaml

Как видите, IPv4-адрес по умолчанию и имена хостов печатаются на консоли.

Итак, вот как вы работаете с переменными Ansible Facts.

Установка пользовательских переменных из командной строки:

В этом разделе я покажу вам, как установить пользовательские переменные из командной строки при запуске Ansible playbooks.

Сначала создайте новую пьесу print_variable3.yaml следующее:

$нанопьесы/print_variable3.yaml

Введите следующие строки в print_variable3.yaml файл:

- хосты: все
пользователь: ansible
задания:
- имя: Печатькомандалинейная переменная
отлаживать:
сообщение:'Добро пожаловать, {{username}}'

Здесь я использовал отлаживать модуль для печати сообщения Добро пожаловать, {{username}} . имя пользователя - это переменная, которая будет подставлена ​​при запуске playbook.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустите playbook print_variable3.yaml следующее:

$Ansible-playbook-А также 'username = Боб'пьесы/print_variable3.yaml

ЗАМЕТКА: Здесь, -А также опция используется для передачи имя пользователя переменная со значением Боб к пьесе print_variable3.yaml из командной строки.

Как видите, сообщение Добро пожаловать, Боб печатается на консоли.

Давайте теперь узнаем, как передать несколько переменных из командной строки.

Создать новую пьесу print_variable4.yaml следующее:

$нанопьесы/print_variable4.yaml

Введите следующие строки в print_variable4.yaml файл:

- хосты: все
пользователь: ansible
задания:
- name: печать пользовательских переменных
отлаживать:
сообщение:'username = {{username}} http_port = {{http_port}}'

Игра должна быть вам хорошо знакома прямо сейчас. Все, что он делает, это печатает 2 переменные имя пользователя а также http_port на консоли.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Теперь вы можете пройти имя пользователя а также http_port переменная в playbook, используя два разных -А также вариант следующим образом:

$ ansible-playbook-А также 'username = Боб' -А также http_port = 8080
пьесы/print_variable4.yaml

Или вы можете просто разделить переменные пробелом следующим образом:

$ ansible-playbook-А также 'username = Bob http_port = 8080'
пьесы/print_variable4.yaml

Как видите, имя пользователя а также http_port переменные печатаются на консоли.

Работа с пользовательскими групповыми переменными

Скажем, вы хотите добавить некоторые переменные в группу хостов. Это действие очень просто сделать в Ansible.

Сначала откройте свой хозяева файл инвентаризации следующим образом:

$нанохозяева

Введите следующие строки в свой хозяева инвентарный файл:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10: vars]
имя пользователя = Лилия
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
имя пользователя = Боб
http_port =7878

Как видите, я создал новый раздел [debian10: vars] для debian10 группу узлов сети и добавили переменные ( имя пользователя а также http_port ) для debian10 там группа хостов.

Таким же образом я создал новый раздел [centos8: vars] для centos8 группу узлов сети и добавили переменные ( имя пользователя а также http_port ) для centos8 там группа хостов.

Как только вы закончите, сохраните хозяева файл инвентаря, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить print_variable4.yaml следующие пьесы:

$пьесы для ansible-playbook/print_variable4.yaml

Как видите, правильные переменные передаются каждому из хостов в зависимости от их группы хостов.

Работа с пользовательскими переменными хоста

В этом разделе я покажу вам, как установить переменные для определенных хостов в файле инвентаризации.

Сначала откройте хозяева файл инвентаризации следующим образом:

$нанохозяева

Чтобы добавить переменные к определенному хосту (скажем, vm1.nodekite.com ), просто добавьте пробел / табуляцию после имени IP / DNS хоста и введите свои переменные, как показано на снимке экрана ниже.

Вы также можете добавить несколько переменных. Просто разделите каждую переменную пробелом.

Как только вы закончите, сохраните файл инвентаря, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить print_variable4.yaml следующие пьесы:

$пьесы для ansible-playbook/print_variable4.yaml

Как видите, переменные установлены только для vm1.nodekite.com хозяин. К другим хостам применены групповые переменные.

Быстрое создание файлов инвентаризации с помощью диапазонов

Вы можете использовать диапазоны для быстрого создания файлов инвентаризации Ansible, если IP-адреса вашего хоста или имена DNS согласованы (т. Е. Имеют определенный формат).

В предыдущих примерах я использовал хосты vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com а также vm4.nodekite.com . Вместо того, чтобы вводить 4 строки, я мог бы просто ввести vm [1: 4] .nodekite.com в файле инвентаря.

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

$нанохозяева

Удалите все хосты и переменные из файлов инвентаризации.

Теперь мы можем заменить vm1.nodekite.com а также vm2.nodekite.com с участием vm [1: 2] .nodekite.com для debian10 группу узлов следующим образом.

Таким же образом мы можем заменить vm3.nodekite.com а также vm4.nodekite.com с участием vm [3: 4] .nodekite.com для centos8 группа хостов.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить ping_all_hosts.yaml следующее:

$пьесы для ansible-playbook/ping_all_hosts.yaml

Как видите, диапазоны хостов были расширены, когда я запустил playbook.

Хранение переменных в разных файлах

Хранить групповые переменные и переменные хоста в одном файле инвентаризации очень просто. Но, возможно, вам нужно больше гибкости. Особенно, если вы хотите использовать диапазоны в файле инвентаризации, поскольку вы больше не можете устанавливать переменные хоста, если используете диапазоны. Что ж, вы можете хранить групповые переменные и переменные хоста в разных файлах. В этом разделе я покажу вам, как это делается.

По умолчанию Ansible ищет групповые переменные в group_vars / каталог и переменные хоста в host_vars / каталог.

Итак, создайте group_vars / а также host_vars / каталог следующим образом:

$mkdir -pv {хост, группа}_чья

Чтобы установить групповые переменные для debian10 группа хостов, создайте файл debian10 (то же, что и название группы) в group_vars / каталог следующим образом:

$наноgroup_vars/debian10

Введите свои переменные следующим образом:

имя пользователя: Лилия
http_port: 4343

По завершении сохраните файл, нажав + Икс за которым следуют Y и .

Таким же образом, чтобы установить групповые переменные для centos8 группа хостов, создайте файл centos8 (то же, что и название группы) в group_vars / каталог следующим образом:

$наноgroup_vars/centos8

Введите свои переменные следующим образом:

имя пользователя: Боб
http_port: 7878

По завершении сохраните файл, нажав + Икс за которым следуют Y и .

Запустить print_variable4.yaml playbook следующим образом:

$пьесы для ansible-playbook/print_variable4.yaml

Как видите, групповые переменные правильно установлены для каждой группы узлов сети.

Чтобы установить переменные хоста для хоста vm1.nodekite.com , создайте файл vm1.nodekite.com (то же, что имя хоста или IP-адрес) в host_vars / каталог следующим образом:

$наноvm1.nodekite.com

Введите переменные хоста следующим образом:

имя пользователя: Alex
http_port: 7788

По завершении сохраните файл, нажав + Икс за которым следуют Y и .

Запустить print_variable4.yaml playbook следующим образом:

playbooks $ ansible-playbook/print_variable4.yaml
[

Как видите, переменные хоста правильно настроены для хоста. vm1.nodekite.com .

Работа с циклами в Ansible

В этом разделе я покажу вам, как использовать циклы в Ansible.

Сначала создайте новую пьесу loop1.yaml в пьесы / каталог следующим образом:

$нанопьесы/loop1.yaml

Введите следующие строки в loop1.yaml playbook:

- хосты: все
пользователь: ansible
задания:
- имя: Распечатать список пользователей
отлаживать:
сообщение:'Пользователь: {{item}}'
with_items:
- Алекс
- Боб
- Лилия

Здесь у меня есть 1 задача, которая распечатывает список пользователей с помощью цикла.

Чтобы установить значения итерации для задачи, вы используете with_items модуль. Затем вы добавляете значения одно за другим.

with_items:
- Алекс
- Боб
- Лилия

Вы получаете доступ к значению текущей итерации, используя элемент Переменная.

отлаживать:
сообщение:'Пользователь: {{item}}'

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить loop1.yaml playbook следующим образом:

$пьесы для ansible-playbook/loop1.yaml

Как видите, одна и та же задача выполнялась для каждого элемента на каждом хосте. Итак, шлейф рабочий.

Работа с условиями в Ansible

Если вы хотите запускать задачи на основе определенных условий, то этот раздел для вас.

Чтобы запускать задачи по условию, вы можете использовать когда модуль Ansible. Давайте посмотрим на пример этого модуля. Сначала создайте новую пьесу condition1.yaml следующее:

$нанопьесы/condition1.yaml

Введите следующие строки в condition1.yaml playbook:

- хосты: все
пользователь: ansible
задания:
- name: запускать эту задачу только в Debian
отлаживать:
сообщение:'эта задача выполняется в Debian'
когда: ansible_facts['распределение']=='Debian'

Здесь,

ansible_facts [‘distribution’] == ‘Debian’ используется для проверки того, распределение является Debian . Задача будет запущена только в том случае, если дистрибутив Debian.

В ansible_facts [‘distribution’] используется для доступа к переменной Ansible Facts ansible_distribution . Вы также можете проверить версию дистрибутива, используя ansible_distribution_major_version Переменная.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить condition1.yaml playbook следующим образом:

$пьесы для ansible-playbook/condition1.yaml

Как видите, задача выполнялась только на хостах Debian. Задача не выполнялась на хостах CentOS.

Вы также можете проверить несколько условий одновременно и запустить задачу, только если все условия верны. Давайте посмотрим на пример.

Создать новую пьесу condition2.yaml следующее:

$нанопьесы/condition2.yaml

Введите следующие строки в condition2.yaml файл:

- хосты: все
пользователь: ansible
задания:
- name: запускать эту задачу только в Debian10
отлаживать:
сообщение:'эта задача выполняется в Debian 10'
когда: ansible_facts['распределение']=='Debian'
и ansible_facts['distribution_major_version']=='10'

Здесь задача будет запущена только в том случае, если дистрибутив Debian ( ansible_facts [‘distribution’] == ‘Debian’ ) и версия 10 ( ansible_facts [‘distribution_major_version’] == ’10’ ). Если оба условия верны, задача будет запущена. В противном случае задача не запустится.

Я использовал а также ключевое слово, чтобы проверить, выполняются ли здесь оба условия. Если вы хотите проверить, выполняется ли какое-либо из условий, вы можете использовать или ключевое слово вместо этого.

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустите playbook condition2.yaml следующее:

$пьесы для ansible-playbook/condition2.yaml

Как видите, задача выполнялась только на хостах Debian 10.

Давайте изменим сценарий condition2.yaml для запуска задачи только на хостах Debian 8 следующим образом.

Как видите, все хосты были пропущены, так как у меня нет хостов Debian 8 в файле инвентаризации.

Работа с модулем Ansible apt

В подходящий Модуль Ansible используется для установки определенного программного пакета на хосты Ubuntu / Debian. Давайте посмотрим, как использовать этот модуль.

Сначала создайте новую пьесу apt1.yaml в пьесы / каталог следующим образом:

$нанопьесы/apt1.yaml

Введите следующие строки в apt1.yaml playbook:

- хосты: debian10
пользователь: ansible
стать реальностью
задания:
- имя: Установить apache2
apt:
имя: apache2
состояние: последнее

В подходящий модуль требует только имя пакета, который вы хотите установить / обновить / удалить, и штат пакета.

Здесь я пытаюсь установить apache2 упаковка ( имя: apache2 ) на моих хостах Debian 10. Поскольку я пытаюсь установить пакет, а также обновить его, если доступна новая версия, штат должно быть последний .

штат также принимает следующие варианты:

- отсутствующий - Пакет будет удален, если уже установлен.
- последний - Пакет будет обновлен, если доступно обновление. Если пакет еще не установлен, он будет установлен.
- настоящее время - Пакет будет установлен, если еще не установлен. Но пакет не будет обновлен, если доступно обновление.

Обратите внимание, что я добавил стать реальностью в сборнике пьес. Это даст анзибль привилегии пользователя sudo для изменения структуры файловой системы (например, установка / обновление / удаление пакетов). Без стать реальностью , то подходящий модуль не сможет установить apache2 упаковка.

Как только вы закончите, сохраните playbook, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить apt1.yaml playbook следующим образом:

$пьесы для ansible-playbook/apt1.yaml

Как видите, playbook успешно запустился на хостах Debian 10.

Как видите, apache2 пакет установлен на моих хостах Debian 10.

Работа с модулем Ansible dnf / yum

В dnf а также вкуснятина Модуль Ansible используется для установки определенного программного пакета на хосты CentOS / RHEL. Вы можете использовать этот модуль так же, как и подходящий модуль в предыдущем разделе этой статьи.

Оба dnf а также вкуснятина модули принимают одинаковые параметры. Вы можете использовать dnf модуль на хостах CentOS / RHEL 8 и вкуснятина на CentOS / RHEL 7 или старше.

Давайте теперь посмотрим на пример этого модуля.

Сначала создайте новую пьесу dnf1.yaml в пьесы / каталог следующим образом:

$нанопьесы/dnf1.yaml

Введите следующие строки в dnf1.yaml playbook:

- хосты: centos8
пользователь: ansible
стать реальностью
задания:
- name: Установить пакет httpd
dnf:
имя: httpd
состояние: последнее

В dnf а также вкуснятина модуль требует только имя пакета, который вы хотите установить / обновить / удалить, и штат пакета.

Здесь я пытаюсь установить httpd упаковка ( имя: httpd ) на моих хостах CentOS 8. Поскольку я пытаюсь установить пакет и также хотел бы обновить его, если доступна новая версия, значок штат должно быть последний .

штат принимает следующие варианты:

- отсутствующий - Пакет будет удален, если уже установлен.
- последний - Пакет будет обновлен, если доступно обновление. Если пакет еще не установлен, он будет установлен.
- настоящее время - Пакет будет установлен, если еще не установлен. Но пакет не будет обновлен, если доступно обновление.

Обратите внимание, что я добавил стать реальностью в сборнике пьес. Это дает анзибль привилегии пользователя sudo для изменения структуры файловой системы (например, установка / обновление / удаление пакетов). Без стать реальностью , то подходящий модуль не сможет установить httpd упаковка.

Как только вы закончите, сохраните playbook, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить dnf1.yaml playbook следующим образом:

$пьесы для ansible-playbook/dnf1.yaml

Как видите, playbook успешно запустился на хосте CentOS 8.

Работа с сервисным модулем Ansible

В услуга Модуль Ansible используется для запуска, остановки, перезапуска, включения (добавления службы в автозагрузку) и отключения (удаления службы из автозагрузки) служб на ваших хостах.

В предыдущих разделах я показал вам, как установить пакет HTTP-сервера Apache с помощью Ansible подходящий , dnf а также вкуснятина модули. Теперь давайте убедимся, что служба HTTP-сервера Apache запущена и была добавлена ​​в автозагрузку системы.

Я буду работать со своими хостами Debian 10. Но вы можете работать с хостами CentOS 8, если хотите. Просто настройте playbook соответствующим образом.

Сначала создайте новую пьесу Ansible apt2.yaml следующее:

$нанопьесы/apt2.yaml

Введите следующие строки в apt2.yaml playbook:

- хосты: debian10
пользователь: ansible
стать реальностью
задания:
- имя: Установить apache2
apt:
имя: apache2
состояние: последнее
- name: запустить службу apache2
услуга:
имя: apache2
состояние: запущено
enabled: True

Здесь я добавил новую задачу, Запустите службу apache2 .

имя: apache2 - услуга, над которой я работаю, apache2 .

состояние: запущено - служба должна быть запущена.

enabled: True - сервис должен быть добавлен в автозагрузку системы.

В штат Параметр принимает другие значения.

- перезагружен - Сервис должен перезагрузить файлы конфигурации.
- перезапущен - Необходимо перезапустить службу.
- начал - Служба должна быть запущена. Если служба не запущена, запустите службу.
- остановился - Служба должна быть остановлена. Если служба запущена, остановите службу.

Запустите playbook apt2.yaml следующее:

$пьесы для ansible-playbook/apt2.yaml

Как видите, playbook успешно запустился.

Как видите, apache2 служба работает на моих хостах Debian 10.

Работа с модулем копирования Ansible

Ансибл копировать модуль в основном используется для копирования файлов с вашего компьютера на удаленные хосты.

В предыдущем разделе я установил веб-сервер Apache 2 на свои хосты Debian 10. Давайте теперь скопируем index.html в корневой каталог хостов Debian 10.

Сначала создайте новый каталог файлы / следующее:

$mkdir -vфайлы

Создать новый файл index.html в файлы / каталог следующим образом:

$нанофайлы/index.html

Введите следующие строки в index.html файл:


< html >
< голова >
< заглавие >Веб-сервер от Ansible</ заглавие >
</ голова >
< тело >
< h1 >Добро пожаловать в LinuxHint</ h1 >
< п >Этот веб-сервер был развернут с помощью Ansible.</ п >
</ тело >
</ html >

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Создайте новую пьесу Ansible apt3.yaml следующее:

$нанопьесы/apt3.yaml

Введите следующие строки в apt3.yaml файл:

- хосты: debian10
пользователь: ansible
стать реальностью
задания:
- имя: Установить apache2
apt:
имя: apache2
состояние: последнее
- name: скопировать index.html на сервер
копия:
src: ../файлы/index.html
dest:/куда/www/html/index.html
режим: 0644
владелец: www-data
группа: www-data
- name: запустить службу apache2
услуга:
имя: apache2
состояние: запущено
enabled: True

Здесь задача Скопируйте index.html на сервер копирует index.html от файлы / каталог в / var / www / html / каталог хостов Debian 10.

src: ../files/index.html - Путь к исходному файлу.
dest: /var/www/html/index.html - Путь к файлу назначения.
режим: 0644 - Разрешения для файла пользователя (6 - чтение и запись), группы (4 - чтение) и других (4 - чтение).
владелец: www-data - Установите владельца файла на www-data .
группа: www-data - Установите группу файла на www-data .

По завершении сохраните файл, нажав + Икс с последующим А ТАКЖЕ а также .

Запустить apt3.yaml playbook следующим образом:

$пьесы для ansible-playbook/apt3.yaml

Как видите, задача Скопируйте index.html на сервер успешно.

Как видите, index.html файл был скопирован на хосты Debian 10.

Как видите, веб-сервер Debian 10 обслуживает index.html страницу, которую я только что скопировал на хосты Debian 10.

Итак, это основы Ansible. Вы можете узнать больше об Ansible, прочитав официальную документацию по Ansible. Спасибо, что прочитали эту статью.