Учебное пособие по Ansible для начинающих: плейбуки и команды.
⚡ Умное резюме
Ansible — это автоматизированная система с открытым исходным кодом, работающая без агентов, которая настраивает серверы по SSH, выполняет команды по запросу и организует сложные развертывания с помощью YAML-плейбуков, ролей и многократно используемых шаблонов в Linux и других системах. Windows инфраструктура.

Ansible — один из наиболее широко используемых инструментов автоматизации с открытым исходным кодом в современном мире. DevOpsAnsible ценится за свою безагентную архитектуру и простые, легко читаемые конфигурационные файлы. В этом руководстве для начинающих по Ansible объясняется, что такое Ansible, как его установить и как использовать команды ad-hoc, плейбуки, роли и шаблоны на практических примерах.
Что такое Ansible?
анзибль Это инструмент автоматизации и оркестровки с открытым исходным кодом для предоставления программного обеспечения, управления конфигурацией и развертывания программного обеспечения. Он настраивает Unix-подобные системы и Windows Ansible — это система, предоставляющая инфраструктуру в виде кода с помощью собственного декларативного языка. Ansible часто сравнивают с инструментами на основе агентов, такими как... Кукольный.
Ansible популярен благодаря простой установке, легкому подключению клиентов и отсутствию необходимости в агентах. Он подключается к клиентам по всему миру. SSHТаким образом, на стороне клиента не требуется специальный агент. Ansible отправляет модули каждому клиенту, модули запускаются локально, а их результат возвращается на сервер Ansible.
Поскольку Ansible использует SSH, он легко подключается к клиентам с помощью SSH-ключей, что упрощает весь процесс. Данные о клиентах, такие как имена хостов или IP-адреса и SSH-порты, хранятся в файлах, называемых файлами инвентаризации. После создания и заполнения файла инвентаризации Ansible может его использовать.
Зачем использовать Ansible?
Вот некоторые важные преимущества использования Ansible:
- Одно из самых существенных преимуществ Ansible заключается в том, что он бесплатен для всех пользователей.
- Для установки и использования не требуются специальные навыки системного администратора, а официальная документация очень подробная.
- Благодаря модульной структуре, включающей плагины, модули, списки инвентаризации и плейбуки, Ansible является отличным помощником для оркестрации больших сред.
- Ansible — это легковесный и стабильный инструмент, не накладывающий никаких ограничений на операционную систему или базовое оборудование.
- Благодаря отсутствию агентов и использованию функций безопасности OpenSSH, система отличается высокой степенью безопасности.
- Ansible отличается плавным процессом обучения, подкрепленным подробной документацией, а также простой в освоении структурой и конфигурацией.
Эти сильные стороны, особенно если сравнивать их с другими. альтернативы AnsibleЭто помогает объяснить его быстрое распространение. Перед установкой полезно понять, как развивался проект.
История Ансибля
Вот важные этапы в истории Ansible:
- Проект Ansible стартовал в феврале 2012 года. Его первоначально разработал Майкл ДеХаан, создатель Cobbler и Func (Fedora Unified Network Controller).
- Компания, первоначально называвшаяся AnsibleWorks Inc., финансировавшая Ansible, была приобретена RedHat в 2015 году, а позже, вместе с RedHat, перешла под управление этой компании. IBM зонтик.
- Сегодня Ansible входит в состав таких дистрибутивов, как Fedora Linux, RHEL, CentOS и других. Oracle Linux.
Важные термины, используемые в Ansible
В этом руководстве по Ansible встречаются следующие термины, и перед началом работы стоит с ними ознакомиться:
Анзибль-сервер
Машина, на которой установлен Ansible и с которой запускаются все задачи и плейбуки.
Модули
Модуль — это команда или набор аналогичных команд Ansible, предназначенных для выполнения на стороне клиента.
Сложность задачи
Задача — это раздел, состоящий из одной процедуры, которую необходимо выполнить.
Роли
Способ организации задач и связанных с ними файлов, позволяющий вызывать их позже в сценарии действий.
Факт
Информация извлекается из глобальных переменных клиентской системы посредством операции gather_facts.
Каталог
Файл, содержащий данные о клиентских серверах Ansible. В последующих примерах он определяется как файл hosts.
Играть
Реализация плана действий.
Handler
Задача, которая вызывается только при наличии уведомителя.
Notifier
Раздел, относящийся к задаче, которая вызывает обработчик при изменении выходных данных.
Тег
Имя, присвоенное задаче, которое можно использовать в дальнейшем для выполнения только этой конкретной задачи или группы задач.
Установка Ansible в Linux
После того, как вы взвесили все варианты и решили использовать Ansible, следующим шагом будет его установка на вашу систему. В следующем кратком руководстве описана установка на наиболее популярную версию Ansible. Linux Распределения.
Установите Ansible в системах Centos/RedHat.
Шаг 1) Установите репозиторий EPEL.
[root@ansible-server ~]# sudo yum install epel-release
Шаг 2) Установите пакет ansible.
[root@ansible-server ~]# sudo yum install -y ansible
Установите анзибль на Ubuntu/Системы Debian
Шаг 1) Обновите пакеты.
$ sudo apt update
Шаг 2) Установите пакет software-properties-common.
$ sudo apt install software-properties-common
Шаг 3) Установите архив персональных пакетов Ansible.
$ sudo apt-add-repository ppa:ansible/ansible
Шаг 4) Установите Ansible.
$ sudo apt update $ sudo apt install ansible
Специальные команды Ansible
Один из самых простых способов использования Ansible — это выполнение специальных команд. Они полезны, когда вам нужно выполнить команду на одном сервере или на группе серверов. Специальные команды не сохраняются для дальнейшего использования, но это быстрый способ взаимодействия с выбранными вами серверами.
В этом руководстве по Ansible используется простой файл hosts для двух серверов, содержащий host1 и host2.
Вы можете убедиться в доступности хостов с сервера Ansible, выполнив команду... ping команда на всех хостах.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Объяснение:
- Статус команды, в данном случае УСПЕХ
- Хост, на котором выполнялась команда
- Команда, отправленная с помощью параметра -m, в данном случае, ping
- С помощью параметра -i вы можете указать файл хостов.
При необходимости вы также можете выполнить ту же команду на отдельном хосте.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Объяснение:
- Параметр Limit можно использовать для выдачи команд только на определенных хостах в файле хоста.
- Имя хоста, определенное в файле инвентаризации.
Если вам нужно быстро скопировать файл в несколько мест назначения, используйте модуль копирования, который работает с SCP. Команда и её вывод выглядят следующим образом:
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/testfile",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
"state": "file",
"uid": 0
}
host2 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/testfile",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
"state": "file",
"uid": 0
}
Объяснение:
- Копировать модуль определен
- Аргументами модуля в данном случае являются абсолютный путь источника и абсолютный путь назначения.
- Вывод команды Ansible, отражающий успех команды копирования и другие детали, такие как контрольные суммы sha1 или md5 для проверки целостности файла и метаданные, такие как владелец, размер или разрешения. Установить пакет на группу серверов не составляет труда. В Ansible есть несколько модулей, которые взаимодействуют с используемыми установщиками, например yum, apt, dnf и т. д.
В следующем примере вы установите пакет с помощью модуля yum на двух хостах CentOS.
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package Arch Version Repository Size\n========================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n========================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
host2 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package Arch Version Repository Size\n========================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n========================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
Объяснение:
- В этом примере используется модуль Yum.
- Он определяет аргументы модуля, и в этом случае вы выбираете имя пакета и его состояние. Например, если состояние отсутствует, пакет будет найден и, если найден, удален.
- Когда он окрашен в желтый цвет, вы увидите вывод команды ansible с измененным состоянием, что в данном случае означает, что пакет был найден и установлен.
- Статус команды установки yum, выданной через ansible. В данном случае был установлен пакет ncdu.x86_64 0:1.14-1.el7.
Конечно, все параметры установщика yum можно использовать через Ansible, включая обновление, установку, последнюю версию и удаление.
В приведенном ниже примере та же команда используется для удаления ранее установленного пакета ncdu.
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package Arch Version Repository Size\n========================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n========================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
host2 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package Arch Version Repository Size\n========================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n========================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
Объяснение:
- Вывод команды yum показывает, что пакет был удален.
Еще одна важная функция Ansible — это возможность собирать информацию о системе. Он собирает данные об оборудовании, программном обеспечении и версиях и сохраняет каждое значение в переменной, которую можно использовать повторно в дальнейшем.
Когда вам потребуется подробная информация о системах, которые будет модифицировать Ansible, модуль настройки получит эти данные из системных переменных.
Анзибль-плейбуки
Анзибль-плейбуки Плейбуки — это способ отправки команд на удалённые системы с помощью скриптов. Плейбуки позволяют настраивать сложные системные среды и повышают гибкость, запуская один скрипт для одной или нескольких систем. Они больше похожи на язык конфигурации, чем на язык программирования.
Команды плейбука используют формат YAML, поэтому синтаксис минимален, но необходимо соблюдать отступы. Как следует из названия, плейбук — это набор сценариев. С помощью плейбука можно назначать определенные роли некоторым хостам и другие роли другим, управляя множеством серверов в одном файле.
Прежде чем перейти к примерам плейбуков, полезно определить задачу. Задачи — это интерфейс для модулей Ansible, отвечающих за роли и плейбуки.
Теперь рассмотрим сценарий Ansible, содержащий одну задачу, включающую несколько заданий, как показано ниже:
---
- hosts: group1
tasks:
- name: Install lldpad package
yum:
name: lldpad
state: latest
- name: check lldpad service status
service:
name: lldpad
state: started
В приведенном выше плейбуке хосты группы 1, указанные в файле hosts, предназначены для установки пакета lldpad с использованием модуля yum. Затем служба lldpad, созданная после установки, запускается с помощью модуля service, который в основном взаимодействует с ансамблем systemd.
Объяснение:
- Группа хостов, на которых будет работать playbook
- Модуль Yum используется в этой задаче для установки lldpad.
- Сервисный модуль используется для проверки работоспособности службы после установки.
Каждый плейбук Ansible работает с файлом инвентаризации. Файл инвентаризации содержит список серверов, разделенных на группы, что обеспечивает лучший контроль над такими деталями, как IP-адрес и SSH-порт для каждого хоста.
Файл инвентаризации для этого примера плейбука выглядит следующим образом. Есть две группы, group1 и group2, каждая из которых содержит хосты host1 и host2 соответственно.
[group1] host1 ansible_host=192.168.100.2 ansible_ssh_port=22 [group2] host2 ansible_host=192.168.100.3 ansible_ssh_port=22
Объяснение:
- Имя группы
- Имя хоста с IP-адресом и портом SSH, в данном случае по умолчанию — 22.
Следующий пример плейбука Ansible содержит два сценария для двух групп хостов. Для первой группы, group1, включен SELinux, и когда он включен, на экране хоста появляется сообщение.
Для второй группы пакет httpd устанавливается только в том случае, если ansible_os_family имеет значение RedHat, а ansible_system_vendor — HP.
Переменные ansible_os_family и ansible_system_vendor собираются с помощью опции gather_facts, и их можно использовать, как в этом условном примере.
---
- hosts: group1
tasks:
- name: Enable SELinux
selinux:
state: enabled
when: ansible_os_family == 'Debian'
register: enable_selinux
- debug:
Imsg: "Selinux Enabled. Please restart the server to apply changes."
when: enable_selinux.changed == true
- hosts: group2
tasks:
- name: Install apache
yum:
name: httpd
state: present
when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'
Объяснение:
- Пример предложения When. В данном случае тип ОС — Debian. Переменная ansible_os_family собирается с помощью функции сбора_фактов.
- Вывод задачи регистрируется для будущего использования под именем Enable_selinux.
- Еще один пример предложения When. В этом случае для пользователя хоста будет отображено сообщение, если SELinux действительно был включен ранее.
- Еще один пример предложения When, состоящего из двух правил.
Помимо задач, существуют также специальные задачи, называемые обработчиками. Обработчик должен иметь уникальное имя во всем плейбуке. Обработчики работают как обычные задачи, но обработчик может получать уведомления через уведомитель.
Если обработчик не получает уведомление во время выполнения плейбука, он не запускается. Однако, если более одной задачи уведомляет обработчик, он запускается только один раз после завершения всех задач.
В приведенном ниже примере конкретная задача содержит раздел уведомлений, который вызывает другую задачу. Если вывод первой задачи изменяется, вызывается задача-обработчик. Распространенный пример — изменение файла конфигурации с последующим перезапуском затронутой службы.
---
- hosts: group2
tasks:
- name: sshd config file modify port
lineinfile:
path: /etc/ssh/sshd_config
regexp: 'Port 28675'
line: '#Port 22'
notify:
- restart sshd
handlers
- name: restart sshd
service: sshd
name: sshd
state: restarted
В этом случае, если первая задача, «sshd config file modify port», изменяется, то есть порт уже не равен 28675, порт изменяется, и задача уведомляет обработчик с тем же именем, который перезапускает службу sshd.
Объяснение:
- Пример уведомления
- Пример обработчика
Ансибл Роли
При работе с большими плейбуками проще разделить задачи на роли. Роли также упрощают повторное использование работы в дальнейшем. Роль — это набор задач, которые можно перемещать из одного плейбука в другой и запускать независимо, хотя и только через файл плейбука.
Роли хранятся в отдельных каталогах и имеют определенную структуру.
[root@ansible-server test2]# tree
.
`-- role1
|-- defaults
| `-- main.yml
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- README.md
|-- tasks
| `-- main.yml
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
7 directories, 8 files
YAML-файл в каталоге defaults содержит переменные по умолчанию, используемые в плейбуке. В каталоге handlers хранятся обработчики, а в каталоге meta — информация об авторе и зависимостях ролей. В каталоге tasks находится основной YAML-файл для роли.
В каталоге tests содержится пример YAML-плейбука и пример файла инвентаризации, и он в основном используется для тестирования перед фактическим созданием роли.
В каталоге vars находится YAML-файл, в котором определены все переменные, используемые ролью. В каталогах templates и files хранятся шаблоны и файлы, используемые задачами в рамках роли.
Для создания дерева каталогов для роли используйте следующую команду, указав имя роли в качестве последнего параметра:
[root@ansible-server test2]# ansible-galaxy init role1
Ansible также хорошо работает с шаблонами и использует Jinja2 в качестве языка шаблонизации.
В следующем примере показано, как выглядит базовый шаблон Jinja2 и как его использовать в роли.
Во время выполнения программы, в зависимости, например, от того, в каком центре обработки данных расположен ваш сервер, вы можете выбрать один из нескольких серверов имен, каждый из которых соответствует определенному центру обработки данных, используя переменную resolver_ip_addresses.
{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}
options timeout:1
options attempts:5
options rotate
В этом примере в каталоге playbook определены несколько переменных, включая resolver_ip_addresses, значения которых зависят от центра обработки данных.
- name: Set resolver for server
template:
src: dns.j2
dest: /etc/resolv.conf
group: root
owner: root
mode: "0644"
tag: resolver
Объяснение:
- Имя шаблона, который будет использоваться. Шаблон находится в каталоге шаблонов пути к роли.
- Путь назначения имени файла, который будет заменен шаблоном, на стороне клиента.
- Разрешения файла назначения
Задачи ролей также могут иметь поле тега с присвоенным именем. Несколько задач могут использовать один и тот же тег, и при запуске плейбука можно указать тег, чтобы выполнялись только задачи, помеченные этим тегом.
Пример использования Ansible
В этом разделе мы проанализируем пример использования базового плейбука Ansible, выполняющего три роли. Цель — дать практический пример применения рассмотренных ранее концепций. Некоторые примеры из этого руководства адаптированы и повторно использованы в данном плейбуке.
Ниже представлена структура каталогов плейбука. Используемый YAML-файл — p4.yml.
[root@ansible-server test_ansible]# ls -lrth total 16K -rw-r--r--. 1 root root 0 Jul 3 10:13 testfile -rw-r--r--. 1 root root 203 Jul 3 13:30 p1.yml -rw-r--r--. 1 root root 125 Jul 3 15:00 hosts -rw-r--r--. 1 root root 488 Jul 3 16:40 p2.yml -rw-r--r--. 1 root root 188 Jul 4 17:33 p4.yml drwxr-xr-x. 5 root root 47 Jul 4 17:35 roles [root@ansible-server test_ansible]# cd roles [root@ansible-server roles]# ls -lrth total 12K drwxr-xr-x. 9 root root 4.0K Jul 4 12:52 httpd drwxr-xr-x. 9 root root 4.0K Jul 4 13:55 selinux drwxr-xr-x. 9 root root 4.0K Jul 4 16:54 resolver
Плейбук содержит три роли. Роль resolver устанавливает конкретный сервер имен на серверах, копируя файл в целевой каталог /etc/resolv.conf. Роль httpd устанавливает пакет httpd с модулем yum, а третья роль включает SELinux и уведомляет вошедшего в систему пользователя о необходимости перезагрузки системы. Каждая роль была создана с помощью команды ansible-galaxy.
Роль преобразователя, задача main.yml:
Роль Httpd, задача main.yml:
Роль Selinux, задача main.yml:
Ниже представлен плейбук p4.yml. Он запускается на всех хостах, если иное не указано в командной строке, работает от имени пользователя root на порту 22 (SSH), собирает информацию перед запуском ролей и запускает все три роли. Каждую роль можно запустить независимо, указав ее тег в командной строке ansible-playbook с помощью параметра –t.
---
- hosts: all
user: root
port: 22
gather_facts: True
roles:
- { role: selinux, tags: selinux }
- { role: httpd, tags: httpd }
- { role: resolver, tags: resolver }
Затем вы можете запустить плейбук p4.yml на двух хостах и проанализировать вывод. Ту же команду можно запустить с параметром –check для пробного запуска, а с параметром -k — если вы хотите использовать аутентификацию по паролю.
Объяснение:
- Команда Ansible-playbook, запускающая p4.yml
- Playbook пропускает роль SELinux, поскольку она уже включена.
- Ansible обнаружил, что пакет httpd уже установлен, поэтому возвращается нормально.
- Резолвер был установлен, а статус резолвера ролей изменился.
Шпаргалка по командам Ansible
Установите репозиторий EPEL в системах Centos/RHEL.
[root@ansible-server ~]# sudo yum install epel-release
Установите пакет ansible в системах Centos/RHEL.
[root@ansible-server ~]# sudo yum install -y ansible
Выполните обновление пакетов в Debian/Ubuntu системы
$ sudo apt update
Установите пакет Software-Properties-Common на Debian/Ubuntu системы
$ sudo apt install software-properties-common
Установить архив персональных пакетов ansible на Debian/Ubuntu системы
$ sudo apt-add-repository ppa:ansible/ansible
Установите ansible на Debian/Ubuntu системы
$ sudo apt update $ sudo apt install ansible
Выпустить ping команда на всех серверах, определенных в файле инвентаризации с именем hosts.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
Выпустить ping команда только на хосте2
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
Скопируйте файл «testfile» на все хосты в файл инвентаря.
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
Установите пакет ncdu на все хосты
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
Удалить пакет ncdu на всех хостах
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
Создайте структуру каталогов для роли с именем role1.
[root@ansible-server test2]# ansible-galaxy init role1
Пробный сценарий p4.yml
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check
Запустите playbook p4.yml с аутентификацией по паролю для всех хостов.
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k















