我正在准备一本剧本,从vmware中找到新扫描的HDD,我使用下面的过滤来获取no。人类发展文件:
before_add: "{{ hostvars[inventory_hostname].ansible_devices.keys() | select('string') | list }}"输出- ‘r0’,'sda','sdb','sdc','dm-2','dm-3','dm-0','dm-1‘
然后使用vmware_guest_disk模块添加一个新的硬盘,然后执行安装模块来获取最新的no。盘片
after_add: "{{ hostvars[inventory_hostname].ansible_devices.keys() | select('string') | list }}"输出:‘r0’,'sda','sdb','sdc','sdd','dm-2','dm-3','dm-0','dm-1‘
由于托管主机是远程节点,所以我无法考虑查找和差异过滤。请建议如何获取差异:"SDD“
发布于 2021-04-12 15:15:05
添加自定义事实是你要找的东西。这正是存储持久自定义事实的目的。例如,为自定义事实创建目录并显示变量ansible_local
- name: Create directory for ansible custom facts
ansible.builtin.file:
state: directory
recurse: true
path: /etc/ansible/facts.d
- debug:
var: ansible_local如果您以前没有配置自定义事实,变量ansible_local应该是一个空字典。
ansible_local: {}设置变量before_add和after_add,并显示差异
- set_fact:
before_add: "{{ ansible_local.devices.general.before_add|
default([]) }}"
after_add: "{{ hostvars[inventory_hostname].ansible_devices.keys()|
select('string')|list }}"
- debug:
msg: "{{ after_add|difference(before_add) }}"当您第一次运行播放时,变量before_add将是一个空列表,调试任务应该显示所有设备。
msg:
- loop1
- nvme0n1
...下面是存储持久自定义事实的最重要部分。例如,将字典复制到文件中。
- name: Install custom devices fact
ansible.builtin.copy:
content: |
{"general": {"before_add": {{ after_add }} }}
dest: /etc/ansible/facts.d/devices.fact当您再次运行播放时,安装程序应该读取ansible_local
ansible_local:
devices:
general:
before_add:
- loop1
- nvme0n1
...before_add和after_add之间没有区别。
msg: []如果您添加了一个设备,调试将显示差异。
msg:
- sda但是,如果您删除该设备,则差异将为空。如果您希望看到添加的和删除的设备都使用symmetric_difference而不是差异。
- debug:
msg: "{{ after_add|symmetric_difference(before_add) }}"https://serverfault.com/questions/1060123
复制相似问题