Gli ambienti IT stanno diventando sempre più complessi. In queste condizioni, è fondamentale per un sistema di automazione IT avere informazioni aggiornate sui nodi presenti nella rete e da gestire. In Red Hat Ansible Automation Platform, questo problema viene affrontato attraverso i cosiddetti inventari () – elenchi di nodi gestiti.

Nella sua forma più semplice, un inventario è un file statico. Questa è l'opzione ideale quando si inizia a lavorare con Ansible, ma man mano che l'automazione si espande, diventa insufficiente.
Ecco perché:
- Come aggiornare e mantenere un elenco completo dei nodi controllati quando ci sono continui cambiamenti, quando i carichi di lavoro – e con essi i nodi su cui vengono eseguiti – compaiono e scompaiono?
- Come classificare i componenti dell'infrastruttura IT per selezionare in modo mirato i nodi a cui applicare una determinata automazione?
Le risposte a entrambe queste domande vengono fornite da un inventario dinamico () – uno script o un plugin che cerca nodi da automatizzare accedendo a una fonte di verità. Inoltre, l'inventario dinamico classifica automaticamente i nodi in gruppi, permettendovi di selezionare in modo più preciso i sistemi target per effettuare l'automazione Ansible.
offrono all'utente Ansible la possibilità di accedere a piattaforme esterne per la ricerca dinamica di nodi target e utilizzare queste piattaforme come fonte di verità nella creazione dell'inventario. La lista standard delle fonti in Ansible include piattaforme cloud come AWS EC2, Google GCP e Microsoft Azure, e ci sono anche molti altri plugin di inventario per Ansible.
Ansible Tower viene fornito con diversi , che funzionano direttamente «out of the box» e, oltre alle piattaforme cloud sopracitate, garantiscono integrazione con VMware vCenter, Red Hat OpenStack Platform e Red Hat Satellite. Per questi plugin è sufficiente fornire le credenziali per connettersi alla piattaforma target, dopo di che possono essere utilizzati come fonte di dati da inventario in Ansible Tower.
Oltre ai plugin standard forniti con Ansible Tower, ci sono altri plugin per inventory supportati dalla community di Ansible. Con il passaggio a questi plugin sono stati inclusi nelle rispettive collezioni.
In questo post, esamineremo, per esempio, il funzionamento di un plugin per inventory per ServiceNow, una piattaforma popolare per la gestione dei servizi IT, nella cui CMDB i clienti spesso archiviano informazioni su tutti i loro dispositivi. Inoltre, la CMDB può contenere contesti utili per l'automazione, come informazioni sui proprietari dei server, i livelli di servizio (production/non-production), gli aggiornamenti installati e le finestre di manutenzione. Il plugin di inventory di Ansible può lavorare con la CMDB di ServiceNow ed è parte della collezione sul portale .
repository Git
Per utilizzare il plugin di inventory della collezione in Ansible Tower, è necessario specificarlo come fonte del progetto. In Ansible Tower, un progetto è un'integrazione con un sistema di gestione delle versioni, come un repository git, che può essere utilizzata per sincronizzare non solo i playbook di automazione, ma anche le variabili e le liste di inventory.
Il nostro repository è in realtà molto semplice:
├── collections
│ └── requirements.yml
└── servicenow.yml
Il file servicenow.yml contiene dettagli per il plugin di inventario. In questo caso, specifichiamo semplicemente la tabella nella CMDB di ServiceNow che vogliamo utilizzare, oltre a impostare i campi che saranno aggiunti come variabili del nodo, più alcune informazioni sui gruppi che desideriamo creare.
$ cat servicenow.yml
plugin: servicenow.servicenow.now
table: cmdb_ci_linux_server
fields: [ip_address,fqdn,host_name,sys_class_name,name,os]
keyed_groups:
- key: sn_sys_class_name | lower
prefix: ''
separator: ''
- key: sn_os | lower
prefix: ''
separator: ''
Si noti che non viene specificato l'istanza di ServiceNow a cui ci connetteremo e non vengono forniti dati di accesso per la connessione. Tutto questo lo configureremo successivamente in Ansible Tower.
è necessario affinché Ansible Tower possa scaricare la raccolta necessaria e quindi ottenere il plugin di inventario. Altrimenti, dovremmo installare e mantenere manualmente questa raccolta su tutti i nostri nodi di Ansible Tower.
$ cat collections/requirements.yml
---
collections:
- name: servicenow.servicenow
Una volta che abbiamo inviato questa configurazione al sistema di controllo delle versioni, in Ansible Tower è possibile creare un progetto che fa riferimento al relativo repository. Nell'esempio seguente, Ansible Tower si collega al nostro repository su github. Si noti l'URL SCM: consente di specificare l'account per la connessione a un repository privato e di impostare un ramo, un tag o un commit specifico da estrarre.

Creiamo le credenziali per ServiceNow
Come già detto, la configurazione nel nostro repository non contiene le credenziali per la connessione a ServiceNow e non specifica l'istanza di ServiceNow con cui interagiremo. Pertanto, per fornire queste informazioni, creeremo le credenziali in Ansible Tower. Secondo la , ci sono diverse variabili di ambiente grazie alle quali imposteremo i parametri di connessione, ad esempio, in questo modo:
= username
L'account utente di ServiceNow, deve avere i diritti per leggere cmdb_ci_server (predefinito), o la tabella specificata da SN_TABLE
set_via:
env:
- name: SN_USERNAME
In questo caso, se la variabile di ambiente SN_USERNAME è impostata, il plugin di inventario la utilizzerà come account per la connessione a ServiceNow.
Dobbiamo anche impostare le variabili SN_INSTANCE e SN_PASSWORD.
Tuttavia, in Ansible Tower non ci sono credenziali di questo tipo dove possiamo specificare questi dati per ServiceNow. Tuttavia, Ansible Tower ci consente di definire , per maggiori dettagli puoi leggere l'articolo .
Nel nostro caso, la configurazione input per le credenziali personalizzabili per ServiceNow appare come segue:
fields:
- id: SN_USERNAME
type: string
label: Nome utente
- id: SN_PASSWORD
type: string
label: Password
secret: true
- id: SN_INSTANCE
type: string
label: Istanza Snow
required:
- SN_USERNAME
- SN_PASSWORD
- SN_INSTANCE
Queste credenziali saranno esportate come variabili d'ambiente con lo stesso nome. Questo è descritto nella configurazione dell'iniettore:
env:
SN_INSTANCE: '{{ SN_INSTANCE }}'
SN_PASSWORD: '{{ SN_PASSWORD }}'
SN_USERNAME: '{{ SN_USERNAME }}'
Quindi, abbiamo definito il tipo di credenziale necessario, ora possiamo aggiungere l'account ServiceNow e specificare l'istanza, il nome utente e la password, in questo modo:

Creiamo un inventario
Quindi, ora abbiamo tutto pronto per creare un inventario in Ansible Tower. Lo chiameremo ServiceNow:

Dopo aver creato l'inventario, possiamo collegarlo a una fonte di dati. Qui indichiamo il progetto che abbiamo creato in precedenza e inseriamo il percorso al nostro file di inventario YAML nel repository del sistema di controllo versione; nel nostro caso, si tratta di servicenow.yml nella radice del progetto. Inoltre, è necessario collegare anche l'account di ServiceNow.

Per verificare se tutto funziona, proviamo a sincronizzarci con la fonte di dati, facendo clic sul pulsante «Sync all». Se tutto è configurato correttamente, i nodi dovrebbero essere importati nel nostro inventario:

Si prega di notare che anche i gruppi necessari sono stati creati.
Conclusione
In questo post abbiamo esaminato come utilizzare i plugin di inventario delle collezioni in Ansible Tower, prendendo come esempio il plugin ServiceNow. Abbiamo anche inserito in modo sicuro le credenziali per collegarci al nostro istanza di ServiceNow. L'associazione del plugin di inventario da un progetto funziona non solo con plugin di terze parti o personalizzati, ma può anche essere applicata per modificare il funzionamento di alcuni plugin di inventario standard. Grazie a questo, Ansible Automation Platform si integra facilmente e senza soluzione di continuità con gli strumenti esistenti nell'automazione degli ambienti IT, che stanno diventando sempre più complessi.
Per ulteriori dettagli sui temi trattati in questo post, così come su altri aspetti dell'uso di Ansible, puoi consultare qui:
- Blog su .
- .
- Elenco delle raccolte Red Hat supportate sul sito Automation Hub ().
- .
*Red Hat non offre alcuna garanzia sulla correttezza del codice fornito qui. Tutti i materiali sono forniti senza alcun supporto, salvo diversa indicazione espressa.
Fonte: habr.com
