Учебное пособие по Ansible для начинающих: сборник инструкций, команды и примеры
Что такое Ansible?
анзибль — это инструмент автоматизации и оркестрации с открытым исходным кодом для предоставления программного обеспечения, управления конфигурацией и развертывания программного обеспечения. Ansible позволяет легко запускать и настраивать Unix-подобные системы, а также Windows системы для предоставления инфраструктуры в виде кода. Он содержит собственный декларативный язык программирования для настройки и управления системой.
Ansible популярен благодаря простоте установки, простоте использования в том, что касается подключения к клиентам, отсутствию агента для клиентов Ansible и множеству навыков. Функционирует при подключении через SSH клиентам, поэтому ему не нужен специальный агент на стороне клиента, и, отправляя модули клиентам, модули затем выполняются локально на стороне клиента, а выходные данные передаются обратно на сервер Ansible.
Поскольку он использует SSH, он может очень легко подключаться к клиентам с помощью SSH-ключей, что упрощает весь процесс. Сведения о клиенте, такие как имена хостов или IP-адреса и порты SSH, хранятся в файлах, называемых файлами инвентаризации. После того как вы создали файл инвентаризации и заполнили его, ansible сможет его использовать.
Зачем использовать Ansible?
Вот некоторые важные плюсы/преимущества использования Ansible
- Одним из наиболее значительных преимуществ Ansible является то, что его может использовать каждый.
- Для установки и использования Ansible не требуются специальные навыки системного администратора, а официальная документация очень обширна.
- Его модульность в отношении плагинов, модулей, реестров и сборников сценариев делает Ansible идеальным компаньоном для организации больших сред.
- Ansible очень легкий и последовательный, и в нем нет никаких ограничений относительно операционной системы или базового оборудования.
- Он также очень безопасен благодаря своим возможностям без агентов и использованию функций безопасности OpenSSH.
- Еще одним преимуществом, которое стимулирует внедрение Ansible, является его плавная кривая обучения, определяемая обширной документацией, а также простая в освоении структура и конфигурация.
История Ансибля
Вот важные вехи из истории ansible:
- В феврале 2012 года стартовал проект Ansible. Впервые он был разработан Майклом ДеХааном, создателем Cobbler и Func, унифицированного сетевого контроллера Fedora.
- Первоначально называвшаяся AnsibleWorks Inc, компания, финансирующая инструмент ansible, была приобретена в 2015 году RedHat, а затем вместе с RedHat перешла под эгиду IBM.
- В настоящее время Ansible включен в такие дистрибутивы, как Fedora Linux, RHEL, Centos и Oracle Linux.
Важные термины, используемые в Ansible
-
Анзибль-сервер
Машина, на которой установлен Ansible и с которой будут запускаться все задачи и плейбуки.
-
Модули
По сути, модуль — это команда или набор аналогичных команд Ansible, предназначенных для выполнения на стороне клиента.
-
Сложность задачи
Задача — это раздел, состоящий из одной процедуры, которую необходимо выполнить.
-
Роли
Способ организации задач и связанных файлов для последующего вызова в сборнике сценариев.
-
Факт
Информация, полученная из клиентской системы из глобальных переменных с помощью операции сбора фактов.
-
Каталог
Файл, содержащий данные о клиентских серверах ansible. Определен в последующих примерах как файл хостов.
-
Играть
Исполнение пьесы
-
Handler
Задача, которая вызывается только при наличии уведомителя
-
Notifier
Раздел, приписываемый задаче, которая вызывает обработчик, если выходные данные изменены
-
Тег
Имя, присвоенное задаче, которое можно использовать позже для выполнения только этой конкретной задачи или группы задач.
Установка Ansible в Linux
После того, как вы сравнили и взвесили свои варианты и решили выбрать 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) Установите общий пакет свойств программного обеспечения.
$ sudo apt install software-properties-common
Шаг 3) Установите архив личного пакета ansible
$ sudo apt-add-repository ppa:ansible/ansible
Шаг 4) Установите анзибль
$ sudo apt update $ sudo apt install ansible
Специальные команды Ansible
Один из самых простых способов использования Ansible — использование специальных команд. Их можно использовать, когда вы хотите выполнить некоторые команды на сервере или группе серверов. Специальные команды не сохраняются для использования в будущем, но представляют собой быстрый способ взаимодействия с нужными серверами.
В этом руководстве по Ansible будет настроен простой файл хостов двух серверов, содержащий хост1 и хост2.
Вы можете убедиться, что хосты доступны с сервера 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 можно использовать для выдачи команд только на определенных хостах в файле хоста.
- Имя хоста, определенное в файле инвентаризации.
Если вам нужно быстро скопировать файл в несколько мест назначения, вы можете использовать модуль копирования в ansible, который использует 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, можно использовать следующую команду. Модуль настройки собирает факты из системных переменных.
Анзибль-плейбуки
Анзибль-плейбуки — это способ отправки команд удаленным системам с помощью сценариев. Сборники схем Ansible используются для настройки сложных системных сред с целью повышения гибкости путем выполнения сценария в одной или нескольких системах. Учебники Ansible, как правило, являются скорее языком конфигурации, чем языком программирования.
Команды Ansible playbook используют формат YAML, поэтому не требуется много синтаксиса, но необходимо соблюдать отступы. Как следует из названия, сборник пьес — это сборник пьес. С помощью сборника сценариев вы можете назначить определенные роли одним хостам и другие роли другим хостам. Таким образом, вы можете управлять несколькими серверами в самых разных сценариях, и все это в одном сборнике сценариев.
Чтобы уточнить все детали, прежде чем продолжить работу с примерами сборников схем Ansible, мы должны сначала определить задачу. Это интерфейс к модулям ansible для ролей и плейбуков.
Теперь давайте изучим сборник пьес Ansible на примере одного сборника пьес с одним воспроизведением, содержащего несколько задач, как показано ниже:
--- - hosts: group1 tasks: - name: Install lldpad package yum: name: lldpad state: latest - name: check lldpad service status service: name: lldpad state: started
В приведенном выше примере плейбука Ansible группа1 хостов в файле хоста предназначена для установки пакета lldpad с использованием модуля yum, а затем запускается служба lldpad, созданная после установки, с использованием служебного модуля, используемого в основном для взаимодействия с ансамблем systemd.
Объяснение:
- Группа хостов, на которых будет работать playbook
- Модуль Yum используется в этой задаче для установки lldpad.
- Сервисный модуль используется для проверки работоспособности службы после установки.
Каждый ansible playbook работает с файлом инвентаря. Файл инвентаря содержит список серверов, разделенных на группы для лучшего контроля над такими деталями, как IP-адрес и порт SSH для каждого хоста.
Файл инвентаря, который вы можете использовать для этого примера плейбука Ansible, выглядит, как показано ниже. Существует две группы с именами group1 и group2, каждая из которых содержит хост1 и хост2 соответственно.
[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 — это переменные, собранные с помощью опции сбора_фактов, и их можно использовать, как в этом условном примере.
--- - 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» будет изменена, то есть если порт изначально не 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 используется для хранения обработчиков. Метакаталог должен содержать информацию об авторе и ролевых зависимостях. В каталоге задач находится основной файл yaml для роли.
Каталог тестов содержит образец файла книги воспроизведения yaml и образец файла инвентаризации и в основном используется в целях тестирования перед созданием фактической роли.
Каталог vars содержит файл yaml, в котором будут определены все переменные, используемые ролью. Шаблоны каталогов и файлы каталогов должны содержать файлы и шаблоны, которые будут использоваться задачами в этой роли.
Чтобы создать дерево каталогов для роли, вы должны использовать следующую команду с последним параметром — именем роли:
[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 определены некоторые переменные, включая переменную с именемsolver_ip_addresses с разными значениями в зависимости от центра обработки данных.
- name: Set resolver for server template: src: dns.j2 dest: /etc/resolv.conf group: root owner: root mode: "0644" tag: resolver
Объяснение:
- Имя шаблона, который будет использоваться. Шаблон находится в каталоге шаблонов пути к роли.
- Путь назначения имени файла, который будет заменен шаблоном, на стороне клиента.
- Разрешения файла назначения
Ролевые задачи также могут иметь поле тега, которому присвоено имя. Один и тот же тег может использоваться несколькими задачами. При запуске ansible playbook вы также можете указать тег, чтобы эти задачи были выполнены.
Пример использования Ansible
В этом разделе мы проанализируем практический пример важного сборника сценариев Ansible, который выполняет три роли. Целью этого является дать практический пример того, о чем мы говорили ранее. Некоторые примеры, использованные ранее в этом руководстве по сборнику пьес Ansible, будут адаптированы и использованы в этом сборнике пьес.
Ниже приведена структура каталогов playbook. Будет использован файл 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
В книге воспроизведения есть три роли, одна из которых называется преобразователем, который устанавливает конкретный сервер имен на серверах путем копирования файла с сервера в место назначения /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
Резюме
В мире, где технологии постоянно меняются быстрыми темпами и в то же время растут невероятно быстро, системные администраторы и инженеры по DevOps должны думать о различных подходах к автоматизации рутинных задач и оркестрации больших пулов серверов.
Хотя есть много альтернатива Ансиблу (Chef, Puppet), которые делают то же самое с некоторыми отличиями, Ansible сумел превзойти их всех благодаря своей простоте, улучшенной безопасности и, что наиболее важно, плавной кривой обучения. Благодаря этим качествам и быстрому внедрению Ansible мы создали руководство, полное примеров, чтобы вы могли получить еще более удобный первый опыт работы с Ansible.
В этом руководстве по основам Ansible мы описали ansible и немного рассказали о его истории. Мы упомянули сильные стороны Ansible и преимущества, которые Ansible может принести для автоматизации и оркестровки инфраструктур разных размеров. Мы определили основные используемые термины Ansible и определили структуру сборников сценариев Ansible. Всю информацию сопровождают подробные примеры с подробными пояснениями.