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 行中
为避免异常,您可以通过以下方式进行管理:
- 定义默认值:
- 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 != []
或
- 正在发送特定消息:
- 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 }}"
在剧本中使用 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 行中
为避免异常,您可以通过以下方式进行管理:
- 定义默认值:
- 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 != []
或
- 正在发送特定消息:
- 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 }}"