Тази статия ще ви покаже как да инсталирате множество софтуерни пакети на CentOS / RHEL хостове с помощта на Ansible loop. И така, нека започнем.
Предпоставки
Ако искате да изпробвате примерите в тази статия,
1) Трябва да имате инсталиран Ansible на вашия компютър.
2) Трябва да имате поне CentOS / RHEL 7 или 8 хост, конфигуриран за Ansible автоматизация.
В LinuxHint има много статии, посветени на Инсталиране на Ansible и конфигуриране на хостове за Ansible автоматизация. Можете да ги проверите, ако е необходимо.
Създаване на директория на проекти
Преди да продължим по-нататък, ще създадем директория на проекти, само за да поддържаме нещата малко организирани.
За да създадете директория на проекта centos-pkg / и всички необходими поддиректории (в текущата работна директория), изпълнете следната команда:
$ mkdir -pv centos-pkg / playbooks
След като директорията на проекта е създадена, отидете до директорията на проекта, както следва:
$ cd centos-pkg /
След това създайте a домакини инвентарен файл, както следва:
$ nano домакини
Добавете IP или DNS име на хоста (vm3.нодеките.com, в моя случай) на вашите CentOS / RHEL хостове във файла с инвентара (по един хост на ред).
След като приключите, запазете файла, като натиснете
Създайте конфигурационен файл Ansible ансибъл.cfg в директорията на вашия проект, както следва:
$ nano ansible.cfg
След това въведете следните редове в ансибъл.cfg файл.
[по подразбиране]инвентар = хостове
host_key_checking = Невярно
След като приключите, запазете ансибъл.cfg файл, като натиснете
Опитайте да пингнете всички хостове CentOS / RHEL, които сте добавили във вашия домакини инвентарен файл, както следва:
$ ansible all -u ansible -m ping
Както можете да видите, моят CentOS 8 хост е достъпен.
Инсталиране на единичен софтуерен пакет
Този раздел ще ви покаже как да инсталирате отделен софтуерен пакет с помощта на dnf или ням модул на Ansible на вашите CentOS / RHEL хостове.
Първо създайте новата книга за игри install_package.ямъл в книги за игри / директория, както следва:
$ nano playbooks / install_package.ямъл
След това въведете следните редове в install_package.ямъл файл.
- домакини: всичкипотребител: ansible
стана: Вярно
задачи:
- име: Инсталирайте httpd пакет
dnf:
име: httpd
състояние: присъства
update_cache: Вярно
След като приключите, запазете файла, като натиснете
Тук добавих само една задача, Инсталирайте httpd пакета. Целта на тази задача е да инсталирате httpd пакет на CentOS / RHEL 8.
CentOS / RHEL 7 не използва dnf пакет мениджър, той използва ням мениджър на пакети. Така че, ако използвате CentOS / RHEL 7, променете dnf да се ням, както е отбелязано на екранната снимка по-долу. Не се изискват други промени.
The име Опцията се използва за съобщаване на dnf или ням модул името на пакета, който се опитвате да инсталирате. В този случай това ще бъде httpd пакет.
The държава Опцията се използва за съобщаване на dnf или ням модулирайте действието (i.д. инсталирайте, надстройте, премахнете) трябва да поеме дадения пакет. В този случай действието е присъства.
Поддържаните стойности на държава опция са:
присъства - ще инсталира пакета, ако вече не е инсталиран.
последен - ще инсталира пакета, ако вече не е инсталиран; ако вече е инсталиран, модулът ще проверява за актуализации; ако е налична актуализирана версия на пакета, той ще инсталира новата версия.
отсъстващ - ще премахне пакета, ако е инсталиран.
Ако update_cache опцията е зададена на Вярно, кешът на хранилището на DNF / YUM ще бъде актуализиран преди инсталирането на пакета.
Стартирайте install_package.ямъл playbook, както следва:
$ ansible-playbook playbooks / install_package.ямъл
Както можете да видите, книгата за игри install_package.ямъл работи успешно.
Както можете да видите, httpd пакет е инсталиран на моя CentOS 8 хост, който съм добавил на моя домакини инвентарен файл.
$ sudo dnf списък е инсталиран | grep httpd
Ако сте на CentOS / RHEL 7, използвайте ням пакет мениджър вместо dnf пакет мениджър, за да провери дали пакетът е инсталиран.
$ sudo yum списък е инсталиран | grep httpd
Инсталиране на множество софтуерни пакети с помощта на цикъл with_items
Предишният раздел на тази статия ви показа как да инсталирате отделен софтуерен пакет на вашия CentOS / RHEL хост с помощта на Ansible dnf/ням модул. Този раздел ще ви покаже как да инсталирате множество софтуерни пакети на вашите CentOS / RHEL хостове с помощта на Ansible with_items цикъл.
Първо създайте новата книга за игри install_packages.ямъл, както следва:
$ nano playbooks / install_packages.ямъл
Въведете следните редове в install_packages.ямъл файл.
- домакини: всичкипотребител: ansible
стана: Вярно
задачи:
- name: Инсталирайте всички пакети
dnf:
name: 'item'
състояние: присъства
update_cache: Вярно
with_items:
httpd
php
vsftpd
След като приключите, натиснете
Тук съм дефинирал имената на пакетите (httpd, php, vsftpd), които искам да инсталирам с помощта with_items цикъл.
Замених името на пакета с променливата вещ. The вещ променливата ще бъде актуализирана с името на пакета във всяка итерация.
Стартирайте install_packages.ямъл playbook, както следва:
$ ansible-playbook playbooks / install_packages.ямъл
Както можете да видите, книгата за игри install_packages.ямъл работи успешно.
The httpd, php, и vsftpd пакетите са инсталирани на моя хост CentOS 8, както можете да видите на екранната снимка по-долу.
$ sudo dnf списък е инсталиран | grep httpd$ sudo dnf списък е инсталиран | grep php
$ sudo dnf списък е инсталиран | grep vsftpd
Инсталиране на множество софтуерни пакети с помощта на цикъл Loop
Започвайки от Ansible 2.5, препоръчителният начин да използвате цикли във вашата книга за игри е като използвате цикъл ключова дума, вместо with_items ключова дума. Ето защо видяхте предупредително съобщение, когато стартирах install_packages.ямъл playbook в по-ранния раздел на тази статия.
Работа с цикли с помощта на цикъл ключовата дума е много лесна.
Първо отворете книгата с игри install_packages.ямъл (от предишния пример), както следва:
$ nano playbooks / install_packages.ямъл
В install_packages.ямъл playbook, просто заменете термина with_items с термина цикъл, както е отбелязано на екранната снимка по-долу. Не е нужно да променяте нищо друго.
След като приключите, натиснете
Стартирайте install_packages.ямъл playbook, както следва:
$ ansible-playbook playbooks / install_packages.ямъл
Както можете да видите, задачата Инсталирайте всички пакети управлява dnf/ням модул общо три пъти; веднъж за всеки цикъл вещ.
The httpd, php, и vsftpd пакетите са инсталирани на моя хост CentOS 8, както можете да видите на екранната снимка по-долу.
$ sudo dnf списък е инсталиран | grep httpd$ sudo dnf списък е инсталиран | grep php
$ sudo dnf списък е инсталиран | grep vsftpd
Инсталиране на множество софтуерни пакети с помощта на Array Syntax
По-ранните раздели на тази статия ви показаха как да използвате with_items и цикъл цикли в Ansible за инсталиране на множество софтуерни пакети на CentOS / RHEL 7 или 8, без повторение на кода. Този раздел ще ви покаже как да направите същото с по-опростен синтаксис на масива.
Първо отворете install_packages.ямъл playbook, както следва:
$ nano playbooks / install_packages.ямъл
Премахни with_items или цикъл раздел от задачата и променете име опция за ['httpd', 'php', vsftpd '], както е отбелязано на екранната снимка по-долу.
След като приключите, натиснете
Тук всеки цитиран низ в квадратните скоби ([]) е елемент от масив (името на софтуерния пакет, в моя случай). Всеки елемент на масив трябва да бъде разделен със запетая (,). Можете да добавите толкова елементи от масив, колкото искате. Добавил съм само три елемента, httpd, php, и vsftpd.
Стартирайте install_packages.ямъл playbook, както следва:
$ ansible-playbook playbooks / install_packages.ямъл
Както можете да видите, софтуерните пакети httpd, php, и vsftpd са инсталирани на моя хост CentOS 8.
$ sudo dnf списък е инсталиран | grep httpd$ sudo dnf списък е инсталиран | grep php
$ sudo dnf списък е инсталиран | grep vsftpd
Заключение
Тази статия ви показа как да използвате with_items и цикъл цикли, както и синтаксиса на Array, с Ansible ням/dnf модул за инсталиране на множество софтуерни пакети на вашите CentOS / RHEL 7 или 8 хостове.
За повече информация проверете официалната документация на Ansible.
[1] Официална документация на Ansible цикли
[2] Официална документация на Ansible with_items
[3] Официална документация на Ansible dnf модула
[4] Официална документация на модула Ansible yum