ANSIBLE INSTALLAZIONE PLAYBOOK E INVENTORY Emidio Giorgio Corso
ANSIBLE: INSTALLAZIONE, PLAYBOOK E INVENTORY Emidio Giorgio, Corso Ansible/Foreman/Puppet
Overview ■ Cosa è Ansible ■ Loop ■ Inventario – Host – Gruppi ■ Templates ■ L’esecuzione dei comandi – Tasks – Moduli – Playbook ■ Variabili – Gerarchia e precedenza – Facts 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 2
Cosa è Ansible ■ È un sistema di automazione IT, che può essere usato per: – Esecuzione remota di comandi – Gestione della configurazione : installazione, configurazione servizi, utenze – Monitoring : recupero informazione sui nodi – Orchestrazione e deployment ■ Modello di connessione molto semplice: – Non ci sono agenti da installare – Push mode : dalla control machine ai nodi, via ssh – Idempotenza: un task viene eseguito solo se lo stato del nodo è diverso da quello previsto ■ Controllo di versione – Infrastruttura e tasks modellati su codice, versionabili 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 3
Inventario ■ Host – Una macchina remota gestita da Ansible – Può avere variabili individuali (host name, service port number, etc) ■ Gruppi – Insiemi di host, accomunati da qualche aspetto logico (web server, rack 1, etc. . ) – Raggrupati da [] ■ Inventario – Un file con la descrizione degli host controllati da Ansible – Un host può stare in più gruppi, o in nessuno – Ci possono essere più file di inventario 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 4
Esempio di inventario bastion-hostname=bastion-host ctl_ip='192. 168. 0. 105' ctl_mac='CHANGEME' cu hostname=cu raw_ip='10. 0. 1. 202' ctl_ip='192. 168. 0. 121' ctl_mac='CHANGEME’ [all: vars] ctl_netmask= '255. 0' ctl_subnet= '192. 168. 0. 0' raw_netmask= '255. 0. 0. 0' raw_subnet= '10. 0' Formato. ini [fen] bastion-host publ_ip='CHANGEME' publ_mac='CHANGEME' ctl_gw='192. 168. 0. 105’ ctl_static_ip='true' dns_ext_server='1. 1' [control] cu raw_bootmode='static’ 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 5
Moduli ■ La cassetta degli attrezzi di Ansible – Organizzati per funzionalità : Rete, Database, File, Utilities. . – Quasi tutti accettano opzioni in forma ’’chiave=valore’’ – Scritti in python (quasi tutti. . . ) ■ Vasta libreria predefinita – ansible-doc –l – Web Indice dei moduli Ansible ■ Possono essere eseguiti direttamente con i comandi ad-hoc, oppure invocati nei playbook (vedi prossima slide) ansible webservers -m service -a "name=httpd state=started" ansible webservers -m ping ansible webservers -m command -a "/sbin/reboot -t now" 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet Ad hoc Command 6
Playbook, play e tasks ■ Task : applicazione di un singolo modulo su uno o più hosts – Ciascun task termina con uno stato ben definito ■ Playbook – Associano gli hosts con lo stato desiderato dell’infrastruttura, definendo l’insieme dei task che devono essere eseguiti – Permettono quindi l’orchestrazione e deployment – Collezione di plays ■ Plays – Un insieme di task ordinati, associati ad un gruppo di host – Un playbook può contenere uno o più play 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 7
- hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: name: httpd state: latest - name: write the apache config file template: src: /srv/httpd. j 2 dest: /etc/httpd. conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name: httpd state: started enabled: yes 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 8
Variabili e precedenze ■ Contestualizzano proprietà dei diversi sistemi ■ Possono essere ‘’programmate’’ con loop e condizioni ■ Possono essere definite in diversi contesti. In ordine di precedenza 1. Command line (-e) 2. Ruoli 3. Playbook/Tasks 4. Facts ■ Per vederle tutte ansible all -m setup ■ Molte variabili sono definite automaticamente da ansible ■ Un task può registrare il suo output come fact, con register nomevariabile ■ Le variabili definite da qualche parte possono essere chiamate in un play o in un template con {{nomevar}} – {{ansible_eth 0. ipv 4. address}} 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 9
Condizioni ■ Subordinano l’esecuzione di task a condizioni logiche name: "shutdown Debian flavored systems" command: /sbin/shutdown -t now when: ansible_os_family == "Debian" ###### when: ansible_distribution == "Cent. OS" and (ansible_distribution_major_version == "6" or ansible_distribution_major_version == "7") 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 10
Loop ■ I loop sono un modo efficiente per scrivere playbook e template {% for host in groups['head-nodes'] %} {{ hostvars[host]['ansible_eth 0']['ipv 4'] ['address'] }} {{ host }} {% endfor %} name: Install base packages yum: name: "{{ item }}" state: present with_items: - httpd - php 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet Non fatelo in produzione con yum! 11
YAML ■ I playbook, e opzionalmente anche gli inventari, sono espressi in YAML ■ YAML modella tutto in liste. Gli elementi della lista sono dizionari, di coppie chiave-valore. o a loro volta liste # Employee records - martin: name: Martin D'vloper job: Developer skills: - python - perl - tabitha: name: Tabitha Bitumen job: Developer skills: - lisp - fortran 05/11/2020 pxeserver_images: - name : centos 7_x 86_64 default: true kernel_url: http: //sisifo. lns. infn. it/centos/7/os/x 86_64/images/pxeboot/vml inuz initrd_url: http: //sisifo. lns. infn. it/centos/7/os/x 86_64/images/pxeboot/initr d. img squashfs_url: http: //sisifo. lns. infn. it/centos/7/os/x 86_64/Live. OS/squashfs. im g label: Cent. OS 7 x 86_64 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 12
Templating ■ Ansible usa Jinja 2 per implementare espressioni dinamiche e dare accesso alle variabili ■ Ansible combina i filtri Jinja 2 con i propri per un accesso ai dati più fine – Filtri operazioni matematiche (max, min) – Validazione indirizzi IP – Etc. . . Esempio 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 13
DEFAULT menu. c 32 PROMPT 0 TIMEOUT 20 MENU title ##### KM 3 Ne. T PXE Boot Menu ##### {% for image in pxeserver_images %} LABEL {{ loop. index }} {% if image. default is defined and image. default == true %} {% endif %} MENU LABEL ^{{ loop. index }}) (RE)INSTALL {{ image. label }} KERNEL {{ image. name }}/vmlinuz APPEND ip=dhcp ksdevice={{ hostvars[item]['ctl_mac'] }} initrd={{ image. name }}/initrd. img inst. ks=http: //{{ pxeserver_ip }}/{{ image. name }}/ks/{{ item }} root=live: {{ image. squashfs_url }} {% endfor %} LABEL {{ pxeserver_images|length + 1 }} MENU DEFAULT MENU LABEL ^{{ pxeserver_images|length + 1 }}) Boot from local drive LOCALBOOT 0 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 14
Credits e riferimenti ■ Documentazione ufficiale Ansible – http: //docs. ansible. com/ansible/latest/index. html ■ Un altro tutorial ben fatto: – https: //serversforhackers. com/c/an-ansible 2 -tutorial ■ Thanks Bruce Becker ! – https: //github. com/AAROC/Ansible. Boot. Camp 05/11/2020 Emidio Giorgio - Corso CCR Ansible Foreman Puppet 15
- Slides: 15