Est-il possible d'analyser une sortie que je tire de stdout.
10.1.1.1 10.2.2.2 10.3.3.3
cela produit la sortie d'une liste d'adresses IP à partir de ma commande d'origine.
name: PARSE ALL IP's set fact: parsedbgpIPs="BGPOUTPUT.stdout[0] | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}"
Ma question est de savoir comment séparer la sortie en 3 adresses IP, chacune stockée sous forme de variable individuelle?
3 Réponses :
Q: Comment séparer la sortie en 3 adresses IP stockées chacune comme une variable individuelle?
R: Il est possible de créer un dictionnaire personnalisé et d'y créer dynamiquement les variables. Par exemple, le jeu ci-dessous
loop: "{{ BGPOUTPUT.stdout[0] | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}"donne
"my_vars": { "IP_0": "10.1.1.1", "IP_1": "10.2.2.2", "IP_2": "10.3.3.3" } "my_vars.IP_1": "10.2.2.2"Dans votre cas, il est possible d'itérer la liste des IP. Remplacez
loop: "{{my_ip_list}}"
dans la lecture ci-dessus par la ligne suivantevars: my_vars: {} my_ip_list: - 10.1.1.1 - 10.2.2.2 - 10.3.3.3 tasks: - set_fact: my_vars: "{{ my_vars|combine({'IP_' ~ my_idx : item}) }}" loop: "{{ my_ip_list }}" loop_control: index_var: my_idx - debug: var: my_vars - debug: var: my_vars.IP_1
Merci beaucoup, avec une tête fraîche, cela fonctionne ce matin. Merci beaucoup
Si vous stockez le résultat de votre script dans une variable bash, alors vous pouvez remplir un tableau ligne par ligne, avec cette syntaxe
echo "${IPLIST[0]}" 10.1.1.1 echo "${IPLIST[1]}" 10.2.2.2
Vous pouvez maintenant accéder aux éléments du tableau nouvellement créé par index
declare -a IPLIST # optional but nice IPLIST=($RESULTOFSCRIPT) # RESULTOFSCRIPT contains the output of your script
Une solution serait d'analyser la sortie dans un fichier texte, puis de lire le fichier en boucle et de l'utiliser comme valeur de la variable. Voici un exemple:
name: PARSE ALL IP's set fact: parsedbgpIPs="BGPOUTPUT.stdout[0] | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}" > iplist.txt for ip in $(cat iplist.txt) do ... (your code) done
mystring.split ()
? Si la sortie est déjà une liste, ils sont déjà séparésPubliez "debug: var = BGPOUTPUT" pour voir les options.
Ceci fonctionne dans ansible donc la sortie est légèrement différente
TÂCHE [débogage] ************************************************ ************** ******************** ************ ******** ******************** *********** ok: [Router01] => msg: | - Liste des IP - 10.1.1.1 - 10.2.2.2 - 10.3.3.3
- debug: msg: "Liste des adresses IP {{parsedbgpIPs | to_nice_yaml}}"