Kako koristiti Ansible Playbooks za automatizaciju složenih zadataka na više udaljenih servera - 2. dio


U prethodnom članku ove Ansible serije, objasnili smo da je Ansible alat bez agenta koji vam omogućava da brzo i efikasno upravljate više mašina (takođe poznatih kao čvorovi – i vršite implementacije na njima) iz jednog sistema.

Nakon što instalirate softver u mašinu kontrolera, kreirate ključeve za prijavu bez lozinke i kopirate ih na čvorove, vrijeme je da naučite kako optimizirati proces upravljanja takvim udaljenim sistemima koristeći Ansible.

U ovom članku, kao iu sljedećem, koristit ćemo sljedeće testno okruženje. Svi hostovi su CentOS 7 kutije:


Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

Osim toga, imajte na umu da su oba čvora dodana u odjeljak web servera lokalne /etc/ansible/hosts datoteke:

Ipak, počnimo s predmetnom temom.

Predstavljamo Ansible Playbooks

Kao što je opisano u prethodnom vodiču, možete koristiti ansible uslužni program za pokretanje komandi u udaljenim čvorovima na sljedeći način:


ansible -a "/bin/hostnamectl --static" webservers

U gornjem primjeru, pokrenuli smo hostnamectl --static na čvoru1 i čvoru2. Ne treba dugo da se shvati da ova metoda izvršavanja zadataka na udaljenim računarima dobro funkcionira za kratke naredbe, ali može brzo postati opterećujuća ili neuredna za složenije zadatke koji zahtijevaju dalje dobro strukturirane konfiguracijske parametre ili interakcije s drugim uslugama.

Na primjer, postavljanje i konfiguriranje WordPress-a na više hostova – o čemu ćemo govoriti u sljedećem članku ove serije). Ovdje na scenu dolaze Playbooks.

Jednostavno rečeno, Playbooks su obični tekstualni fajlovi napisani u YAML formatu i sadrže listu sa stavkama sa jednim ili više parova ključ/vrijednost (također poznat kao „ >heš ” ili “rječnik ”).

Unutar svakog Playbook-a naći ćete jednu ili više grupa domaćina (svaka od ovih grupa se također naziva play) gdje će se izvršiti željeni zadaci.

Primjer iz službenih dokumenata pomoći će nam da ilustrujemo:

1. hostovi: ovo je lista mašina (prema /etc/ansible/hosts) na kojima će se obavljati sljedeći zadaci.

2. remote_user: udaljeni račun koji će se koristiti za obavljanje zadataka.

3. vars: varijable koje se koriste za modificiranje ponašanja udaljenih sistema.

4. zadaci se izvršavaju redom, jedan po jedan, protiv svih mašina koje odgovaraju hostovima. U okviru igre, svi domaćini će dobiti iste direktive zadatka.

Ako trebate izvršiti drugačiji skup povezanih zadataka za određenog domaćina, kreirajte još jednu igru u trenutnom Playbook-u (drugim riječima, svrha igre je mapiranje određenog izbora domaćina na dobro -definisani zadaci).

U tom slučaju, započnite novu igru dodavanjem direktive domaćina na dnu i počevši ispočetka:


---
- hosts: webservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
  remote_user: root
  tasks:
  - name: description for task1
    task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  - name: description for task1
    task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  handlers:
    - name: description for handler 1
      service: name=name_of_service state=service_status
- hosts: dbservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
…

5. Obrađivači su radnje koje se pokreću na kraju odjeljka zadataka u svakoj igri, a uglavnom se koriste za ponovno pokretanje usluga ili pokretanje ponovnog pokretanja u udaljenim sistemima.


mkdir /etc/ansible/playbooks

I fajl pod nazivom apache.yml unutra sa sljedećim sadržajem:


---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: replace default index.html file
    copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

Drugo, kreirajte direktorij /static_files:


mkdir /static_files

gdje ćete pohraniti prilagođeni fajl index.html:


<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="utf-8"/>
 </script>
 </head>
 <body>
 <h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
 </body>
 </html>

Međutim, sada je vrijeme da koristite ovaj priručnik za obavljanje ranije spomenutih zadataka. Primijetit ćete da će Ansible proći kroz svaki zadatak po hostu, jedan po jedan, i izvijestit će o statusu takvih zadataka:


ansible-playbook /etc/ansible/playbooks/apache.yml

Sada da vidimo šta se dešava kada otvorimo pretraživač i usmerimo ga na 192.168.0.29 i 192.168.0.30:

Idemo korak dalje i ručno zaustavimo i onemogućimo Apache na čvoru1 i čvoru2:


systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd

onda ponovo trci,


ansible-playbook /etc/ansible/playbooks/apache.yml

Ovaj put, zadatak izvještava da je Apache web server pokrenut i omogućen na svakom hostu:

Razmotrite gornji primjer kao uvid u moć Ansiblea. Iako su ovo relativno laki zadaci kada se izvode na malom broju servera, mogu postati veoma zamorni i dugotrajni ako morate da uradite isto na nekoliko (možda stotinama) mašina.

Sažetak

U ovom članku smo opisali kako pokrenuti naredbe i izvršiti složene zadatke na nekoliko udaljenih hostova istovremeno koristeći Ansible. Službena dokumentacija i GitHub spremište pružaju mnogo primjera i vodiča o tome kako koristiti Ansible za postizanje gotovo svakog zamislivog zadatka.

Dok počnete učiti kako da automatizirate zadatke na udaljenim Linux hostovima koristeći Ansible, željeli bismo čuti vaše mišljenje. Pitanja, komentari i prijedlozi su također uvijek dobrodošli, pa nas slobodno kontaktirajte koristeći formu ispod u bilo koje vrijeme.