Using when conditional to match string in output register (Ansible)

泪湿孤枕 提交于 2020-12-30 08:37:25

问题


Im unable to search my output variable for a specified string that im using for a when statement. The code below is supposed to check for the string "distribute-list" in the output variable but when run the playbook it gives the error.

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"}

Here is the code that is causing issue:

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

Would appreciate some help. Thanks in advance.


回答1:


search expects string as input, but output is a dict with different properties.

You should be good with

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

you need intermediate join here, because for ios-family modules stdout is a list of strings, and stdout_lines is a list of lists (whereas for usual command module stdout is a string and stdout_lines is a list of strings).



来源:https://stackoverflow.com/questions/45737295/using-when-conditional-to-match-string-in-output-register-ansible

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!