首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在添加新磁盘之前和之后获取磁盘差异

如何在添加新磁盘之前和之后获取磁盘差异
EN

Server Fault用户
提问于 2021-04-12 12:43:59
回答 1查看 503关注 0票数 0

我正在准备一本剧本,从vmware中找到新扫描的HDD,我使用下面的过滤来获取no。人类发展文件:

代码语言:javascript
复制
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。盘片

代码语言:javascript
复制
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“

EN

回答 1

Server Fault用户

发布于 2021-04-12 15:15:05

添加自定义事实是你要找的东西。这正是存储持久自定义事实的目的。例如,为自定义事实创建目录并显示变量ansible_local

代码语言:javascript
复制
    - 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应该是一个空字典。

代码语言:javascript
复制
  ansible_local: {}

设置变量before_add和after_add,并显示差异

代码语言:javascript
复制
    - 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将是一个空列表,调试任务应该显示所有设备。

代码语言:javascript
复制
  msg:
  - loop1
  - nvme0n1
    ...

下面是存储持久自定义事实的最重要部分。例如,将字典复制到文件中。

代码语言:javascript
复制
    - name: Install custom devices fact
      ansible.builtin.copy:
        content: |
          {"general": {"before_add": {{ after_add }} }}
        dest: /etc/ansible/facts.d/devices.fact

当您再次运行播放时,安装程序应该读取ansible_local

代码语言:javascript
复制
  ansible_local:
    devices:
      general:
        before_add:
        - loop1
        - nvme0n1
          ...

before_add和after_add之间没有区别。

代码语言:javascript
复制
  msg: []

如果您添加了一个设备,调试将显示差异。

代码语言:javascript
复制
  msg:
  - sda

但是,如果您删除该设备,则差异将为空。如果您希望看到添加的和删除的设备都使用symmetric_difference而不是差异。

代码语言:javascript
复制
    - debug:
        msg: "{{ after_add|symmetric_difference(before_add) }}"
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1060123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档