set_fact 任务中检索到的多个事实导致剧本 运行 问题错误

Multiple facts retrieved in set_fact task causes playbook run to issue error

在剧本中使用 set_fact 检索到多个事实,导致错误

我尝试了单独的 set_fact 任务,每个事实检索 1 个。也有错误。 当我在 set_fact 下定义了 3 个事实时似乎会发生,即当我包含 mountsize_tmp 时。当我只有前 2 个事实时没有错误。 set_fact 中使用的变量名是否需要在 var 变量部分定义?

错误是: 有问题的行似乎是:set_fact: ^ 此处异常类型:异常:没有第一项,序列为空。

   - set_fact:
      alto_seal: "{{ ansible_local.alto_bootstrap.seal }}"  # local fact
      mountsize: "{{ ansible_mounts | selectattr('mount', 'equalto', '/abc') | map(attribute='size_total') | first }}"     # ansible fact
      mountsize_tmp: "{{ ansible_mounts | selectattr('mount', 'equalto', '/tmp') | map(attribute='size_total') | first }}"

  - debug:
      msg: "{{ 'Alto start mountsize ' ~ mountsize }}"  
  - debug:
      msg: "{{'Seal  ' ~ alto_seal }}"

期望文件装载大小和来自自定义事实文件的事实的值显示在 2 行中

为避免异常,您可以通过以下方式进行管理:

  1. 定义默认值:
- set_fact:
      alto_seal: "{{ ansible_local.alto_bootstrap.seal }}"  # local fact

- set_fact:
      mountsize: "<DEFAULT_VALUE_OF_YOUR_CHOICE>"
      mountsize_tmp: "<DEFAULT_VALUE_OF_YOUR_CHOICE>"

- set_fact:
      mountsize: "{{ ansible_mounts | selectattr('mount', 'equalto', '/abc') | map(attribute='size_total') | first }}"     # ansible fact
  when: ansible_mounts | selectattr('mount', 'equalto', '/abc') | map(attribute='size_total') | list != []

- set_fact:
      mountsize_tmp: "{{ ansible_mounts | selectattr('mount', 'equalto', '/tmp') | map(attribute='size_total') | first }}"
  when: ansible_mounts | selectattr('mount', 'equalto', '/tmp') | map(attribute='size_total') | list != []

  1. 正在发送特定消息:
- set_fact:
      alto_seal: "{{ ansible_local.alto_bootstrap.seal }}"  # local fact

- set_fact:
      mountsize: "{{ ansible_mounts | selectattr('mount', 'equalto', '/abc') | map(attribute='size_total') | first }}"     # ansible fact
      msg: "{{ 'Alto start mountsize ' ~ mountsize }}"
  when: ansible_mounts | selectattr('mount', 'equalto', '/abc') | map(attribute='size_total') | list != []

- set_fact:
      msg: "Alto start mountsize cannot be calculated"
  when: ansible_mounts | selectattr('mount', 'equalto', '/abc') | map(attribute='size_total') | list == []

- debug:
      msg: "{{ msg }}"