Урок за начинаещи - Ansible Playbooks, Variables и Inventory

Beginner S Tutorial Ansible Playbooks



Книгите за игра на Ansible са файлове, които съдържат задачи, които се изпълняват с цел конфигуриране на хостовете с Ansible. Отговорниците за игра са написани във формат YAML. YAML е много прост файлов формат, точно като JSON. Ще ви покажа как изглеждат учебниците за Ansible YAML в по -късен раздел на тази статия.

Файловете с инвентаризация на Ansible поддържат списък с хостове, които искате да конфигурирате или управлявате с Ansible. Можете да групирате тези хостове и да ги управлявате също по групи. Можете също така да предавате различни променливи за всеки хост или за група хостове.







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



Предпоставки

Ако искате да изпробвате примерите в тази статия,



1) Трябва да имате инсталиран Ansible на компютъра си.
2) Трябва да имате поне хост на Ubuntu/Debian и хост CentOS/RHEL 8, конфигуриран за автоматизация Ansible.





Има много статии в LinuxHint, посветени на инсталирането на Ansible и конфигурирането на хостове за автоматизация на Ansible. Можете да разгледате тези статии, ако е необходимо за повече информация.

Създаване на директория на проекта

Първо, създайте директория на проект ~/проект/ със следната команда:

$mkdir -пв~/проект/книги за игра

Придвижете се до ~/проект/ директория, както следва:

$CD~/проект

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

Създайте инвентарен файл Ansible домакини в директорията на проекта със следната команда:

$нанодомакини

Можете да въведете IP адресите на хостовете, които искате да конфигурирате/автоматизирате, като използвате Ansible в домакини инвентарен файл.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

След като приключите с тази стъпка, запишете файла, като натиснете + х следван от И и .

Ако искате да използвате DNS имена вместо IP адреси във файла с инвентара, можете да направите и това.

Ако нямате работещ DNS сървър, можете да използвате /etc/hosts файл на вашия компютър за локална DNS резолюция.

За локална DNS резолюция отворете /etc/hosts файл с текстов редактор ( нано , в моя случай), както следва:

$sudo нано /и т.н./домакини

Въведете IP адресите и желаните от вас DNS имена, както следва:

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

След като приключите с тази стъпка, натиснете + х следван от И и .

Отворете файла за инвентаризация на Ansible домакини както следва:

$нанодомакини

Вече можете да въведете DNS имената на хостовете, които искате да конфигурирате/автоматизирате, като използвате Ansible в домакини инвентарен файл.

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

След като приключите, запазете файла с инвентара на хостовете, като натиснете + х следван от И и .

Тестване на свързаността към всички хостове

Сега можете да опитате да пингвате всички хостове във файла с инвентара, както следва:

$анзибъл-iдомакин на всички-uанзибъл пинг

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

Вашият първи отговорен учебник

Нека създадем проста игра за игра Ansible ping_all_hosts.yaml в книги за игра/ директория. Това действие ще пингва всички хостове в домакини инвентарен файл, както преди.

$нанокниги за игра/ping_all_hosts.yaml

Въведете следните редове в ping_all_hosts.yaml Файл на Ansible playbook:

- домакини: всички
потребител: ansible
задачи:
- name: Пинг на всички хостове
пинг:

Тук,

домакини: всички - избира всички хостове от инвентарния файл домакини .
потребител: ansible - казва Ansible на SSH в хостовете във файла за инвентаризация като анзибъл потребител.
задачи - всички задачи, които Ansible ще изпълнява в хостовете, са изброени тук. Всяка от задачите обикновено има име и една или повече опции, специфични за модула.

Книгата за игра ping_all_hosts.yaml има само една задача, пингване на всички хостове във файла на инвентара домакини . Името на задачата е Пинг всички хостове и използва пинг модул.

The пинг модулът не се нуждае от други опции. И така, оставих го празно (няма нищо след дебелото черво, : )

След като приключите с тази стъпка, запишете файла, като натиснете + х следван от И и .

Можете да стартирате ping_all_hosts.yaml Отговорник за игра, както следва:

$книжка-ансибъл-iводи книги за игра/ping_all_hosts.yaml

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

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

В по -ранния пример трябваше да използвате -i опция да кажете на Ansible кой инвентарен файл да използвате. В моя случай това е домакини инвентарен файл.

$книжка-ансибъл-iводи книги за игра/ping_all_hosts.yaml

Ако не искате да предавате инвентарен файл с -i опция всеки път, когато стартирате игра на Ansible, всичко, което трябва да направите, е да зададете файл за инвентаризация по подразбиране за вашия проект.

За да направите това, създайте нов конфигурационен файл Ansible ansible.cfg в корена на вашия проект, както следва:

$наноansible.cfg

Въведете следните редове в ansible.cfg файл:

[по подразбиране]
инвентар =./домакини

След като приключите, запишете файла, като натиснете + х следван от И и .

Можете да пуснете същата книга за игра Ansible, както следва:

$игрални книги за ансибъл/ping_all_hosts.yaml

Както можете да видите, книгата за игра използва домакини инвентарен файл по подразбиране. Все още можете да използвате -i опция за задаване на различен инвентарен файл, ако желаете. Ansible е много гъвкав.

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

Досега ви показах как да изпълнявате набор от задачи (playbook) във всички хостове във файла с инвентара. Но какво, ако искате да изпълните набор от задачи в някои от хостовете и друг набор от задачи в други хостове? Можете да групирате хостовете във файла с инвентара и да изпълнявате различни задачи в групите хостове.

В този раздел ще ви покажа как да групирате хостове във файла с инвентара и как да работите с групи хостове.

Първо отворете инвентарния файл домакини както следва:

$нанодомакини

Въведете следните редове в домакини инвентарен файл:

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

Тук създадох две групи домакини: debian10 и centos8 .

В debian10 група, имам двама домакини: vm1.nodekite.com и vm2.nodekite.com

В centos8 група, имам двама домакини: vm3.nodekite.com и vm4.nodekite.com

След като приключите, запишете файла, като натиснете + х следван от И и .

Сега ще създадем нова книга за игра ping_debian10_hosts.yaml , който ще пингира хостове както преди, но само хостовете в debian10 група домакин.

Създайте книга за игра ping_debian10_hosts.yaml в книги за игра/ директория, както следва:

$нанокниги за игра/ping_debian10_hosts.yaml

Въведете следните редове в ping_debian10_hosts.yaml Отговорник:

- хостове: debian10
потребител: ansible
задачи:
- name: Ping all Debian10домакини
пинг:

Вместо домакини: всички , Добавих хостове: debian10 тук. debian10 е групата домакин. Тази книга ще се изпълнява само на хостовете в debian10 група домакин.

След като приключите, запишете файла, като натиснете + х следван от И и .

Пуснете книгата за игра, както следва:

$игрални книги за ансибъл/ping_debian10_hosts.yaml

Както можете да видите, само хостовете в debian10 хост групата се пингира.

Използвайки същия метод, създайте друга книга за игра ping_centos8_hosts.yaml както следва:

$нанокниги за игра/ping_centos8_hosts.yaml

Въведете следните редове в ping_centos8_hosts.yaml Отговорник:

- домакини: centos8
потребител: ansible
задачи:
- име: Ping всички CentOS8домакини
пинг:

По същия начин, добавих домакини: centos8 тук. centos8 е групата домакин. Тази книга ще се изпълнява само на хостовете в centos8 група домакин.

След като приключите, запишете файла, като натиснете + х следван от И и .

Пуснете книгата за игра, както следва:

$игрални книги за ансибъл/ping_centos8_hosts.yaml

Както можете да видите, само хостовете в centos8 хост групата се пингира.

Видове променливи Ansible

В Ansible има различни видове променливи. Основните типове променливи са Променливи на Ansible Facts и Дефинирани от потребителя променливи .

Променливи на Ansible Facts: В зависимост от хоста, на който Ansible работи, Ansible генерира променливи на Ansible факти. Променливите Ansible факти съдържат информация за хоста, като IP адреси, име на хост, име на домейн, дата, час, променливи на обкръжението на обвивката и др.

Дефинирани от потребителя променливи: Това са персонализирани променливи, дефинирани от потребителя. Можете да предавате дефинирани от потребителя променливи от командния ред или да използвате файла с инвентара.

Основно дефинираните от потребителя променливи са от два типа: Групови променливи и Променливи на хоста .

Отговорна променлива приоритет

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

Ако зададете същата променлива като променливата на хоста и променливата на групата, променливата на хоста ще бъде приложена.

По същия начин променливите, които задавате от командния ред, докато изпълнявате книга за игра, ще заменят както променливите на хоста, така и на групата.

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

В този раздел ще ви покажа как да работите с променливите Ansible fact. Така че, нека започнем!

Можете да изброите всички променливи Ansible Facts на хостовете във вашия домакини инвентарен файл, както следва:

$отговорен всички-uанзибълнастройвам

Както можете да видите, всички променливи Ansible Facts са изброени във формат JSON. Това е много дълъг списък.

Тъй като списъкът е доста дълъг, можете да го отворите с пейджър програма като по-малко както следва:

$отговорен всички-uанзибълнастройвам| по-малко

Сега можете да превъртате изхода нагоре, надолу, наляво и надясно според нуждите.

Можете също да търсите имена на променливи от пейджъра. За да направите това, натиснете / клавиш на клавиатурата. След това въведете низа за търсене ( име на хост в моя случай) и натиснете .

Както можете да видите, променливата Ansible fact, която съответства на низа за търсене, е ansible_hostname . Можете да натиснете н за да отидете на следващия мач и P за да преминете към предишното съвпадение от пейджъра. Ето как намирате променливата Ansible факти, която ви е необходима за вашия проект Ansible.

Нека сега да видим как да получим достъп до променливите Ansible fact.

Създайте нова книга за игра print_variable1.yaml както следва:

$нанокниги за игра/print_variable1.yaml

Въведете следните редове в print_variable1.yaml файл:

- домакини: всички
потребител: ansible
задачи:
- име: Печатиме на хостот всички домакини
отстраняване на грешки:
съобщение:'{{ansible_hostname}}'

Тук добавих една задача Отпечатайте име на хост на всички хостове . Тази задача използва Ansible отстраняване на грешки модул за отпечатване на съобщение, когато се изпълнява книгата за игра.

съобщение е единственият необходим параметър на отстраняване на грешки модул. The съобщение параметърът приема низ в кавички, което е съобщението, което ще бъде отпечатано на конзолата.

Тук, {{променлива_име}}} format се използва за достъп до променлива. В такъв случай, {{ansible_hostname}} се използва за отпечатване на ansible_hostname променлива на всеки от хостовете в инвентарния файл.

След като приключите, запишете файла, като натиснете + х следван от И и .

Можете също да получите достъп до променливата Ansible fact като Ansible_facts [име на променлива] . Така че ansible_hostname променлива ще стане ansible_facts [име на хост] .

Можем да пренапишем print_variable1.yaml книга за игра също като тази. Ще получим същия изход.

- домакини: всички
потребител: ansible
задачи:
- име: Печатиме на хостот всички домакини
отстраняване на грешки:
съобщение:'{{ansible_facts [' variable_name ']}}'

Пуснете книгата за игра print_variable1.yaml както следва:

$игрални книги за ансибъл/print_variable1.yaml

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

Нека сега отпечатаме IPv4 адреса по подразбиране на всеки хост заедно с името на хоста. Както можете да видите, IPv4 адресът по подразбиране на хоста може да бъде достъпен с помощта на адрес собственост на ansible_default_ipv4 обект.

Създайте нова книга за игра print_variable2.yaml както следва:

$нанокниги за игра/print_variable2.yaml

Въведете следните редове в print_variable2.yaml файл:

- домакини: всички
потребител: ansible
задачи:
- име: Печатиме на хостот всички домакини
отстраняване на грешки:
съобщение:'{{ansible_hostname}} - {{ansible_default_ipv4.address}}'

Тази книга за игра е същата като преди. Единствената разлика е новата променлива {{ansible_default_ipv4.address}} в съобщение вариант на отстраняване на грешки модул.

След като приключите, запишете файла, като натиснете + х следван от И и .

Стартирайте print_variable2.yaml книга за игра, както следва:

$игрални книги за ансибъл/print_variable2.yaml

Както можете да видите, IPv4 адресът по подразбиране и името на хоста на хостовете се отпечатват на конзолата.

Така че, по този начин работите с променливите Ansible Facts.

Задаване на дефинирани от потребителя променливи от командния ред:

В този раздел ще ви покажа как да зададете потребителски променливи от командния ред, докато изпълнявате Ansible playbooks.

Първо, създайте нова книга за игра print_variable3.yaml както следва:

$нанокниги за игра/print_variable3.yaml

Въведете следните редове в print_variable3.yaml файл:

- домакини: всички
потребител: ansible
задачи:
- име: Печаткомандалиния променлива
отстраняване на грешки:
съобщение:„Добре дошли {{потребителско име}}“

Тук съм използвал отстраняване на грешки модул за отпечатване на съобщението Добре дошли {{потребителско име}} . потребителско име е променлива, която ще бъде заменена, когато стартираме книгата.

След като приключите, запишете файла, като натиснете + х следван от И и .

Пуснете книгата за игра print_variable3.yaml както следва:

$книжка-ансибъл 'потребителско име = Боб'книги за игра/print_variable3.yaml

ЗАБЕЛЕЖКА: Тук, опцията се използва за предаване на a потребителско име променлива със стойността Боб към книгата за игра print_variable3.yaml от командния ред.

Както можете да видите, съобщението Добре дошъл Боб се отпечатва на конзолата.

Нека сега открием как да предадем множество променливи от командния ред.

Създайте нова книга за игра print_variable4.yaml както следва:

$нанокниги за игра/print_variable4.yaml

Въведете следните редове в print_variable4.yaml файл:

- домакини: всички
потребител: ansible
задачи:
- име: Печат на дефинирани от потребителя променливи
отстраняване на грешки:
съобщение:'username = {{username}} http_port = {{http_port}}'

Книгата за игра трябва да ви е много позната в момента. Всичко, което прави, е да отпечата 2 -те променливи потребителско име и http_port на конзолата.

След като приключите, запишете файла, като натиснете + х следван от И и .

Сега можете да преминете потребителско име и http_port променлива към книгата за игра, използвайки две различни опция, както следва:

$ ansible-playbook 'потребителско име = Боб' 'http_port = 8080'
книги за игра/print_variable4.yaml

Или можете просто да отделите променливите с интервал, както следва:

$ ansible-playbook 'потребителско име = Боб http_port = 8080'
книги за игра/print_variable4.yaml

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

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

Да речем, че искате да добавите някои променливи към група хостове. Това действие е много лесно да се направи в Ansible.

Първо отворете вашия домакини инвентарен файл, както следва:

$нанодомакини

Въведете следните редове във вашия домакини инвентарен файл:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10: vars]
потребителско име = Лили
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
потребителско име = Боб
http_port =7878

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

По същия начин създадох нов раздел [centos8: vars] за centos8 хост група и добави променливите ( потребителско име и http_port ) за centos8 група домакин там.

След като приключите, запазете домакини инвентарен файл чрез натискане + х следван от И и .

Стартирайте print_variable4.yaml книги за игра, както следва:

$игрални книги за ансибъл/print_variable4.yaml

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

Работа с дефинирани от потребителя хост променливи

В този раздел ще ви покажа как да зададете променливи за конкретни хостове във файла с инвентара.

Първо отворете домакини инвентарен файл, както следва:

$нанодомакини

За да добавите променливи към конкретен хост (да речем, vm1.nodekite.com ), просто добавете интервал/раздел след името на IP/DNS на хоста и въведете вашите променливи, както е показано на екрана по -долу.

Можете да добавите и няколко променливи. Просто отделете всяка променлива с интервал.

След като приключите, запишете файла с инвентара, като натиснете + х следван от И и .

Стартирайте print_variable4.yaml книги за игра, както следва:

$игрални книги за ансибъл/print_variable4.yaml

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

Бързо генериране на инвентарни файлове с диапазони

Можете да използвате диапазони за бързо генериране на файлове за инвентаризация на Ansible, ако IP адресите на хоста или имената на DNS са съвместими (т.е. имат специфичен формат).

В по -ранните примери съм използвал хостове vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com и vm4.nodekite.com . Вместо да пиша на 4 реда, можех просто да напиша vm [1: 4] .nodekite.com в инвентарното досие.

За да експериментирате с диапазони, отворете домакини инвентарен файл, както следва:

$нанодомакини

Премахнете всички хостове и променливи от инвентарните файлове.

Сега може да сменим vm1.nodekite.com и vm2.nodekite.com с vm [1: 2] .nodekite.com за debian10 група домакин, както следва.

По същия начин можем да заменим vm3.nodekite.com и vm4.nodekite.com с vm [3: 4] .nodekite.com за centos8 група домакин.

След като приключите, запишете файла, като натиснете + х следван от И и .

Стартирайте ping_all_hosts.yaml както следва:

$игрални книги за ансибъл/ping_all_hosts.yaml

Както можете да видите, обхватът на хоста беше разширен, когато пуснах книгата за игра.

Съхранение на променливи в различни файлове

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

По подразбиране Ansible търси групови променливи в group_vars / директория и хост променливи в host_vars / директория.

Така че, създайте group_vars / и host_vars / директория, както следва:

$mkdir -пв {домакин, група}_ чии

За да зададете групови променливи за debian10 хост група, създайте файл debian10 (същото като името на групата) в group_vars / директория, както следва:

$наноgroup_vars/debian10

Въведете вашите променливи, както следва:

потребителско име: Лили
http_port: 4343

След като приключите, запишете файла, като натиснете + х последвано от Y и .

По същия начин, за да зададете групови променливи за centos8 хост група, създайте файл centos8 (същото като името на групата) в group_vars / директория, както следва:

$наноgroup_vars/centos8

Въведете вашите променливи, както следва:

потребителско име: Боб
http_port: 7878

След като приключите, запишете файла, като натиснете + х последвано от Y и .

Стартирайте print_variable4.yaml книга за игра, както следва:

$игрални книги за ансибъл/print_variable4.yaml

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

За задаване на хост променливи за хоста vm1.nodekite.com , създайте файл vm1.nodekite.com (същото като името на хоста или IP адреса) в host_vars / директория, както следва:

$наноvm1.nodekite.com

Въведете променливите на хоста си, както следва:

потребителско име: Алекс
http_port: 7788

След като приключите, запишете файла, като натиснете + х последвано от Y и .

Стартирайте print_variable4.yaml книга за игра, както следва:

$ ansible-playbook playbooks/print_variable4.yaml
[

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

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

В този раздел ще ви покажа как да използвате цикли в Ansible.

Първо, създайте нова книга за игра loop1.yaml в книги за игра/ директория, както следва:

$нанокниги за игра/loop1.yaml

Въведете следните редове в loop1.yaml игрална книга:

- домакини: всички
потребител: ansible
задачи:
- име: Печат на списък с потребители
отстраняване на грешки:
съобщение:„Потребител: {{item}}“
with_items:
- Алекс
- Боб
- Лили

Тук имам 1 задача, която отпечатва списък с потребители, използващи цикъл.

За да зададете стойностите на итерацията за задачата, използвате с_елементи модул. След това добавяте стойностите една по една.

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

Достъпвате до стойността на текущата итерация, като използвате вещ променлива.

отстраняване на грешки:
съобщение:„Потребител: {{item}}“

След като приключите, запишете файла, като натиснете + х следван от И и .

Стартирайте loop1.yaml книга за игра, както следва:

$игрални книги за ансибъл/loop1.yaml

Както можете да видите, същата задача се изпълнява за всеки елемент на всеки хост. И така, цикълът работи.

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

Ако искате да изпълнявате задачи въз основа на определени условия, тогава този раздел е за вас.

За да изпълнявате задачи въз основа на условие, можете да използвате кога модул на Ansible. Нека видим пример за този модул. Първо, създайте нова книга за игра състояние1.yaml както следва:

$нанокниги за игра/състояние1.yaml

Въведете следните редове в състояние1.yaml игрална книга:

- домакини: всички
потребител: ansible
задачи:
- name: Изпълнете тази задача само в Debian
отстраняване на грешки:
съобщение:„тази задача работи на Debian“
когато: ansible_facts[„разпределение“]=='Debian'

Тук,

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

The ansible_facts [„разпространение“] се използва за достъп до променливата Ansible Facts ansible_distribution . Можете също да проверите за версия за разпространение, като използвате ansible_distribution_major_version променлива.

След като приключите, запишете файла, като натиснете + х следван от И и .

Стартирайте състояние1.yaml книга за игра, както следва:

$игрални книги за ансибъл/състояние1.yaml

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

Можете също така да проверите за множество условия едновременно и да изпълните задачата само ако всички условия са верни. Нека да видим пример.

Създайте нова книга за игра състояние2.yaml както следва:

$нанокниги за игра/състояние2.yaml

Въведете следните редове в състояние2.yaml файл:

- домакини: всички
потребител: ansible
задачи:
- name: Изпълнете тази задача само в Debian10
отстраняване на грешки:
съобщение:„тази задача работи на Debian 10“
когато: ansible_facts[„разпределение“]=='Debian'
и ansible_facts['distribution_major_version']=='10'

Тук задачата ще се изпълнява само ако дистрибуцията е Debian ( ansible_facts [‘distribution’] == ‘Debian’ ) и версията е 10 ( ansible_facts [‘distribution_major_version’] == ’10’ ). Ако и двете условия са изпълнени, тогава задачата ще се изпълни. В противен случай задачата няма да се изпълни.

Използвал съм и ключова дума, за да проверите дали и двете условия са верни тук. Ако искате да проверите дали някое от условията е вярно, можете да използвате или вместо това ключова дума.

След като приключите, запишете файла, като натиснете + х следван от И и .

Пуснете книгата за игра състояние2.yaml както следва:

$игрални книги за ансибъл/състояние2.yaml

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

Нека променим учебника състояние2.yaml да изпълнявате задачата само на хостове на Debian 8, както следва.

Както можете да видите, всички хостове бяха пропуснати, тъй като нямам никакви Debian 8 хостове във файла с инвентара.

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

The подходящ модул на Ansible се използва за инсталиране на специфичен софтуерен пакет на хостове на Ubuntu/Debian. Нека да видим как да използваме този модул.

Първо, създайте нова книга за игра apt1.yaml в книги за игра/ директория, както следва:

$нанокниги за игра/apt1.yaml

Въведете следните редове в apt1.yaml игрална книга:

- хостове: debian10
потребител: ansible
стават: Истина
задачи:
- име: Инсталирайте apache2
подходящ:
име: apache2
състояние: последно

The подходящ модул изисква само име на пакета, който искате да инсталирате/надстроите/премахнете и състояние на опаковката.

Тук се опитвам да инсталирам apache2 пакет ( име: apache2 ) на моите хостове на Debian 10. Тъй като се опитвам да инсталирам пакет и да го надстроя, ако е налична нова версия, състояние би трябвало последен .

състояние също приема следните опции:

- отсъстващ - Пакетът ще бъде премахнат, ако вече е инсталиран.
- последен - Пакетът ще бъде надстроен, ако е налична актуализация. Ако пакетът още не е инсталиран, той ще бъде инсталиран.
- настоящето - Пакетът ще бъде инсталиран, ако още не е инсталиран. Но пакетът няма да бъде надстроен, ако е налична актуализация.

Забележете, че съм добавил стават: Истина в книгата за игра. Това ще даде на анзибъл потребителски sudo привилегии за промяна на структурата на файловата система (т.е. инсталиране/надграждане/премахване на пакети). Без стават: Истина , подходящ модул няма да може да инсталира apache2 пакет.

След като приключите, запишете книгата за игра, като натиснете + х следван от И и .

Стартирайте apt1.yaml книга за игра, както следва:

$игрални книги за ансибъл/apt1.yaml

Както можете да видите, книгата за игра успешно работи на хостовете на Debian 10.

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

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

The dnf и yum модул на Ansible се използва за инсталиране на специфичен софтуерен пакет на хостове CentOS/RHEL. Можете да използвате този модул по същия начин, по който сте го направили подходящ модул в по -ранния раздел на тази статия.

И двете dnf и yum модулите приемат същите параметри. Можете да използвате dnf модул на хостове CentOS/RHEL 8 и yum на CentOS/RHEL 7 или по -стара.

Нека сега разгледаме пример за този модул.

Първо, създайте нова книга за игра dnf1.yaml в книги за игра/ директория, както следва:

$нанокниги за игра/dnf1.yaml

Въведете следните редове в dnf1.yaml игрална книга:

- домакини: centos8
потребител: ansible
стават: Истина
задачи:
- име: Инсталирайте httpd пакет
dnf:
име: httpd
състояние: последно

The dnf и yum модул изисква само име на пакета, който искате да инсталирате/надстроите/премахнете и състояние на опаковката.

Тук се опитвам да инсталирам httpd пакет ( име: httpd ) на моите хостове CentOS 8. Тъй като се опитвам да инсталирам пакет и бих искал също да го надстроя, ако е налична нова версия, състояние би трябвало последен .

състояние приема следните опции:

- отсъстващ - Пакетът ще бъде премахнат, ако вече е инсталиран.
- последен - Пакетът ще бъде надстроен, ако е налична актуализация. Ако пакетът още не е инсталиран, той ще бъде инсталиран.
- настоящето - Пакетът ще бъде инсталиран, ако още не е инсталиран. Но пакетът няма да бъде надстроен, ако е налична актуализация.

Забележете, че съм добавил стават: Истина в книгата за игра. Това дава анзибъл потребителски sudo привилегии за промяна на структурата на файловата система (т.е. инсталиране/надграждане/премахване на пакети). Без стават: Истина , подходящ модул няма да може да инсталира httpd пакет.

След като приключите, запишете книгата за игра, като натиснете + х следван от И и .

Стартирайте dnf1.yaml книга за игра, както следва:

$игрални книги за ансибъл/dnf1.yaml

Както можете да видите, книгата за игра успешно работи на хоста CentOS 8.

Работа с модул за обслужване Ansible

The обслужване модул на Ansible се използва за стартиране, спиране, рестартиране, активиране (добавяне на услуга към стартирането) и деактивиране (премахване на услуга от стартирането) услуги във вашите хостове.

В по -ранните раздели ви показах как да инсталирате Apache HTTP сървърния пакет с помощта на Ansible подходящ , dnf и yum модули. Нека сега се уверим, че услугата Apache HTTP сървър работи и е добавена към стартирането на системата.

Ще работя с моите Debian 10 хостове. Но можете да работите с хостове на CentOS 8, ако желаете. Просто коригирайте книгата за игра съответно.

Първо, създайте нова книга за игра Ansible apt2.yaml както следва:

$нанокниги за игра/apt2.yaml

Въведете следните редове в apt2.yaml игрална книга:

- хостове: debian10
потребител: ansible
стават: Истина
задачи:
- име: Инсталирайте apache2
подходящ:
име: apache2
състояние: последно
- име: Стартирайте услугата apache2
обслужване:
име: apache2
състояние: стартирано
активиран: Вярно

Тук добавих нова задача, Стартирайте услугата apache2 .

име: apache2 - услугата, върху която работя, е apache2 .

състояние: стартирано - услугата трябва да работи.

активиран: Вярно - услугата трябва да бъде добавена към стартирането на системата.

The състояние параметърът приема други стойности.

- презаредени - Услугата трябва да презареди конфигурационните файлове.
- рестартиран - Услугата трябва да се рестартира.
- започна - Услугата трябва да работи. Ако услугата не работи, стартирайте услугата.
- спряна - Услугата трябва да бъде спряна. Ако услугата работи, спрете услугата.

Пуснете книгата за игра apt2.yaml както следва:

$игрални книги за ансибъл/apt2.yaml

Както можете да видите, книгата за игра беше изпълнена успешно.

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

Работа с модул Ansible copy

The Ansible копие Модулът се използва главно за копиране на файлове от вашия компютър към отдалечени хостове.

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

Първо, създайте нова директория файлове/ както следва:

$mkdir -vфайлове

Създайте нов файл index.html в файлове/ директория, както следва:

$нанофайлове/index.html

Въведете следните редове в index.html файл:


< html >
< глава >
< заглавие >Уеб сървър от Ansible</ заглавие >
</ глава >
< тяло >
< h1 >Добре дошли в LinuxHint</ h1 >
< стр >Този уеб сървър беше внедрен с Ansible.</ стр >
</ тяло >
</ html >

След като приключите, запишете файла, като натиснете + х следван от И и .

Създайте нова книга за игра Ansible apt3.yaml както следва:

$нанокниги за игра/apt3.yaml

Въведете следните редове в apt3.yaml файл:

- хостове: debian10
потребител: ansible
стават: Истина
задачи:
- име: Инсталирайте apache2
подходящ:
име: apache2
състояние: последно
- име: Копирайте index.html на сървъра
копие:
src: ../файлове/index.html
dest:/където/www/html/index.html
режим: 0644
собственик: www-data
група: www-данни
- име: Стартирайте услугата apache2
обслужване:
име: apache2
състояние: стартирано
активиран: Вярно

Ето, задачата Копирайте index.html на сървъра копира index.html от файлове/ директория към / var / www / html / директория на хостовете на Debian 10.

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

След като приключите, запишете файла, като натиснете + х следван от И и .

Стартирайте apt3.yaml книга за игра, както следва:

$игрални книги за ансибъл/apt3.yaml

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

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

Както можете да видите, уеб сървърът Debian 10 обслужва index.html страница, която току -що копирах на хостовете на Debian 10.

И така, това са основите на Ansible. Можете да научите повече за Ansible, като прочетете официалната документация на Ansible. Благодарим ви, че прочетохте тази статия.