Ansible vodič za početnike: Priručnik i naredbe
⚡ Pametni sažetak
Ansible je automatizacijski mehanizam otvorenog koda bez agenata koji konfigurira poslužitelje putem SSH-a, izvršava ad-hoc naredbe i orkestrira složene implementacije putem YAML playbookova, uloga i predložaka za višekratnu upotrebu na Linuxu i... Windows infrastruktura.

Ansible je jedan od najšire prihvaćenih alata za automatizaciju otvorenog koda u modernom DevOps, cijenjen zbog dizajna bez agenata i jednostavnih, čitljivih konfiguracijskih datoteka. Ovaj Ansible vodič za početnike objašnjava što je Ansible, kako ga instalirati i kako koristiti ad-hoc naredbe, playbookove, uloge i predloške kroz praktične primjere.
Što je Ansible?
Ansible je alat otvorenog koda za automatizaciju i orkestraciju za opskrbu softverom, upravljanje konfiguracijom i implementaciju softvera. Konfigurira Unix-slične sustave i Windows sustave podjednako, pružajući infrastrukturu kao kod putem vlastitog deklarativnog jezika. Ansible se često uspoređuje s alatima temeljenim na agentima kao što su Lutka.
Ansible je popularan zbog jednostavne instalacije, jednostavnog povezivanja klijenata i dizajna bez agenata. Povezuje se s klijentima putem SSH, tako da na strani klijenta nije potreban poseban agent. Ansible šalje module svakom klijentu, moduli se pokreću lokalno, a njihov izlaz se vraća na Ansible poslužitelj.
Budući da se oslanja na SSH, Ansible se lako povezuje s klijentima pomoću SSH ključeva, što pojednostavljuje cijeli proces. Podaci o klijentu poput imena hosta ili IP adresa i SSH portova pohranjeni su u datotekama koje se nazivaju datoteke inventara. Nakon što stvorite i popunite datoteku inventara, Ansible je može koristiti.
Zašto koristiti Ansible?
Evo nekih važnih prednosti korištenja Ansiblea:
- Jedna od najznačajnijih prednosti Ansiblea je ta što je besplatan za korištenje svima.
- Za instalaciju i korištenje nisu potrebne posebne vještine sistemskog administratora, a službena dokumentacija je vrlo sveobuhvatna.
- Njegova modularnost kroz dodatke, module, inventar i playbookove čini Ansible izvrsnim suputnikom za orkestriranje velikih okruženja.
- Ansible je lagan i konzistentan, bez ograničenja na operativni sustav ili temeljni hardver.
- Vrlo je siguran zahvaljujući dizajnu bez agenata i korištenju sigurnosnih značajki OpenSSH-a.
- Ansible ima glatku krivulju učenja, podržanu detaljnom dokumentacijom i lako razumljivom strukturom i konfiguracijom.
Ove snage, posebno kada se uspoređuju s drugima alternative Ansibleu, pomažu objasniti njegovo brzo usvajanje. Prije instalacije, korisno je razumjeti kako se projekt razvijao.
Povijest Ansiblea
Evo važnih prekretnica u povijesti Ansiblea:
- Projekt Ansible započeo je u veljači 2012. Prvi ga je razvio Michael DeHaan, tvorac Cobblera i Funca (Fedora Unified Network Controller).
- Tvrtka koja je izvorno financirala Ansible, izvorno nazvana AnsibleWorks Inc, preuzeta je od strane RedHata 2015. godine, a kasnije je, zajedno s RedHatom, prešla pod... IBM kišobran.
- Danas je Ansible uključen u distribucije kao što su Fedora Linux, RHEL, CentOS i Oracle Linux.
Važni pojmovi koji se koriste u Ansibleu
Sljedeći pojmovi pojavljuju se u ovom Ansible tutorialu i vrijedi ih znati prije nego što počnete:
Ansible poslužitelj
Stroj na kojem je instaliran Ansible i s kojeg se izvršavaju svi zadaci i playbookovi.
Moduli
Modul je naredba ili skup sličnih Ansible naredbi namijenjenih izvršavanju na strani klijenta.
Zadatak
Zadatak je dio koji se sastoji od jednog postupka koji treba dovršiti.
Uloga
Način organiziranja zadataka i povezanih datoteka kako bi se kasnije mogli pozvati u playbooku.
Činjenica
Informacije dohvaćene iz globalnih varijabli klijentskog sustava putem operacije gather_facts.
Popis
Datoteka koja sadrži podatke o Ansible klijentskim poslužiteljima. U kasnijim primjerima definirana je kao datoteka hosts.
Igrati
Izvršenje scenografije.
sekundant
Zadatak koji se poziva samo kada je prisutan dojavljivač.
Obavijestilac
Dio pripisan zadatku koji poziva rukovatelj ako se izlaz promijeni.
Pojam
Naziv postavljen na zadatku koji se kasnije može koristiti za pokretanje samo tog određenog zadatka ili grupe zadataka.
Ansible instalacija u Linuxu
Nakon što ste odvagnuli svoje mogućnosti i odlučili se za Ansible, sljedeći korak je instalacija na vaš sustav. Sljedeći kratki vodič pokriva instalaciju na najpopularnijim Linux distribucija.
Instalirajte Ansible na Centos/RedHat sustave
Korak 1) Instalirajte EPEL repozitorij.
[root@ansible-server ~]# sudo yum install epel-release
Korak 2) Instalirajte Ansible paket.
[root@ansible-server ~]# sudo yum install -y ansible
Instalirajte ansible na Ubuntu/Debian sustavi
Korak 1) Izvršite ažuriranje paketa.
$ sudo apt update
Korak 2) Instalirajte paket software-properties-common.
$ sudo apt install software-properties-common
Korak 3) Instalirajte Ansible osobnu arhivu paketa.
$ sudo apt-add-repository ppa:ansible/ansible
Korak 4) Instalirajte ansible.
$ sudo apt update $ sudo apt install ansible
Anzibilne ad-hoc naredbe
Jedan od najjednostavnijih načina korištenja Ansiblea je putem ad-hoc naredbi. One su korisne kada želite izdati naredbu na jednom poslužitelju ili na grupi poslužitelja. Ad-hoc naredbe se ne pohranjuju za buduću upotrebu, ali su brz način interakcije s odabranim poslužiteljima.
Za ovaj Ansible tutorial konfigurirana je jednostavna datoteka hosts za dva poslužitelja, koja sadrži host1 i host2.
Možete potvrditi da su hostovi dostupni s Ansible poslužitelja izdavanjem naredbe ping naredba na svim hostovima.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Objašnjenje:
- Status naredbe, u ovom slučaju USPJEH
- Host na kojem je pokrenuta naredba
- Naredba izdana putem parametra -m, u ovom slučaju, ping
- S parametrom -i možete pokazati na datoteku hosts.
Također možete izdati istu naredbu na jednom hostu kada je to potrebno.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Objašnjenje:
- Parametar Limit može se koristiti za izdavanje naredbi samo na određenim hostovima u datoteci hosta
- Naziv hosta kako je definirano u datoteci inventara
Ako trebate brzo kopirati datoteku na više odredišta, upotrijebite modul za kopiranje koji se oslanja na SCP. Naredba i njezin izlaz izgledaju ovako:
[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
}
Objašnjenje:
- Definiran modul kopiranja
- Argumenti modula, u ovom slučaju, su izvorni apsolutni put i odredišni apsolutni put.
- Ansible izlaz naredbe odražava uspjeh naredbe kopiranja i druge pojedinosti poput sha1 ili md5 kontrolnih zbrojeva za provjeru integriteta datoteke i metapodataka kao što su vlasnik, veličina ili dopuštenja. Lako je imati paket instaliran na gomili poslužitelja. Ansible ima nekoliko modula koji komuniciraju s korištenim instalaterima, poput yum, apt, dnf itd.
U sljedećem primjeru, instalirat ćete paket s yum modulom na dva CentOS hosta.
[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"
]
}
Objašnjenje:
- Yum modul se koristi u ovom primjeru
- Definira argumente modula, au ovom slučaju ćete odabrati naziv paketa i njegovo stanje. Na primjer, ako stanje ne postoji, paket će se pretražiti i ako se pronađe, ukloniti
- Kada je obojen žutom bojom, vidjet ćete izlaz naredbe ansible s promijenjenim stanjem, što u ovom slučaju znači da je paket pronađen i instaliran.
- Status naredbe yum install izdane putem ansible-a. U ovom slučaju instaliran je paket ncdu.x86_64 0:1.14-1.el7.
Naravno, sve opcije yum instalacijskog programa mogu se koristiti putem Ansiblea, uključujući ažuriranje, instalaciju, najnoviju verziju i uklanjanje.
U donjem primjeru, ista naredba se izdaje za uklanjanje prethodno instaliranog ncdu paketa.
[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"
]
}
Objašnjenje:
- Izlaz naredbe yum pokazuje da je paket uklonjen.
Još jedna bitna značajka Ansiblea je njegova sposobnost prikupljanja činjenica o sustavu. Prikuplja podatke o hardveru, softveru i verziji te pohranjuje svaku vrijednost u varijablu koju kasnije možete ponovno upotrijebiti.
Kada su vam potrebne detaljne informacije o sustavima koje će Ansible modificirati, modul za postavljanje prikuplja te činjenice iz sistemskih varijabli.
Ansible Playbooks
Ansible Playbooks su način slanja naredbi udaljenim sustavima putem skripti. Playbookovi konfiguriraju složena sistemska okruženja i povećavaju fleksibilnost pokretanjem jedne skripte na jednom ili više sustava. Ponašaju se više kao konfiguracijski jezik nego kao programski jezik.
Naredbe playbooka koriste YAML format, tako da je potrebno malo sintakse, ali se mora poštivati uvlačenje. Kao što ime sugerira, playbook je zbirka playova. Pomoću playbooka možete dodijeliti određene uloge nekim hostovima i različite uloge drugima, orkestrirajući mnoge poslužitelje u jednoj datoteci.
Prije nego što nastavimo s primjerima playbookova, korisno je definirati zadatak. Zadaci su sučelje za Ansible module za uloge i playbookove.
Sada, razmotrite Ansibleovu playbook s jednom igrom koja sadrži više zadataka, kao što je prikazano u nastavku:
---
- hosts: group1
tasks:
- name: Install lldpad package
yum:
name: lldpad
state: latest
- name: check lldpad service status
service:
name: lldpad
state: started
U gornjem playbooku, hostovi group1 u hosts datoteci su namijenjeni za instalaciju lldpad paketa pomoću yum modula. lldpad servis kreiran nakon instalacije zatim se pokreće pomoću servisnog modula, koji uglavnom komunicira sa systemd ansamblom.
Objašnjenje:
- Grupa hostova na kojima će se izvoditi playbook
- Modul Yum koristi se u ovom zadatku za instalaciju lldpada
- Servisni modul se koristi za provjeru radi li usluga nakon instalacije
Svaki Ansible playbook radi s datotekom inventara. Datoteka inventara sadrži popis poslužitelja podijeljenih u grupe, što daje bolju kontrolu nad detaljima kao što su IP adresa i SSH port za svaki host.
Datoteka inventara za ovaj primjer playbooka izgleda ovako. Postoje dvije grupe, grupa1 i grupa2, od kojih svaka sadrži host1 i 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
Objašnjenje:
- Naziv grupe
- Naziv glavnog računala, s IP adresom i ssh portom, u ovom slučaju zadanim, 22.
Sljedeći primjer Ansible playbooka sadrži dvije reprodukcije za dvije grupe hostova. Za prvu grupu, group1, SELinux je omogućen, a kada je omogućen, na zaslonu hosta se pojavljuje poruka.
Za drugu grupu, httpd paket se instalira samo ako je ansible_os_family RedHat, a ansible_system_vendor HP.
ansible_os_family i ansible_system_vendor su varijable prikupljene opcijom gather_facts i mogu se koristiti kao u ovom uvjetnom primjeru.
---
- 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'
Objašnjenje:
- Primjer odredbe kada, u ovom slučaju, kada je tip OS-a Debian. Varijabla ansible_os_family prikuplja se putem funkcije gather_facts.
- Izlaz zadatka je registriran za buduću upotrebu, sa svojim imenom enable_selinux
- Još jedan primjer odredbe kada. U tom slučaju će se prikazati poruka za korisnika glavnog računala ako je SELinux doista prije bio omogućen.
- Još jedan primjer kada se klauzula sastoji od dva pravila
Osim zadataka, postoje i posebni zadaci koji se nazivaju rukovatelji. Rukovatelj mora imati jedinstveno ime u cijeloj playbooku. Rukovatelji rade kao redovni zadatak, ali rukovatelj može biti obaviješten putem obavijestitelja.
Ako rukovatelj nije obaviješten tijekom izvođenja playbooka, on se ne izvršava. Međutim, ako više od jednog zadatka obavijesti rukovatelja, on se izvršava samo jednom nakon što su svi zadaci završeni.
U donjem primjeru, određeni zadatak ima odjeljak za obavještavanje koji poziva drugi zadatak. Ako se promijeni izlaz prvog zadatka, poziva se zadatak za rukovanje. Uobičajeni primjer je promjena konfiguracijske datoteke, a zatim ponovno pokretanje pogođene usluge.
---
- 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
U ovom slučaju, ako se prvi zadatak, "sshd config file modify port", promijeni, što znači da port više nije 28675, port se mijenja i zadatak obavještava rukovatelja istog imena, koji ponovno pokreće sshd uslugu.
Objašnjenje:
- Primjer dojavljivača
- Primjer rukovatelja
Anzibilne uloge
Pri radu s velikim playbookovima lakše je podijeliti zadatke u uloge. Uloge također olakšavaju ponovnu upotrebu rada kasnije. Uloga je skup zadataka koji se mogu premjestiti iz jednog playbooka u drugi i izvršavati neovisno, iako samo putem playbook datoteke.
Uloge se pohranjuju u zasebne direktorije i slijede određenu strukturu direktorija.
[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 datoteka u direktoriju defaults sadrži zadane varijable korištene s playbookom. Direktorij handlers pohranjuje handlere, a direktorij meta sadrži informacije o autoru i ovisnostima uloga. Direktorij tasks sadrži glavnu YAML datoteku za ulogu.
Direktorij testovi sadrži primjer YAML playbooka i primjer datoteke inventara, a uglavnom se koristi za testiranje prije nego što se stvarna uloga stvori.
Direktorij vars sadrži YAML datoteku u kojoj su definirane sve varijable koje koristi uloga. Direktoriji templates i files sadrže predloške i datoteke koje koriste zadaci u ulozi.
Za izradu stabla direktorija za ulogu, upotrijebite sljedeću naredbu s nazivom uloge kao posljednjim parametrom:
[root@ansible-server test2]# ansible-galaxy init role1
Ansible također dobro radi s predlošcima, a kao jezik za predloške koristi Jinja2.
Sljedeći primjer pokazuje kako izgleda osnovni Jinja2 predložak i kako ga koristiti u ulozi.
Tijekom izvođenja, ovisno na primjer o tome u kojem se podatkovnom centru nalazi vaš poslužitelj, možete odabrati između nekoliko nameservera, od kojih svaki odgovara podatkovnom centru, koristeći varijablu resolver_ip_addresses.
{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}
options timeout:1
options attempts:5
options rotate
U ovom primjeru, direktorij playbooka definira nekoliko varijabli, uključujući resolver_ip_addresses, s različitim vrijednostima ovisno o podatkovnom centru.
- name: Set resolver for server
template:
src: dns.j2
dest: /etc/resolv.conf
group: root
owner: root
mode: "0644"
tag: resolver
Objašnjenje:
- Naziv predloška koji će se koristiti. Predložak se nalazi u direktoriju predložaka u putu uloge
- Odredišna staza naziva datoteke koja će se zamijeniti predloškom, na strani klijenta.
- Dopuštenja odredišne datoteke
Zadaci uloga također mogu imati polje oznake s dodijeljenim nazivom. Više zadataka može dijeliti istu oznaku, a kada pokrenete playbook, možete odrediti oznaku tako da se izvršavaju samo označeni zadaci.
Ansible studija slučaja
U ovom odjeljku analiziramo studiju slučaja osnovnog Ansibleovog priručnika koji ima tri uloge. Cilj je dati praktičan primjer do sada obrađenih koncepata. Neki raniji primjeri iz ovog vodiča prilagođeni su i ponovno korišteni u ovom priručniku.
Ispod je struktura direktorija playbooka. Korištena YAML datoteka je 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
Playbook ima tri uloge. Uloga resolvera postavlja određeni nameserver na poslužiteljima kopiranjem datoteke na odredište /etc/resolv.conf. Uloga httpd instalira httpd paket s yum modulom, a treća uloga omogućuje SELinux i obavještava prijavljenog korisnika da ponovno pokrene sustav. Svaka uloga je kreirana naredbom ansible-galaxy.
Uloga razrješitelja, main.yml zadatak:
Httpd uloga, main.yml zadatak:
Selinux uloga, main.yml zadatak:
U nastavku slijedi p4.yml playbook. Pokreće se na svim hostovima osim ako nije drugačije navedeno u naredbenom retku, pokreće se kao root korisnik na portu 22 (SSH), prikuplja činjenice prije pokretanja uloga i pokreće sve tri uloge. Svaka se uloga može pokrenuti neovisno navođenjem njezine oznake u naredbenom retku ansible-playbook s parametrom -t.
---
- hosts: all
user: root
port: 22
gather_facts: True
roles:
- { role: selinux, tags: selinux }
- { role: httpd, tags: httpd }
- { role: resolver, tags: resolver }
Zatim možete pokrenuti p4.yml playbook na dva hosta i interpretirati izlaz. Ista naredba može se pokrenuti s parametrom –check za probni rad i s parametrom -k kada želite koristiti autentifikaciju lozinkom.
Objašnjenje:
- Ansible-playbook naredba koja pokreće p4.yml
- Playbook preskače SELinux ulogu jer je već omogućena.
- Ansible je otkrio da je httpd paket već instaliran, pa vraća ok.
- Razrješivač je postavljen, a razrješivač uloge je dobio status promijenjen.
Ansible Commands Cheat Sheet
Instalirajte EPEL repo na Centos/RHEL sustave
[root@ansible-server ~]# sudo yum install epel-release
Instalirajte ansible paket na Centos/RHEL sustave
[root@ansible-server ~]# sudo yum install -y ansible
Izvršite ažuriranje paketa na Debianu/Ubuntu sustavi
$ sudo apt update
Instalirajte paket software-properties-common na Debian/Ubuntu sustavi
$ sudo apt install software-properties-common
Instalirajte ansible osobnu arhivu paketa na Debian/Ubuntu sustavi
$ sudo apt-add-repository ppa:ansible/ansible
Instalirajte ansible na Debian/Ubuntu sustavi
$ sudo apt update $ sudo apt install ansible
Izdanje a ping naredba na svim poslužiteljima definiranim u datoteci inventara pod nazivom hosts
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
Izdanje a ping naredba samo na hostu2
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
Kopirajte datoteku "testfile" na sve hostove u datoteci inventara
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
Instalirajte ncdu paket na svim hostovima
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
Uklonite ncdu paket na svim hostovima
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
Izgradite strukturu direktorija za ulogu pod nazivom role1.
[root@ansible-server test2]# ansible-galaxy init role1
Dry-run p4.yml playbook
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check
Pokrenite p4.yml playbook s provjerom autentičnosti lozinkom za sve hostove
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k















