Se hai programmato in Python, Java, C, C++ o in qualsiasi altro linguaggio di programmazione, le variabili non sono estranee. Proprio come nei linguaggi di programmazione, le variabili in Ansible vengono utilizzate per memorizzare un valore.
In Ansible, le variabili forniscono la necessaria flessibilità in Playbook, modelli e inventari, come vedremo più avanti in questo tutorial. Le variabili integrate possono essere utilizzate per fornire informazioni di sistema come nome host, architettura del sistema, interfacce, ecc. Le variabili possono anche essere utilizzate per sostituire stringhe e anche in loop per scorrere un determinato insieme di valori.
Un nome di variabile valido è composto dai seguenti caratteri
- Lettere
- Numeri
- Punti bassi
- Una combinazione di due o tutti i precedenti
Una variabile DEVE INIZIARE SEMPRE CON UNA LETTERA e NON DEVE CONTENERE ALCUN SPAZIO.
Esempi di nomi di variabili accettabili includono:
- giradischi
- tavola_girevole
- giradischi01
- giradischi_01
I nomi seguenti non si qualificano come nomi di variabili validi
- piattaforma girevole
- piattaforma girevole
- 01giradischi
- 01
Diamo ora un'occhiata ai diversi casi d'uso delle variabili in Ansible
Variabili nei Playbook
Come sai, un playbook è una raccolta di riproduzioni o attività da eseguire su un sistema remoto. Nei playbook, le variabili sono utili per determinare come eseguire le attività. Assegnare un valore a una variabile in un playbook è abbastanza facile e diretto.
Inizia chiamando i vars parola chiave quindi chiama il nome della variabile seguito dal valore come mostrato.
--- - hosts: all vars: salutations: Hello guys! tasks: - name: Ansible Variable Basic Usage debug: msg: "{{ salutations }}"
Nel playbook sopra, il nome della variabile è saluti e il valore è Ciao mondo! Quando il playbook viene eseguito, si accede al valore del playbook inserendo la variabile tra parentesi graffe come mostrato sopra. Quando viene eseguito, il playbook stampa il messaggio "Ciao ragazzi ' sul terminale.
Variabili con array
Puoi utilizzare gli array e assegnarli a variabili come mostrato nella sintassi seguente:
varianti:
nome array:
– valore1
– valore2
Ad esempio, il playbook seguente contiene una matrice di 5 nomi di studenti memorizzati in una variabile chiamata studenti. Puoi accedere ai nomi degli studenti tramite l'indicizzazione (come faresti con gli array in qualsiasi altro linguaggio di programmazione) Ad esempio, per recuperare il nome "Arthur" dall'elenco di array, utilizza la sintassi studenti [2] come mostrato di seguito.
- hosts: all vars: students: - Mark - Melisa - Arthur - Kevin - Lisa tasks: - name: Ansible List variable Example debug: msg: "{{ students[2] }}"
Variabili con dizionari
Dall'elenco Array, puoi definire ulteriormente ciascuna delle voci utilizzando una coppia di valori chiave che forma ciò che chiamiamo un elenco di dizionari. La sintassi è mostrata di seguito
varianti:
nome array:
nome_dizionario1:
valore1:valoreoggetto1
valore2:valoreoggetto2
nome_dizionario2:
valore1:valoreoggetto1
valore2:valoreoggetto2
Utilizzando il nostro esempio precedente, possiamo avere elenchi di dizionari di seguito
- hosts: all vars: students: - Mark: city: Melbourne address: 0045-0987-8642 - Angela: city: Sydney address: 3456-7685-9087
Per accedere al dizionario, aggiungi semplicemente l'attività qui sotto
tasks: - debug: var: students
Variabili nei file di inventario
Se hai diversi sistemi host che condividono attributi o valori simili, puoi definire quelle che chiamiamo variabili di gruppo. Questi vengono utilizzati per assegnare gli attributi comuni a tutti gli host.
Ad esempio:
Supponiamo di avere 2 server web:webserver_1 e server web_2 che stanno entrambi ascoltando la porta 443 e il cui server ntp è us.pool.ntp.org. Il file di inventario apparirà come mostrato:
[web_servers] webserver_1 webserver_2 [web_servers:vars] http_port=443 ntp_server=us.pool.ntp.org
Nel file del playbook YAML, questo sarebbe rappresentato come mostrato
web_servers: hosts: web_server_1: web_server_2: vars: http_port=80 ntp_server=us.pool.ntp.org
La prima sezione definisce gli host remoti che sono webserver_1 e server web_1 , mentre la seconda sezione raggruppa gli attributi comuni tra i due server. Questo è un metodo molto conveniente per applicare variabili comuni a più sistemi host.
Variabili host e di gruppo
Sebbene tu possa specificare le variabili nel file di inventario, la pratica standard sconsiglia di memorizzare le variabili nel file di inventario. È qui che entrano in gioco i file delle variabili host e di gruppo.
In un file di variabile host, la variabile si applica solo a un sistema host nel file di inventario. Il file della variabile host è solitamente archiviato in host_vars directory che di solito è specificata in /etc/ansible/ percorso.
Considera il file di inventario di seguito in cui abbiamo 2 server ciascuno che utilizza diversi server ntp
[web_servers] webserver_1 ntp_server=uk.pool.ntp.org webserver_2 ntp_server=de.pool.ntp.org
Invece di specificare la variabile ntp_server nel file di inventario, crea 2 file di variabili host nella directory host_vars con il nome del file corrispondente a ciascuno dei nomi host dei sistemi host:
# vim /etc/ansible/host_vars/webserver_1 --- ntp_server=uk.pool.ntp.org # vim /etc/ansible/host_vars/webserver_2 --- ntp_server=de.pool.ntp.org
Se i sistemi host condividono gli stessi valori, crea un file di variabili di gruppo in group_vars directory. Il nome del file della variabile di gruppo deve corrispondere al gruppo degli host
Considera il file di inventario di seguito
[web_servers] webserver_1 webserver_2 [web_servers:vars] ansible_user=root ansible_port=22
La seconda sezione può essere definita come un file nella directory group_vars come mostrato. Dovrebbe essere nella directory /etc/ansible. Ricorda che il nome del file dovrebbe essere lo stesso del nome del gruppo.
# vim /etc/ansible/group_vars/web_servers --- ansible_user=root ansible_port=22
Qui, le variabili saranno accessibili a tutti gli host del gruppo chiamato web_servers.
Variabili speciali in Ansible Playbook
Un'altra categoria di variabili sono le variabili speciali. Si tratta di variabili integrate che non possono essere impostate dall'utente e che Ansible sovrascriverà sempre. Per ottenere un elenco di nomi di variabili di sistema univoci, eseguire il comando
# ansible -m imposta il nome host
Esempi di tali variabili speciali includono:
- ansible_all_ipv4_addresses
- architettura_ansible ,
- ansible_bios_version ,
- ansible_os_family ,
- distribuzione_ansible,
Verrà visualizzato un output in formato JSON
# ansible -m setup localhost
Grazie alla flessibilità e alla facilità d'uso, le variabili hanno uno scopo fondamentale sia nei playbook che nei file di inventario. Evitano inutili ripetizioni e rendono la vita dell'amministratore di sistema molto più semplice.
Leggi anche: Come utilizzare i loop in Ansible Playbook
Leggi anche :Come utilizzare Ansible Vault per proteggere i dati sensibili