Com utilitzar Ansible Playbooks per automatitzar tasques complexes en diversos servidors remots - Part 2


A l'article anterior d'aquesta sèrie d'Ansible, vam explicar que Ansible és una eina sense agent que us permet gestionar de manera ràpida i eficient diverses màquines (també conegudes com a nodes, i també realitzar-hi desplegaments) des d'un sol sistema.

Després d'instal·lar el programari a la màquina controladora, crear les claus per a l'inici de sessió sense contrasenya i copiar-les als nodes, és hora d'aprendre a optimitzar el procés de gestió d'aquests sistemes remots mitjançant Ansible.

Al llarg d'aquest article, així com del següent, utilitzarem el següent entorn de prova. Tots els amfitrions són caixes CentOS 7:

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

A més, tingueu en compte que tots dos nodes s'han afegit a la secció de servidors web del fitxer local /etc/ansible/hosts:

Dit això, comencem amb el tema en qüestió.

Presentació de Ansible Playbooks

Tal com es descriu a la guia anterior, podeu utilitzar la utilitat ansible per executar ordres en nodes remots de la següent manera:

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

A l'exemple anterior, vam executar hostnamectl --static al node1 i al node2. No triga gaire a adonar-se que aquest mètode d'execució de tasques en ordinadors remots funciona bé per a ordres curtes, però pot esdevenir ràpidament pesat o desordenat per a tasques més complexes que requereixen paràmetres de configuració més ben estructurats o interaccions amb altres serveis.

Per exemple, configurar i configurar WordPress en diversos amfitrions, que tractarem al següent article d'aquesta sèrie). Aquí és on entren en escena Playbooks.

En poques paraules, els Playbooks són fitxers de text senzill escrits en format YAML i contenen una llista amb elements amb un o més parells clau/valor (també conegut com a \hash o \diccionari).

Dins de cada Playbook hi trobareu un o més grups d'amfitrions (a cada un d'aquests grups també s'anomena obra de teatre) on s'han de realitzar les tasques desitjades.

Un exemple dels documents oficials ens ajudarà a il·lustrar:

1. hosts: aquesta és una llista de màquines (segons /etc/ansible/hosts) on es realitzaran les tasques següents.

2. usuari_remot: compte remot que s'utilitzarà per realitzar les tasques.

3. vars: variables utilitzades per modificar el comportament dels sistemes remots.

4. Les tasques s'executen en ordre, una a la vegada, contra totes les màquines que coincideixen amb els amfitrions. Dins d'una jugada, tots els amfitrions rebran les mateixes directives de tasques.

Si necessiteu executar un conjunt diferent de tasques associades per a un amfitrió específic, creeu una altra jugada al llibre de jugades actual (és a dir, l'objectiu d'una jugada és assignar una selecció específica d'amfitrions a tasques ben definides).

En aquest cas, inicieu una nova jugada afegint la directiva hosts a la part inferior i tornant a començar:

---
- 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. Els gestors són accions que es desencadenen al final de la secció de tasques de cada jugada i s'utilitzen principalment per reiniciar serveis o activar reinicis en els sistemes remots.

# mkdir /etc/ansible/playbooks

I un fitxer anomenat apache.yml a dins amb el contingut següent:

---
- 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

En segon lloc, creeu un directori /static_files:

# mkdir /static_files

on emmagatzemareu el fitxer index.html personalitzat:

<!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>

Dit això, ara és el moment d'utilitzar aquest llibre de jocs per realitzar les tasques esmentades anteriorment. Notareu que Ansible revisarà cada tasca per amfitrió, una a la vegada, i informarà de l'estat d'aquestes tasques:

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

Ara vegem què passa quan obrim un navegador i l'apuntem a 192.168.0.29 i 192.168.0.30:

Anem un pas més enllà i aturem i desactivem manualment Apache al node1 i al node2:

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

Després torna a córrer,

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

Aquesta vegada, la tasca informa que el servidor web Apache s'ha iniciat i habilitat a cada host:

Si us plau, considereu l'exemple anterior com una visió del poder d'Ansible. Tot i que aquestes són tasques relativament fàcils quan es realitzen en un nombre reduït de servidors, pot arribar a ser molt tediós i requereix molt de temps si necessiteu fer el mateix en diverses (potser centenars) de màquines.

Resum

En aquest article hem descrit com executar ordres i executar tasques complexes en diversos hosts remots simultàniament mitjançant Ansible. El repositori de GitHub ofereix molts exemples i guies sobre com utilitzar Ansible per aconseguir gairebé qualsevol tasca imaginable.

Quan comenceu a aprendre a automatitzar tasques en amfitrions Linux remots mitjançant Ansible, ens agradaria escoltar els vostres pensaments. Les preguntes, comentaris i suggeriments són sempre benvinguts, així que no dubteu a contactar amb nosaltres mitjançant el formulari següent en qualsevol moment.