Ansible SelectAttr/RejectAttr

Ansible SelectAttr/RejectAttr

I filtri Jinja2 sono uno strumento incredibilmente forte che può aiutarci con una varietà di attività per manipolare le informazioni in Ansible. Sulla base di questo, discuteremo di Ansible SelectAttr e Rejectttr Jinja filtri in questo articolo. Ma prima di saltare su SelectAttr e Rejecettr, capiamo prima qual è il ruolo dei filtri in Jinja2.

Quali sono i filtri di Jinja2 in Ansible?

Quando richiediamo la gestione, la strutturazione e la traduzione delle informazioni, usiamo Ansible. Jinja2 offre diversi filtri pre-costruiti e filtri personalizzabili creati dall'utente. Questi filtri sono filtri Jinja2 che funzionano nel backend, che trasforma le informazioni fornite all'interno di un'espressione del modello. I server remoti mirati non sono coinvolti nel modello, si svolge sul sistema di controller Ansible. Di conseguenza, i filtri vengono applicati ai dati locali che il controller Ansible fornisce. Inoltre, i filtri SelectAttr e RejectAttr di Ansible sono derivati ​​da questi filtri.

Filtro selectattr in ansible

Il selectattr è l'acronimo di Select Attributo Filter. Ogni attributo selezionato viene utilizzato per eseguire test su ciascun oggetto che è un attributo definito e raccogliere solo quelli che superano i filtri di test, è una successione di articoli. Il risultato dell'attributo selezionato verrebbe valutato come booleano anche se nessun test è definito in Ansible. Nel filtro Ansible SelectAttr, tre parametri vengono passati in Ansible che sono l'attributo, un operatore booleano e un argomento. Uno dei test integrati di Jinja può essere selezionato come operatore.

Esempio:

Ecco un semplice esempio in cui utilizzeremo il filtro SelectAttr in Ansible. Per capire come funzionerà in Ansible, implementeremo uno scenario in modo da capire come funzionerà in Ansible. Per fare ciò, in primo luogo, creeremo un playbook perché i playbook sono raccolte di istruzioni che attraversano autonomamente gli host remoti target.

Un playbook Ansible ha moduli diversi e ogni modulo svolge una certa funzionalità. Ogni modulo fornisce metadati che stabiliscono quando, dove e con cui ospite remoto viene eseguita. Quello che segue è il comando che scriveremo nel terminale per creare un playbook.

[root@master ansible]# nano ansible_filter.YML

Per creare il playbook, scriviamo anche l'estensione del playbook, che è YAML, o ancora un altro linguaggio di markup, che è un formato di file che utilizza l'estensione.YML. Ora il playbook viene lanciato in un nuovo terminale Ansible del nome Ansible_filter.YML. Nel playbook, scriviamo per la prima volta le informazioni relative agli host remoti. Negli host, stiamo usando LocalHost come host remoto target.

Successivamente, abbiamo superato il valore "vero" all'opzione Gather_Facts nel playbook in modo da poter ottenere tutte le informazioni relative al localhost nell'output. Dopo aver stabilito l'host, ora faremo un elenco di ogni attività che intendiamo completare. Il primo nome dell'attività è "tutte le variabili di ambiente" e abbiamo superato la variabile in modo da poterlo debug. Nel prossimo compito, vogliamo abilitare il filtro di Jinja2 utilizzato in Ansible che è il filtro SelectAttr. Nel filtro selectattr, abbiamo superato i tre argomenti che sono la chiave, la corrispondenza e la shell.

- ospiti:
- Localhost
Gather_Facts: vero
compiti:
- Nome: tutte le variabili di ambiente
debug:
var: 'ansible_facts.Env '
- Nome: filtro abilitato
debug:
msg: "(ansible_facts.env | Dict2Items | SelectAttr ('Key', 'Match', 'Shell')) | elenco "

Dopo aver elencato tutte le attività, vogliamo fare, finiremo il playbook colpendo CTRL + X e quindi salvare gli aggiornamenti. Ora, vogliamo eseguire il playbook scriveremo il comando seguente nel terminale:

[root@master ansible]# ansible-playbook ansible_filter.YML

Ecco la vetrina richiesta utilizzando l'attributo SelectAttr nel playbook. Come hai visto, abbiamo ottenuto un output molto lungo perché abbiamo usato l'opzione di fatti di raccolta come vero nel playbook. Quindi, ecco perché sta visualizzando tutte le informazioni del locale nell'output nel terminale Ansible.

Come mostrato, l'attributo Select è abilitato mostrando il segnale OK all'estremità del terminale di uscita.

Filtro Rejecectttr in Ansible

Il Rejecettr indica l'attributo di rifiuto di Jinja2 in Ansible ed è l'opposto di SelectAttr. Il Rejecjettr rimuove qualsiasi elemento dall'iterabile specificato che non soddisfano l'attributo fornito e supera correttamente il test. L'esecuzione dei test sull'attributo indicato di ciascun elemento, come parte del processo di filtraggio, si traduce nel rifiuto di qualsiasi elemento che supera il test. Una valutazione booleana del valore dell'attributo avrà luogo se non viene fornito alcun test.

Esempio:

Ecco l'esempio che stiamo per eseguire usando uno degli attributi importanti di Jinja2 in Ansible che è l'attributo di rifiuto. In questo esempio, stiamo cercando di applicare una condizione a ogni elemento in un dizionario per eliminare gli articoli abbinati dal dizionario. Quindi, per questo, lanceremo nuovamente il playbook in modo da poter modificare i compiti in base all'attributo di rifiuto. Di seguito è riportato il comando per avviare il module_filter.Playbook YML:

[root@master ansible]# nano ansible_filter.YML

Ora, nel playbook, abbiamo trasmesso la "falsa" all'opzione di fatto di raccogliere perché non vogliamo ottenere le informazioni extra relative al localhost, poiché abbiamo già ottenuto le informazioni nell'esempio del filtro selectattr. Ora scriveremo la variabile nel playbook. Nei vari, dobbiamo scrivere il nome e il tipo di medicinali. Successivamente, dobbiamo scrivere il compito. Nell'attività, vogliamo filtrare tutti i medicinali tranne le supposte e il debug passando il filtro Rejecettr.

- ospiti:
- Localhost
Gather_Facts: false
VAR:
medicinali:
- nome: morbillo, tipo: iniezioni
- nome: nepawell, tipo: drops
- nome: colace, tipo: supposizioni
compiti:
- Nome: filtrare tutti i medicinali diversi dalle supposte
debug:
msg: "(medicinali | rejecjectr ('type', 'match', 'suppositories')) | list"

Ora termineremo il playbook. Dopodiché, vogliamo eseguire il playbook in modo da poter ottenere l'output adatto dell'attributo di rifiuto di Ansible.

[root@master ansible]# ansible-playbook ansible_filter.YML

Ecco il risultato di un attributo di rifiuto nello strumento Ansible. Il terminale sta mostrando il morbillo e la medicina Nepawell e rifiuta la medicina del playbook.

Conclusione

Abbiamo imparato quali sono i filtri in Jinja2 e quali filtri useremo in questa sessione di Ansible. Abbiamo discusso dei due filtri importanti che sono i filtri SelectAttr e Rejecyttr in Ansible. Abbiamo implementato ogni esempio di filtro in modo che gli utenti possano comprendere facilmente i concetti e il funzionamento di questi filtri in Ansible.