【发布时间】:2018-05-14 18:20:55
【问题描述】:
我正在尝试使用 playbook 中的 regex_findall 功能来解析从返回 XML 值的 API 调用返回的 IP 地址。
示例数据:
me><certificate-expiry>2027/07/31 18:29:03</certificate-expiry><connected-at>2018/05/03 13:10:20</connected-at><custom-certificate-usage>no</custom-certificate-usage><multi-vsys>no</multi-vsys><vsys><entry name=\"vsys1\"><display-name>vsys1</display-name><shared-policy-status></shared-policy-status><shared-policy-md5sum>9bef65fea5df7d86617dbecfb1ef6053</shared-policy-md5sum></entry></vsys></entry><entry name=\"001606026760\"><serial>001606026760</serial><connected>yes</connected><unsupported-version>no</unsupported-version><hostname>us-583-int-fw-01</hostname><ip-address>10.200.226.8</ip-address><mac-addr></mac-addr><uptime>72 days, 6:19:31</uptime><family>200</family><model>PA-200</model><sw-version>8.0.0</sw-version><app-version>8013-4681</app-version><av-version>2599-3095</av-version><wildfire-version>240995-243478</wildfire-version><threat-version>8013-4681</threat-version><url-db>paloaltonetworks</url-db><url-filtering-version>20180508.40211</url-filtering-version><logdb-version>8.0.15</logdb-version><vpnclient-package-version></vpnclient-package-version><global-protect-client-package-version>0.0.0</global-protect-client-package-version><domain></domain><vpn-disable-mode>no</vpn-disable-mode><operational-mode>normal</operational-mode><certificate-status></certificate-status><certificate-subject-name>001606026760</certificate-subject-name><certificate-expiry>2027/02/08 17:39:01</certificate-expiry><connected-at>2018/05/03 13:10:20</connected-at><custom-certificate-usage>no</custom-certificate-usage><multi-vsys>no</multi-vsys><vsys><entry name=\"vsys1\"><display-name>vsys1</display-name><shared-policy-status></shared-policy-status><shared-policy-md5sum>47c67d0aeec16c2dbd738ffab7948886</shared-policy-md5sum></entry></vsys></entry><entry name=\"001606055848\"><serial>001606055848</serial><connected>yes</connected><unsupported-version>no</unsupported-version><hostname>us-575-int-fw-01</hostname><ip-address>10.200.230.8</ip-address><mac-addr></mac-addr><uptime>111 days, 12:30:25</uptime><family>200</family><model>PA-200</model><sw-version>8.0.7</sw-version><app-version>8017-4708</app-version><av-version>2609-3105</av-version><wildfire-version>243887-246373</wildfire-version><threat-version>8017-4708</threat-version><url-db>paloaltonetworks</url-db><url-filtering-version>20180514.20206</url-filtering-version><logdb-version>8.0.16</logdb-version><vpnclient-package-version></vpnclient-package-version><global-protect-client-package-version>0.0.0</global-protect-client-package-version><domain></domain><vpn-disable-mode>no</vpn-disable-mode><operational-mode>normal</operational-mode><certificate-status></certificate-status><certificate-subject-name>
我将批量 XML 结果存储在 register: request_devices 中,然后尝试解析:
- name: Parse XML result for IP Address
set_fact:
returned_ipaddress: "{{ request_devices | regex_findall('\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b') }}"
但是,当我运行播放时,我得到以下信息:
错误!加载 YAML 时出现语法错误。 发现未知的转义字符 该错误似乎出现在“/Users/tfranklin/gitrepos/retail/test-clean-palo-alto/testpw.yaml”中:第 21 行,第 81 列,但可能 根据确切的语法问题,位于文件中的其他位置。 违规行似乎是: 设置事实: 返回的IP地址:“{{ request_devices | regex_findall('\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b') }}” ^ 这里 我们可能是错的,但这个看起来可能是一个问题 缺少引号。总是引用模板表达式括号 开始一个值。例如: with_items: - {{ 富}} 应该写成: with_items: - “{{ 富 }}”我尝试使用\\ 转义\,但仍然失败。
【问题讨论】:
-
应该是
r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b' -
仍然遇到同样的解析错误。