Учебное пособие по Ansible для начинающих: плейбуки и команды.

⚡ Умное резюме

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

  • 🧩 Без агента Archiтекстура: Ansible подключается к клиентам по SSH и распространяет модули, поэтому на управляемых узлах не требуется устанавливать агентское программное обеспечение.
  • 📥 Установка: Настройте Ansible на управляющем узле с помощью yum и EPEL в CentOS или RHEL, или с помощью apt и PPA. Ubuntu или Debian.
  • Специальные команды: Выполняйте разовые задачи, такие как: pingДля копирования, копирования или использования yum в рамках всего инвентаря используйте синтаксис модуля ansible -m.
  • 📜 Пособия: Опишите желаемое состояние в YAML-плейбуках, которые группируют плейбуки, задачи и модули для согласованной настройки множества серверов.
  • 🧱 Роли и шаблоны: Разделите большие плейбуки на многократно используемые роли, созданные с помощью ansible-galaxy, и сгенерируйте файлы конфигурации с помощью шаблонов Jinja2.
  • 🔁 Информация об участниках и факты: Запускайте обработчики событий с помощью уведомлений об изменениях и используйте переменные gather_facts для условной, повторяемой автоматизации.
  • 🎯 Тематическое исследование: Один плейбук p4.yml может запускать роли SELinux, httpd и Resolver на всех хостах, причем каждая из них управляется тегом.

Учебное пособие по Ansible для начинающих, охватывающее установку, команды ad-hoc, плейбуки, роли и шаблоны.

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

Установите Ansible в системах Centos/RedHat.

Установите анзибль на 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"
}

Специальные команды Ansible

Объяснение:

  1. Статус команды, в данном случае УСПЕХ
  2. Хост, на котором выполнялась команда
  3. Команда, отправленная с помощью параметра -m, в данном случае, ping
  4. С помощью параметра -i вы можете указать файл хостов.

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

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Специальные команды Ansible

Объяснение:

  1. Параметр Limit можно использовать для выдачи команд только на определенных хостах в файле хоста.
  2. Имя хоста, определенное в файле инвентаризации.

Если вам нужно быстро скопировать файл в несколько мест назначения, используйте модуль копирования, который работает с 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

Объяснение:

  1. Копировать модуль определен
  2. Аргументами модуля в данном случае являются абсолютный путь источника и абсолютный путь назначения.
  3. Вывод команды 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"
    ]
}

Специальные команды Ansible

Объяснение:

  1. В этом примере используется модуль Yum.
  2. Он определяет аргументы модуля, и в этом случае вы выбираете имя пакета и его состояние. Например, если состояние отсутствует, пакет будет найден и, если найден, удален.
  3. Когда он окрашен в желтый цвет, вы увидите вывод команды ansible с измененным состоянием, что в данном случае означает, что пакет был найден и установлен.
  4. Статус команды установки 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"
    ]
}

Специальные команды Ansible

Объяснение:

  1. Вывод команды yum показывает, что пакет был удален.

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

Когда вам потребуется подробная информация о системах, которые будет модифицировать 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.

Объяснение:

  1. Группа хостов, на которых будет работать playbook
  2. Модуль Yum используется в этой задаче для установки lldpad.
  3. Сервисный модуль используется для проверки работоспособности службы после установки.

Каждый плейбук 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

Анзибль-плейбуки

Объяснение:

  1. Имя группы
  2. Имя хоста с 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'

Анзибль-плейбуки

Объяснение:

  1. Пример предложения When. В данном случае тип ОС — Debian. Переменная ansible_os_family собирается с помощью функции сбора_фактов.
  2. Вывод задачи регистрируется для будущего использования под именем Enable_selinux.
  3. Еще один пример предложения When. В этом случае для пользователя хоста будет отображено сообщение, если SELinux действительно был включен ранее.
  4. Еще один пример предложения 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.

Анзибль-плейбуки

Объяснение:

  1. Пример уведомления
  2. Пример обработчика

Ансибл Роли

При работе с большими плейбуками проще разделить задачи на роли. Роли также упрощают повторное использование работы в дальнейшем. Роль — это набор задач, которые можно перемещать из одного плейбука в другой и запускать независимо, хотя и только через файл плейбука.

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

[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

Ансибл Роли

Объяснение:

  1. Имя шаблона, который будет использоваться. Шаблон находится в каталоге шаблонов пути к роли.
  2. Путь назначения имени файла, который будет заменен шаблоном, на стороне клиента.
  3. Разрешения файла назначения

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

Пример использования 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:

Пример использования Ansible

Роль Httpd, задача main.yml:

Пример использования Ansible

Роль Selinux, задача main.yml:

Пример использования Ansible

Ниже представлен плейбук 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

Объяснение:

  1. Команда Ansible-playbook, запускающая p4.yml
  2. Playbook пропускает роль SELinux, поскольку она уже включена.
  3. Ansible обнаружил, что пакет httpd уже установлен, поэтому возвращается нормально.
  4. Резолвер был установлен, а статус резолвера ролей изменился.

Шпаргалка по командам 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

Часто задаваемые вопросы (FAQ)

Да. Ansible работает без агентов, поэтому на управляемых узлах не запускается никакое программное обеспечение. Он подключается по SSH или WinRM. Windowsи отправляет небольшие модули, которые выполняются на целевом узле, а затем удаляются. Ansible нужен только управляющему узлу. Python установлен.

Плейбуки Ansible пишутся на языке YAML, который удобочитаем и использует отступы, а не фигурные скобки. Шаблоны используют язык шаблонов Jinja2, а факты и переменные позволяют одному плейбуку адаптироваться к множеству хостов. Для начала работы не требуется никаких специальных знаний в области программирования.

Ansible работает без агентов и использует механизм push-уведомлений, отправляя изменения по SSH, в то время как Кукольный и Chef Обычно они основаны на агентах и ​​на запросах. Ansible использует YAML, тогда как Chef Ansible использует Ruby, а Puppet использует собственный DSL. Многие команды выбирают Ansible из-за простоты его освоения.

Да. Ansible — это бесплатный продукт с открытым исходным кодом, распространяемый под лицензией GNU GPL, поддерживаемый компанией Red Hat и большим сообществом. Основной движок и тысячи модулей бесплатны. Red Hat также продает Ansible Automation Platform — платный продукт, который добавляет графический интерфейс, доступ на основе ролей и поддержку.

Да. Помимо хостов Linux и Unix, доступных по SSH, Ansible управляет Windows узлы через WinRM с использованием выделенных Windows модули. Он может устанавливать пакеты, редактировать реестр, управлять службами и запускать PowerShell, поэтому смешанный Linux и Windows Автопарки автоматизированы из одного узла управления.

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

Искусственный интеллект может создавать YAML-плейбуки на основе запроса на простом языке, объяснять незнакомые модули и предлагать исправления для задач, завершившихся с ошибкой, или синтаксических ошибок. Он также может преобразовывать скрипты оболочки в идемпотентные задачи. Всегда проверяйте сгенерированные плейбуки на правильность имен модулей и идемпотентность перед их запуском.

Да. Второй пилот GitHub Автоматически дополняет задачи плейбука, записи инвентаря и шаблоны Jinja2 на основе короткого комментария или имени файла. Рассматривайте его вывод как отправную точку и проверяйте отступы, параметры модулей и имена переменных, поскольку сгенерированный YAML может ссылаться на устаревший синтаксис или несуществующие модули.

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