我正在尝试使用下面的 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”作为“差异任务”的输出
...
过滤器未获取差异...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)
。