如何使用ansible中的set_事实设置寄存器中的值?

如何使用ansible中的set_事实设置寄存器中的值?,ansible,Ansible,当根据条件跳过一个任务时,寄存器的结果也不同,导致另一个任务失败的原因是什么 - name: Check if the partition is already mounted shell: df | grep "{{item.partition}}" | wc -l with_items: - "{{ ebs_vol }}" register: ebs_checked when: ebs_vol is defined - name: Make filesystem o

当根据条件跳过一个任务时,寄存器的结果也不同,导致另一个任务失败的原因是什么

- name: Check if the partition is already mounted
  shell: df | grep "{{item.partition}}" | wc -l
  with_items:
    - "{{ ebs_vol }}"
  register: ebs_checked
  when: ebs_vol is defined

- name: Make filesystem of the partition
  filesystem: fstype=ext4 dev={{item.item.partition}} force=no
  when:  ( ebs_vol is defined and "{{item.stdout}} == True" )
  changed_when: True
  with_items:
    - ebs_checked.results
使用默认过滤器处理拐角情况:

- name: Make filesystem of the partition
  filesystem: fstype=ext4 dev={{item.item.partition}} force=no
  when:  item.stdout | bool
  changed_when: True
  with_items: "{{ ebs_checked.results | default([]) }}"
如果在ebs_checked中没有结果,这将在空列表读取上进行迭代


另外,您不应该检查是否定义了ebs_vol,因为当循环任务中的语句应用于循环内时,请记住,您检查的ebs_vol是在上一个任务中定义的,使此检查在循环内变得不必要。

在上述解决方案中,at-when:item.stdout | bool是我们需要使用的数据类型或变量吗?它是一个将字符串转换为适合when条件的布尔类型的过滤器。它给出了语法错误。dict对象没有属性stdout.check ebs_checked.results当我不定义ebs_vol时,我被卡住了,输出如下,因为结果中没有stdout。debug msg={{ebs_checked.results}]*********************************确定:[10.254.18.117]=>{msg:[{u'skipped':}