I have a string of output from a query I have ran against a firewall. When I try to parse the string using the community XML module, I am getting an output of:
fatal: [hostname]: FAILED! => {"changed": false, "msg": "Error while parsing document: xml_string (Start tag expected, '<' not found, line 1, column 1 (<string>, line 1))"}
From:
- name: Gather allocated number of addresses for LAN interface...
community.general.xml:
xmlstring: ethernet1-1_output.content
xpath: "/x:response/x:result/x:interface[@name='allocated']"
register: allocated_ethernet1-1
I have debugged my input and it does seem to be valid XML according to VS.Code. But there are extra characters I think Ansible is adding that might be giving it a problem.
<response status=\"success\">
<result>
<interface name=\"ethernet1/1\" id=\"258\" allocated=\"40\" total=\"150\">
<entry name=\"10.10.10.10\">\n
Is there a way to get a more 'unmodified' output from an API query? Or an easier way to format this to be more module-readable? The goal is to grab the allocated and total values as separate numbers.
It looks like you simply forgot to surround your variable name with curly braces, so Ansible interprets
ethernet1-1_output.contentas a string. You should use Jinja2 templating instead to reference a variable:Ansible does not add any extra characters. The output you've posted is probably copied from a
debugtask console output, isn't it? By default, Ansible outputs the task execution results as JSON, so any double quotes or control characters should be escaped. To have more human-readable console output, you can usecommunity.general.yamlstdout callback or settingcallback_result_format = yamlfor the default callback (note that these two options are not equal):Using these, Ansible will log the variables "as is" to console. Note that is does not affect the way how the variable values are interpreted internally.