2017-08-17 1 views
3

Impossible de rechercher dans ma variable de sortie une chaîne spécifiée que j'utilise pour une instruction when. Le code ci-dessous est supposé vérifier la chaîne "distribute-list" dans la variable de sortie mais quand il exécute le playbook il donne l'erreur.Utilisation lorsque conditionnel pour faire correspondre la chaîne dans le registre de sortie (Ansible)

fatal: [192.168.3.252]: FAILED! => {"failed": true, "msg": "The conditional check 'output | search(\"distribute-list\")' failed. The error was: Unexpected templating type error occurred on ({% if output | search(\"distribute-list\") %} True {% else %} False {% endif %}): expected string or buffer\n\nThe error appears to have been in '/home/khibiny/test4.yml': line 26, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug:\n ^here\n"} 

Voici le code qui est à l'origine question:

- ios_command: 
    commands: show run | sec ospf 
    provider: "{{cli}}" 
    register: output 
- debug: 
    msg: "{{output.stdout_lines}}" 
    when: output | search("distribute-list")       

apprécierait un peu d'aide. Merci d'avance.

Répondre

4

search attend une chaîne comme entrée, mais output est une dict avec des propriétés différentes.

Vous devriez être bon avec

when: output.stdout | join('') | search('distribute-list') 

dont vous avez besoin intermédiaire join ici, parce que pour ios modules -family stdout est une liste de chaînes et stdout_lines est une liste de listes (alors que pour le module d'habitude commandstdout est une chaîne et stdout_lines est une liste de chaînes).

+0

Merci beaucoup. Posté dans un autre forum et n'a pas pu obtenir de l'aide. Publié dans Stack Overflow et moins d'une heure plus tard, je reçois de l'aide. Merci beaucoup – techkid