如何跳过 Ansible 剧本中的一些循环

How to skip some loops in Ansible playbook

我正在使用 Ansible,并且我有一个剧本,其中我有一个这样的任务:

- name: Get remote system names
  xml:
    xmlstring: "{{ item.xml }}"
    xpath: "/rpc-reply/lldp/lldp-system-name"
    content: text
  loop: "{{ topology.results }}"
  register: names

其中:

"topology": {
    "changed": false, 
    "msg": "All items completed", 
    "results": [............] }

所以我循环所有结果,在里面我从结果[]的每一项得到一个item.xml。然后,我收到一个特定的标签。我的问题是有些标签对 xpath: "/rpc-reply/lldp/lldp-system-name" 没有任何价值,所以我想跳过它或者只是用其他东西替换它,因为现在我得到一个错误并且我的任务失败所以我的剧本没有不能正常工作。

有什么想法吗?

不确定这是否是最佳解决方案,但这是您可以跳过失败项的方法。首先收集 xpath 匹配到一个变量的结果并忽略错误。然后循环遍历收集的结果并通过使用 when: not item.failed.

跳过失败的项目来使用所需的数据
- name: Get remote system names
  xml:
    xmlstring: "{{ item.xml }}"
    xpath: "/rpc-reply/lldp/lldp-system-name"
    content: text
  loop: "{{ topology.results }}"
  register: names
  ignore_errors: yes

- debug: var=item
  when: not item.failed
  with_items: "{{ names.results }}"