Ansible Tutorial za početnike: priručnik, naredbe i primjer
Što je Ansible?
Ansible je alat otvorenog koda za automatizaciju i orkestraciju za pružanje softvera, upravljanje konfiguracijom i implementaciju softvera. Ansible može lako pokretati i konfigurirati sustave slične Unixu Windows sustavi za pružanje infrastrukture kao koda. Sadrži vlastiti deklarativni programski jezik za konfiguraciju i upravljanje sustavom.
Ansible je popularan zbog svoje jednostavnosti instalacije, lakoće korištenja što se tiče povezivanja s klijentima, nedostatka agenta za Ansible klijente i mnoštva vještina. Djeluje spajanjem putem SSH prema klijentima, tako da ne treba posebnog agenta na strani klijenta, a guranjem modula klijentima, moduli se zatim izvršavaju lokalno na strani klijenta, a izlaz se vraća natrag na Ansible poslužitelj.
Budući da koristi SSH, može se vrlo lako povezati s klijentima pomoću SSH-ključeva, pojednostavljujući cijeli proces. Pojedinosti o klijentima, kao što su imena hostova ili IP adrese i SSH priključci, pohranjuju se u datoteke koje se nazivaju datoteke inventara. Nakon što ste kreirali datoteku inventara i popunili je, ansible je može koristiti.
Zašto koristiti Ansible?
Evo nekoliko važnih prednosti/prednosti korištenja Ansiblea
- Jedna od najznačajnijih prednosti Ansiblea je ta što ga svi mogu besplatno koristiti.
- Za instalaciju i korištenje Ansiblea nisu potrebne nikakve posebne vještine administratora sustava, a službena dokumentacija je vrlo iscrpna.
- Njegova modularnost u pogledu dodataka, modula, inventara i knjiga za igru čini Ansible savršenim suputnikom za orkestriranje velikih okruženja.
- Ansible je vrlo lagan i dosljedan i nema ograničenja u pogledu operativnog sustava ili temeljnog hardvera.
- Također je vrlo siguran zbog svojih mogućnosti bez agenta i zbog upotrebe sigurnosnih značajki OpenSSH.
- Još jedna prednost koja potiče usvajanje Ansiblea je njegova glatka krivulja učenja određena opsežnom dokumentacijom i lakom za učenje strukturom i konfiguracijom.
Povijest Ansiblea
Ovdje su važne kopnene oznake iz povijesti ansiblea:
- U veljači 2012. započeo je projekt Ansible. Prvi ga je razvio Michael DeHaan, tvorac Cobbler and Func, Fedora Unified Network Controller.
- U početku nazvana AnsibleWorks Inc, tvrtku koja financira ansible alat kupila je 2015. RedHat, a kasnije je, zajedno s RedHatom, prešla pod kišobran IBM.
- U sadašnjosti, Ansible je uključen u distribucije kao što su Fedora Linux, RHEL, Centos i Oracle Linux.
Važni pojmovi koji se koriste u Ansibleu
-
Ansible poslužitelj
Stroj na kojem je instaliran Ansible i s kojeg će se pokretati svi zadaci i knjige
-
Moduli
U osnovi, modul je naredba ili skup sličnih Ansible naredbi namijenjenih izvršavanju na strani klijenta
-
Zadatak
Zadatak je dio koji se sastoji od jedne procedure koju treba izvršiti
-
Uloga
Način organiziranja zadataka i srodnih datoteka koje se kasnije pozivaju u priručniku
-
Činjenica
Informacije dohvaćene iz klijentskog sustava iz globalnih varijabli operacijom prikupljanja činjenica
-
Popis
Datoteka koja sadrži podatke o ansible klijentskim poslužiteljima. U kasnijim primjerima definirana kao host datoteka
-
Igrati
Izvođenje knjige za igru
-
sekundant
Zadatak koji se poziva samo ako je prisutan obavijestitelj
-
Obavijestilac
Odjeljak pripisan zadatku koji poziva rukovatelja ako se izlaz promijeni
-
Pojam
Ime postavljeno na zadatak koji se kasnije može koristiti za izdavanje samo tog specifičnog zadatka ili grupe zadataka.
Ansible instalacija u Linuxu
Nakon što ste usporedili i odvagnuli svoje opcije i odlučili se za Ansible, sljedeći korak je da ga instalirate na svoj sustav. Proći ćemo kroz korake instalacije na različite načine Linux distribucije, one najpopularnije, u sljedećem malom vodiču.
Instalirajte Ansible na Centos/RedHat sustave
Korak 1) Instalirajte EPEL repo
[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 na koji se Ansible može koristiti je korištenje ad-hoc naredbi. Oni se mogu koristiti kada želite izdati neke naredbe na poslužitelju ili grupi poslužitelja. Ad-hoc naredbe se ne pohranjuju za buduću upotrebu, već predstavljaju brz način interakcije sa željenim poslužiteljima.
Za ovaj Ansible vodič bit će konfigurirana jednostavna datoteka hostova s dva poslužitelja koja sadrži host1 i host2.
Možete osigurati da su hostovi dostupni s ansible poslužitelja izdavanjem naredbe ping 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.
Istu naredbu možete izdati samo na određenom hostu ako je 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, možete koristiti modul za kopiranje u ansibleu koji koristi SCP. Dakle, naredba i njen 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 ćete saznati kako instalirati paket preko yum modula 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 ili uklanjanje.
U donjem primjeru izdana je ista naredba 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 korisna i bitna značajka koju ansible koristi za interakciju s klijentovim poslužiteljem je prikupljanje nekih činjenica o sustavu. Dakle, dohvaća informacije o hardveru, softveru i verzijama iz sustava i pohranjuje svaku vrijednost u varijablu koja se kasnije može koristiti.
Ako trebate detaljne informacije o sustavima koje treba modificirati putem ansiblea, možete upotrijebiti sljedeću naredbu. Modul za postavljanje prikuplja činjenice iz varijabli sustava.
Ansible Playbooks
Ansible Playbooks su način slanja naredbi udaljenim sustavima putem skripti. Ansible playbooks se koriste za konfiguriranje okruženja složenih sustava kako bi se povećala fleksibilnost izvršavanjem skripte na jednom ili više sustava. Ansible playbooks više su konfiguracijski nego programski jezik.
Ansible playbook naredbe koriste YAML format, tako da nije potrebno puno sintakse, ali uvlačenje se mora poštivati. Kao što naziv kaže, playbook je zbirka drama. Putem priručnika možete odrediti određene uloge nekim domaćinima i druge uloge drugim domaćinima. Na taj način možete orkestrirati više poslužitelja u vrlo različitim scenarijima, sve u jednom priručniku.
Da bismo sve pojedinosti imali precizne prije nastavka s primjerima Ansible playbooka, prvo moramo definirati zadatak. Ovo je sučelje za ansible module za uloge i playbooks.
Sada naučimo Ansible playbook kroz primjer s jednom playbook-om s jednom igrom, koji 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 primjeru priručnika za Ansible, grupa1 hostova u datoteci hosta ciljana je za instalaciju paketa lldpad pomoću modula yum, a nakon toga se servis lldpad stvoren nakon instalacije pokreće pomoću servisnog modula koji se uglavnom koristi za interakciju 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 radi bolje kontrole pojedinosti kao što su IP adresa i SSH port za svaki host.
Datoteka inventara koju možete koristiti za ovaj primjer knjige Ansible izgleda ovako. Postoje dvije grupe, pod nazivom group1 i group2, 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 je još jedan koristan primjer Ansible playbooka koji ovaj put sadrži dvije igre za dva domaćina. Za prvu grupu hostova, grupu1, selinux će biti omogućen. Ako je omogućeno, tada će se pojaviti poruka na zaslonu glavnog računala.
Za drugu grupu hostova, paket httpd bit će instaliran samo ako je ansible_os_family RedHat, a ansible_system_vendor HP.
Ansible_os_family i ansible_system_vendor varijable su prikupljene s 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 neki posebni zadaci koji se zovu rukovatelji. Rukovatelji moraju imati jedinstveno ime u cijelom priručniku. Oni rade na isti način kao obični zadatak, ali rukovatelj može biti obaviješten putem obavijesti.
Ako rukovatelj nije obaviješten tijekom pokretanja priručnika, neće se pokrenuti. Međutim, ako više od jednog zadatka obavijesti rukovatelja, to će se pokrenuti samo jednom nakon završetka svih zadataka.
U donjem primjeru možete vidjeti kako određeni zadatak ima odjeljak obavijesti koji poziva drugi zadatak. Ako se izlaz prvog zadatka promijeni, tada će biti pozvan zadatak rukovatelja. Najbolji primjer je promijeniti konfiguracijsku datoteku i nakon toga ponovno pokrenuti tu specifičnu uslugu.
---
- 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 je prvi zadatak, “sshd config file modify port” promijenjen, što znači da ako port nije 28675 na prvom mjestu, tada će biti izmijenjen i zadatak će obavijestiti rukovatelja s istim imenom da se pokrene , i ponovno će pokrenuti sshd uslugu.
Objašnjenje:
- Primjer dojavljivača
- Primjer rukovatelja
Anzibilne uloge
Kada se bavite opsežnim igrama, lakše je podijeliti zadatke u uloge. Ovo također pomaže u ponovnom korištenju uloga u budućnosti. Uloge su zbirka zadataka, koji se mogu premještati iz jednog playbooka u drugi, mogu se pokretati neovisno, ali samo kroz playbook file.
Uloge su pohranjene u zasebnim direktorijima i imaju posebnu 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
Datoteka yaml u direktoriju defaults sadrži popis zadanih varijabli koje će se koristiti zajedno s priručnikom. Direktorij rukovatelja koristi se za pohranu rukovatelja. Meta-direktorij bi trebao sadržavati informacije o autoru i ovisnostima o ulogama. U direktoriju zadataka nalazi se glavna yaml datoteka za ulogu.
Direktorij testova sadrži oglednu datoteku yaml playbook-a i oglednu datoteku inventara i uglavnom se koristi u svrhe testiranja prije stvaranja stvarne uloge.
Direktorij vars sadrži yaml datoteku u kojoj će biti definirane sve varijable koje koristi uloga. Predlošci direktorija i datoteke direktorija trebaju sadržavati datoteke i predloške koje će koristiti zadaci u ulozi.
Da biste stvorili stablo direktorija za ulogu, trebali biste upotrijebiti sljedeću naredbu sa posljednjim parametrom, imenom uloge:
[root@ansible-server test2]# ansible-galaxy init role1
Ansible također dobro funkcionira s predlošcima. Kao jezik za šablone, koristi Jinja2.
U sljedećem primjeru saznat ćete kako izgleda osnovni jinja2 predložak i koristiti ga u ulozi.
U vrijeme izvođenja, ovisno o tome u kojem se podatkovnom centru, recimo, nalazi vaš poslužitelj, možete odabrati više od jednog poslužitelja imena, od kojih svaki odgovara podatkovnom centru, pomoću varijable “resolver_ip_addresses”.
{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}
options timeout:1
options attempts:5
options rotate
U ovom primjeru, u direktoriju playbooka definirane su neke varijable, uključujući varijablu naziva 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, kojem je pripisan naziv. Više od jednog zadatka može dijeliti istu oznaku. Prilikom pokretanja ansible playbooka, možete odrediti i oznaku, tako da će se ti zadaci izvršiti.
Ansible studija slučaja
U ovom odjeljku analizirat ćemo studiju slučaja esencijalne anzibilne knjige za igru koja ima tri uloge. Svrha ovoga je dati praktičan primjer onoga o čemu smo prije govorili. Neki od primjera korištenih prije u ovom priručniku za igru Ansible bit će prilagođeni i korišteni u ovoj knjizi za igru.
Ispod je struktura imenika priručnika. Yaml datoteka koja će se koristiti bit će 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, jednu koja se zove razrješivač koja postavlja određeni poslužitelj imena na poslužitelje kopiranjem datoteke s poslužitelja na odredište /etc/resolv.conf. Drugi se zove httpd i instalira httpd paket s modulom yum, a treći omogućuje SELinux i obavještava prijavljenog korisnika da ponovno pokrene sustav. Svaka je uloga stvorena pomoću naredbe ansible-galaxy.
Uloga razrješitelja, main.yml zadatak:
Httpd uloga, main.yml zadatak:
Selinux uloga, main.yml zadatak:
Ispod je definiran priručnik za p4.yml. Pokretat će se na svim računalima ako nije drugačije navedeno u naredbenom retku, pokrenut će se kao root korisnik na portu 22 (SSH), prikupit će činjenice prije pokretanja uloga i pokrenut će sve tri prethodno spomenute uloge. Svaka se uloga može pokrenuti neovisno određivanjem 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 }
Pokretanje priručnika p4.yml na dva hosta i tumačenje izlaza. Ista se naredba može pokrenuti s parametrom –check za rad na suho. U slučaju da želite koristiti autentifikaciju lozinkom, koristite -k parametar.
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
Izdajte naredbu ping na svim poslužiteljima definiranim u datoteci inventara pod nazivom hosts
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
Izdajte naredbu ping samo na host2
[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
Rezime
U svijetu s tehnologijom koja se neprestano mijenja velikom brzinom i raste nevjerojatno brzo u isto vrijeme, administratori sustava i devops inženjeri moraju smisliti različite pristupe kako automatizirati rutinske zadatke i orkestrirati velike skupove poslužitelja.
Iako postoje mnogi alternativa Ansibleu (Chef, Puppet) koji rade istu stvar uz neke razlike, Ansible se uspio uzdići iznad svih njih svojom jednostavnošću, poboljšanom sigurnošću i što je najvažnije glatkom krivuljom učenja. Zbog ovih kvaliteta i brzog usvajanja Ansiblea, izradili smo vodič pun primjera tako da možete imati još besprijekornije prvo iskustvo u radu s Ansibleom.
U ovom vodiču o osnovama Ansiblea opisali smo ansible i razgovarali o njegovoj povijesti. Spomenuli smo jake strane Ansiblea i prednosti koje ansible može donijeti automatizaciji i orkestraciji infrastruktura različitih veličina. Definirali smo bitne pojmove koji se koriste ansibleom i definirali strukturu Ansible playbooks. Detaljni primjeri popraćeni su svim informacijama detaljnim objašnjenjima.















