Ansible – Comment capturer la sortie de commande et enregistrer sous plusieurs variables

J’essaie d’écrire de l’automatisation avec Ansible et je suis confronté à une situation où je dois utiliser plusieurs parties d’une sortie de commande dans une tâche ultérieure dans le livret.

J’ai une tâche qui va exécuter la commande “lspci | grep Ethernet | grep Gigabit”

La sortie devrait ressembler à ceci (devrait être 2 lignes de sortie):

"02:00.0 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)" "02:00.1 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02) 

De cette sortie, je dois extraire 4 informations en tant que variables.

var1 – Je veux le bus de la première ligne. Devrait être “02”

var2 – Je veux la fonction de la première ligne. Devrait être “0”

var3 – Je veux le bus de la deuxième ligne. Devrait être “02”

var4 – Je veux la fonction de la deuxième ligne. Devrait être “1”

Comment puis-je extraire les informations de la sortie dans ces 4 variables? Ne doit pas nécessairement être un jeu unique qui reçoit les 4 variables.

Merci pour l’aide.

Comme suggéré, vous devez register la sortie de la commande. Après cela, vous pouvez parcourir les résultats et récupérer les parties qui vous intéressent.

Exemple de travail:

 - name: Fun with lspci output hosts: localhost connection: local tasks: - name: get Gigabit Ethernet adapters shell: lspci | grep Ethernet | grep Gigabit | awk '{print $1}' register: eth_adapters - name: use extracted info debug: msg="Adapter found, bus {{item.split(':')[0]}}, function {{item.split('.')[-1]}}" with_items: "{{eth_adapters.stdout_lines}}" 

Notez l’utilisation de eth_adapters.stdout_lines pour obtenir la sortie de la commande sous la forme d’une liste d’éléments et awk '{print $1}' pour ne saisir que les informations de bus des périphériques.

Cet exemple produit la sortie suivante:

 PLAY [Fun with lspci output] *************************************************** TASK [setup] ******************************************************************* ok: [localhost] TASK [get Gigabit Ethernet adapters] ******************************************* changed: [localhost] TASK [use extracted info] ****************************************************** ok: [localhost] => (item=00:00.0) => { "item": "00:00.0", "msg": "Adapter found, bus 00, function 0" } ok: [localhost] => (item=00:01.0) => { "item": "00:01.0", "msg": "Adapter found, bus 00, function 0" } ok: [localhost] => (item=00:01.1) => { "item": "00:01.1", "msg": "Adapter found, bus 00, function 1" } ok: [localhost] => (item=00:01.3) => { "item": "00:01.3", "msg": "Adapter found, bus 00, function 3" } PLAY RECAP ********************************************************************* localhost : ok=3 changed=1 unreachable=0 failed=0