当ansible_facts中特定项不可用时(例如,磁盘sdb不可用),如何编写自定义消息

时间:2019-11-27 16:04:46

标签: ansible ansible-facts

我正在从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

1 个答案:

答案 0 :(得分:1)

使用default过滤器。例如

- 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

请参见'if' statement in jinja2 template