Ansible ha semplificato l'automazione ed è diventato il linguaggio di automazione universale. Ormai i vantaggi sono ben noti nella comunità IT. Come tutte le buone tecnologie, tuttavia, possono esserci sfide da affrontare o approcci da combinare. Prendi in considerazione l'utilizzo di file con valori separati da virgola (CSV) e Ansible per creare account utente Linux.
In questo articolo, l'obiettivo è automatizzare la creazione degli utenti utilizzando Ansible. Un elenco di utenti può essere passato tramite un file di variabili esterno utilizzando vars_files
o direttamente nel playbook usando un loop. Il problema sorge quando l'elenco di utenti da creare è disponibile solo in un formato come CSV mentre lo sviluppatore Ansible si trova più a suo agio nell'usare un elenco YAML. Personalmente ho riscontrato situazioni in cui un elenco di utenti che include password è fornito in un file CSV con il requisito di creare quegli utenti su più macchine Linux utilizzando uno strumento di automazione come Ansible.
[ Potrebbe piacerti anche: Automatizzare l'implementazione della macchina virtuale con Ansible:Design ]
Qual è la soluzione?
Fortunatamente, Ansible viene fornito con più di mille moduli, incluso uno per la lettura di file CSV. Questo modulo può fornire esattamente ciò che è necessario per questa attività. Di seguito vedrai il modulo in azione.
Prendi in considerazione il file CSV che include più campi come Nome utente , UID , Nomi , Cognomi , Gruppi e Password mostrato di seguito. Il requisito è creare tutti questi utenti con le loro informazioni rilevanti su più server Linux.
Username,UID,First_name,Last_name,Groups,Password
booker12,9012,Rachel,Booker,Operations,iambooker
grey07,2070,Laura,Grey,Developers,iamgrey
johnson81,4081,Craig,Johnson,Operations,iamjohnson
jenkins46,9346,Mary,Jenkins,Developers,iamjenkins
smith79,5079,Jamie,Smith,Operations,iamsmith
Fase 1
Ora che hai un file CSV, il passaggio successivo è fare in modo che Ansible legga questo file CSV. Per raggiungere questo obiettivo, usa read_csv modulo. Per stampare come Ansible ha analizzato il CSV, usa il debug modulo. Nota l'uso di delega_a:localhost nel primo compito. Questo perché il file username.csv
è presente sul nodo di controllo e non sugli host gestiti. Ansible analizza questo CSV in un formato elenco con più dizionari all'interno. Ecco perché devi aggiungere la sottovariabile elenco alla fine della variabile registrata originale user_list .
---
- name: create users from csv file
hosts: all
tasks:
- name: reading the csv file
read_csv:
path: username.csv
register: user_list
delegate_to: localhost
- name: display user_list data
debug:
var: user_list.list
Fase 2
Mentre esegui questo playbook, vedrai che l'output contiene un elenco, come indicato dalla coppia di parentesi quadre. Questo elenco include inoltre un dizionario, indicato dalle parentesi graffe. Ogni riga del file CSV è stata convertita in un dizionario, in base alla separazione delle virgole tra di loro. Un dizionario viene utilizzato per archiviare i dati in una coppia di chiavi e valori. Ad esempio, la chiave è Nome e il valore è Rachel .
ok: [192.168.0.3] => {
"user_list.list": [
{
"First_name": "Rachel",
"Groups": "Operations",
"Last_name": "Booker",
"Password": "iambooker",
"UID": "9012",
"Username": "booker12"
},
{
"First_name": "Laura",
"Groups": "Developers",
"Last_name": "Grey",
"Password": "iamgrey",
"UID": "2070",
"Username": "grey07"
},
{
"First_name": "Craig",
"Groups": "Operations",
"Last_name": "Johnson",
"Password": "iamjohnson",
"UID": "4081",
"Username": "johnson81"
},
-------OUTPUT OMITTED-------
}
]
}
Fase 3
Sei in grado di leggere e stampare con successo il file CSV tramite Ansible. Ora è il momento di provare a estrarre uno di questi valori per vedere se puoi manipolare questo dizionario per soddisfare le esigenze dell' utente modulo in Ansible. Prova qualcosa di semplice come estrarre il valore del Nome utente chiave per tutti i dizionari all'interno di questo elenco. A tale scopo, utilizzerai il Nome utente del dizionario key come sottovariabile per il tuo ciclo Ansible.
----OUTPUT OMITTED----
- name: extract Username from all dictionaries
debug:
msg: "{{ item.Username }}"
loop: "{{ user_list.list }}"
ok: [192.168.0.3] => (item={'Username': 'booker12', 'UID': '9012', 'First_name': 'Rachel', 'Last_name': 'Booker', 'Groups': 'Operations', 'Password': 'iambooker'}) => {
"msg": "booker12"
}
ok: [192.168.0.3] => (item={'Username': 'grey07', 'UID': '2070', 'First_name': 'Laura', 'Last_name': 'Grey', 'Groups': 'Developers', 'Password': 'iamgrey'}) => {
"msg": "grey07"
}
----OUTPUT OMITTED----
Come puoi vedere qui, hai estratto il Nome utente valori dai dizionari. Utilizzando lo stesso concetto, puoi inserire questi valori nel nome campo dell'utente modulo per creare gli utenti.
Fase 4
Ora che hai estratto il valore della chiave desiderata, dovresti essere in grado di lavorare con tutte le coppie di chiavi e valori. Inseriscili nell'utente modulo per creare i tuoi utenti con tutte le informazioni richieste. Nota la password opzione del modulo utente. Contiene un filtro per crittografare la Password valore utilizzando l'algoritmo SHA-512. Ciò avviene perché RHEL8 utilizza SHA-512 per crittografare le password degli utenti. Questa password è memorizzata in un formato crittografato nel /etc/shadow
file sugli host gestiti. Inoltre, il commento l'opzione contiene due variabili perché vuoi il GECOS (Commenti utente) campo dell'utente per avere nome e cognome. Ad esempio, l'utente booker12 avranno i loro GECOS come "Rachel Booker". Inoltre, stai utilizzando l'escalation dei privilegi in questa attività perché la creazione dell'utente richiede i privilegi di root.
-----OUTPUT OMITTED-----
- name: create users from the csv
user:
name: "{{ item.Username }}"
uid: "{{ item.UID }}"
groups: "{{ item.Groups }}"
append: true
password: "{{ item.Password | password_hash('sha512') }}"
comment: "{{ item.First_Name }} {{ item.Last_Name }}"
state: present
loop: "{{ user_list.list }}"
become: true
[ Un corso gratuito per te:Panoramica tecnica su virtualizzazione e migrazione dell'infrastruttura. ]
Concludi
Hai creato correttamente gli utenti indicati con il loro UID , Gruppi , Password e GECOS estraendo i valori desiderati da un file CSV. Questo è utile perché la maggior parte delle organizzazioni utilizza formati come CSV per archiviare e gestire i propri dati. Uno sviluppatore Ansible in grado di manipolare i file CSV può gestire in modo efficiente il proprio ambiente senza scrivere tutto da zero direttamente nel playbook o in un file YAML di variabili esterne. Per gestire ulteriormente il tuo ambiente in modo efficace, ti consiglio di utilizzare Ansible Tower, la soluzione Ansible aziendale offerta da Red Hat. Forse scegli anche l'offerta di formazione DO447 - Advanced Automation:Ansible Best Practices.