如何获取添加新磁盘前后的磁盘差异

如何获取添加新磁盘前后的磁盘差异

我正在准备一个剧本来从 vmware 中查找新扫描的 HDD,我使用以下过滤来获取 HDD 的数量:

before_add: "{{ hostvars[inventory_hostname].ansible_devices.keys() | select('string') | list }}"

输出- ['sr0'、'sda'、'sdb'、'sdc'、'dm-2'、'dm-3'、'dm-0'、'dm-1']

然后使用 vmware_guest_disk 模块添加新的硬盘,然后我执行设置模块来获取最新的磁盘数量

after_add: "{{ hostvars[inventory_hostname].ansible_devices.keys() | select('string') | list }}"

输出:['sr0'、'sda'、'sdb'、'sdc'、'sdd'、'dm-2'、'dm-3'、'dm-0'、'dm-1']

由于托管主机是远程节点,我无法想到查找和差异过滤。请建议如何获取差异:“SDD”

答案1

添加自定义事实就是您要找的内容。这正好可以用于存储持久的自定义事实。例如,为自定义事实创建目录并显示变量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: {}

设置变量添加之前添加后,并显示差异

    - 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) }}"

第一次运行该游戏时,变量添加之前将是一个空列表,并且调试任务应显示所有设备,例如

  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
          ...

并且不应有区别添加之前添加后

  msg: []

如果你添加设备,调试将显示差异,例如

  msg:
  - sda

但是,如果您移除设备,差异将为空。如果您想查看添加和移除的设备,请使用对称差分代替不同之处例如

    - debug:
        msg: "{{ after_add|symmetric_difference(before_add) }}"

相关内容