无法使用ansible差异过滤器获取列表中的差异

问题描述 投票:0回答:1

我正在尝试使用下面的 ansible 剧本来获取磁盘中的差异,但差异过滤器没有获取差异:

---
- name: Fetch the new disk
  hosts: servera.lab.example.com
  gather_facts: true
  tasks:
  - name: Output disk information before scanning
    debug:
      var: hostvars[inventory_hostname].ansible_devices.keys() | map('regex_search', 'vd.*') | select('string') | list
    register: before_scan

  - name: Refresh facts
    ansible.builtin.setup:

  - name: Pause for 2 min to add the disk
    ansible.builtin.pause:
   
  - name: Output disk information after scanning
    debug:
      var: hostvars[inventory_hostname].ansible_devices.keys() | map('regex_search', 'vd.*') | select('string') | list
    register: after_scan


  - name: Difference
    debug:
      msg: "{{ before_scal | difference(after_scan }}"

它给出以下输出

TASK [Output disk information before scanning] *********************************
ok: [servera] => {
    "hostvars[inventory_hostname].ansible_devices.keys() | map('regex_search', 'vda') | select('string') | list": [
        "vda"
    ]
}

TASK [Refresh facts] ***********************************************************
ok: [servera]

TASK [Output disk information after scanning] **********************************
ok: [servera] => {
    "hostvars[inventory_hostname].ansible_devices.keys() | map('regex_search', 'vd.*') | select('string') | list": [
        "vdb",
        "vda"
    ]
}

TASK [Difference] **************************************************************
fatal: [servera]: FAILED! => {"msg": "template error while templating string: unexpected '}', expected ')'. String: {{ before_scal | difference(after_scan }}"}

你能帮忙纠正过滤中的错误吗,我需要获取“vdb”作为“差异任务”的输出

filter ansible difference
1个回答
0
投票

...

difference
过滤器未获取差异...

根据文档

difference
过滤器 – 一个列表与另一个列表的差异,一个最小的示例剧本,以便

提供第一个列表中未出现在第二个列表中的所有元素的唯一列表。

---
- hosts: localhost
  become: true
  gather_facts: false

  vars:

    BEFORE:
      - vda

    AFTER:
      - vda
      - vdb

  tasks:

  - name: Difference
    debug:
      msg: "{{ AFTER | difference(BEFORE) }}"

将导致

所请求的输出
TASK [Difference] ******
ok: [localhost] =>
  msg:
  - vdb

请备注顺序

AFTER | difference(BEFORE)

© www.soinside.com 2019 - 2024. All rights reserved.