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
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:
YAML
pot ser .yml o .yaml (recomanada).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:
all
: Reuneix tots els servidors.ungrouped
: Reuneix tots els servidors però que no estan en cap grup.
També es poden utilitzar variables. Es pot consultar la llista de variables.
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:
.deb
des de la línia de comandos.-b
.#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'"
-a
per fer filtratges:$ ansible ansible1 -m setup $ ansible ansible1 -m setup -a “filter=*ipv4”
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.
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 (…).
become: yes
. Seria equivalent al -b
en els comandos AD-HOC. Si no es necessiten els permisos de superusuari no cal posar-lo. GIT
.NANO
o VIM
.name
de cada tasca pot estar en qualsevol idioma mentre segueixi UTF-8 o 16.- hosts: etc
ja que a l'ésser una llista podem continuar afegint.remote_user: nom
.$ ansible-playbook playbook1.yaml
Dintre dels Playbooks es poden definir:
template
va a buscar l'arxiu que se li indica en la ruta template
.- 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.
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é:
~/.ssh/known_hosts
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