Taula de continguts

Ansible: eina d'orquestració

Ansible és un sistema d'orquestració lliure, escrit en Python, que ens permet automatitzar la configuració d’una màquina d’una forma senzilla.

Ansible automatitza la gestió de sistemes remots i controla el seu estat desitjat.

La web oficial de la documentació d'Ansible és: https://docs.ansible.com/ansible_community.html

, , , , , , , , , , ,


Com funciona Ansible?

Un entorn ansible conté els següents components principals:

Els Playbooks estan escrits en llenguatge YAML (només cal aprendre com col·locar els atributs dintre del fitxer). Les característiques claus generals són:

Per configurar l’inventari:

 $ sudo nano /etc/ansible/hosts 
# Podem definir directament la IP o URL
104.155.184.125
Ansible1.prova.org
34.71.11.100

# Podem crear grups d’IPs o URL
[gupexemple]
104.155.184.125
Ansible1.prova.org
[altregrupexemple]
34.71.11.100

# Podem crear subgrups de grups
[subgrupprova: children]
grupexemple
altregrupexemple

Existeixen 2 grups per defecte:

També es poden utilitzar variables. Es pot consultar la llista de variables.

Modificadors del comando Ansible

El comando Ansible té diversos arguments (modificadors) que li podem posar. Es pot consultar la llista de modificadors per Ansible.

L’estructura és:

 $ansible <nomservidor> <argument> <valorargument> 
$ansible ansible1 --> el comando s’executaria en el servidor ansible1. 
$ansible all --> per executar el comando en tots els servidors del fitxer "hosts" 

Aquí us deixo una llista d’alguns arguments per Ansible.

 $ ansible ansible1 -m shell -a "echo $HOME & date"
 $ ansible ansible1 –m ping
 $ ansible ansible1 -a hostname 
 $ ansible ansible1 -a “free -m” --> es posa entre cometes perquè porta més d’un argument. 

Alguns dels mòduls per utilitzar són:

#Per a crear un grup admin 
$ ansible ansible1 -m group –a “name=admin state=present” -b 
#Per crear un usuari:
$ ansible ansible1 -m user -a "name=anasanz group=admin create_home=yes" -b
$ ansible ansible1 -m stat -a "path=/etc/host" 
$ ansible ansible1 -m copy -a "src=/etc/hosts dest=/tmp/copia" 
$ ansible ansible1 -m fetch -a "src=/etc/hosts dest=/tmp/" 
#Per executar un script cada dimart a les 4:00 h tots els mesos de l’any.
$ ansible ansible1 -m cron -a "name='exemple' weekday=2 hour=4 minute=0 job='/script.sh'" 
$ ansible ansible1 -m setup
$ ansible ansible1 -m setup -a “filter=*ipv4” 



Instal·lació d’Ansible

Per fer la instal·lació es pot seguir el manual oficial d’Ansible. En cas de tenir el sistema operatiu Ubuntu seria:

 
# apt update
# apt install software-properties-common
# add-apt-repository --yes --update ppa:ansible/ansible
# apt-get install ansible

Si es vol tenir l’última versió es pot baixar de pypi (pip install ansible). S’ha de tenir en compte que s’ha de tenir instal·lat abans python i ssh.

Una vegada s’ha realitzat la instal·lació cal configurar el fitxer Playbook, en aquest exemple seria playbook1.yaml.

Estructura del Playbook1.yaml

L’estructura bàsica d’un Playbook és:

--
- hosts: ansible1
  become: yes
  tasks:
  - name: Install Apache
    apt: name=apache2 state=latest
  - name: Check Apache is running & start on boot
    service: name=apache2 state=started enabled=yes
...

En aquest cas seria un exemple de Playbook per instal·lar l’Apache. Es pot observar que el fitxer comença amb 2 guions (- -) i acaba amb 3 punts (…).

$ ansible-playbook playbook1.yaml 

Dintre dels Playbooks es poden definir:

 - name: template file to remote host
       template:
         src: archivo-config.j2
         dest: /tmp/archivo-config


Et proposo realitzar les activitats següents:

Activitat 1: Instal·la Ansible en el teu node controlador i crea un Playbook per realitzar tasques de manteniment i control dels teus servidors.

Activitat 2: Configura el crontab del servidor Ansible per llançar tots els Playbooks diàriament.



Vagrant amb Ansible

Molts projectes necessiten d'un entorn d'integració contínua en el qual es pot veure i detectar les fallades de manera ràpida, sense arribar a l'entorn de producció. Doncs, gràcies a la combinació de Vagrant i Ansible pots desplegar de manera senzilla un entorn d'integració contínua.

Si et preguntes què pots fer amb Vagrant i Ansible, aquí et deixo una pinzellada:

Per a executar Ansible contra Vagrant, la configuració bàsica de Vagrantfile seria:

Vagrant.configure("2") do |config|

  #
  # Executa Ansible des de Vagrant Host
  #
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook1.yml"
  end

end

Només que hi hagi 1 màquina amb el provisioner vagrant es crearà l'arxiu .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory. Així sabrem les màquines que disposem i les podrem modificar totes alhora, per exemple, per fer un ping Ansible, des de la màquina amfitriona:

$ ansible all --inventory-file=.vagrant/provisioners/ansible/inventory/ -m ping

Ull, perquè funcioni bé:

Et proposo fer la següent activitat:

Activitat 3: Crear un entorn d’integració amb Vagrant i Ansible, per realitzar el manteniment i control dels teus servidors.


CLARA CABRERA MESEGUER 2022/07/03 22:25