首页 > 解决方案 > 当 ansible_facts 中的特定项目不可用时如何编写自定义消息(比如磁盘 sdb 不可用)

问题描述

我正在从ansible_facts复制模块(内容和目标)的帮助下收集一些输出并将它们写入远程服务器上的文件,如果服务器上没有某些项目(比如服务器上不存在磁盘 sdb),我需要写为 NONE .

如果sdb找不到磁盘,我该如何写 NONE?

我的剧本如下

- copy:
    content: |
      Memory = {{ ansible_memtotal_mb }}
      Size of disk sda =  {{ ansible_devices.sda.size  }}
    dest: /tmp/test

但是如果服务器上的磁盘 sdb 不可用,如何检查和编写如下自定义消息

Size of disk sdb =  NONE

标签: ansibleansible-facts

解决方案


使用默认过滤器。例如

- copy:
    content: |
      Memory = {{ ansible_memtotal_mb }}
      Size of disk sda =  {{ ansible_devices.sda.size  }}
      Size of disk sdb =  {{ ansible_devices.sdb.size|default('NONE')  }}
    dest: /tmp/test

一般来说,Jinja2 条件if-else-endif也应该完成这项工作

- copy:
    content: |
      Memory = {{ ansible_memtotal_mb }}
      Size of disk sda =  {{ ansible_devices.sda.size }}
      {% if ansible_devices.sdb.size is defined %}
      Size of disk sdb =  {{ ansible_devices.sdb.size }}
      {% else %}
      Size of disk sdb =  NONE
      {% endif %}
    dest: /tmp/test

请参阅jinja2 模板中的“if”语句


推荐阅读