Using when conditional to match string in output register (Ansible)
14,164
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).
Author by
techkid
Updated on June 18, 2022Comments
-
techkid almost 2 years
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.