将两个可回答的任务合并,但根据条件和注册结果只运行一个



团队,

我有一种情况,根据条件when结果运行两个任务中的一个,两者完全相同,只是表达式不同。

任务

- name: Create partitions WHEN it is NVME device
parted:
device: "{{ item.0.device }}"
number: "{{ item.1.number }}"
part_start: "{{ item.1.start }}"
part_end: "{{ item.1.end }}"
state: present
loop:  "{{ local_volume_mount_disks|subelements('partitions') }}"
when: '"{{item.0.device }}" is regex("nvmew+")'
register: partitioned_device_live_info
- name: Create partitions WHEN it is SD* device
parted:
device: "{{ item.0.device }}"
number: "{{ item.1.number }}"
part_start: "{{ item.1.start }}"
part_end: "{{ item.1.end }}"
state: present
loop:  "{{ local_volume_mount_disks|subelements('partitions') }}"
when: '"{{item.0.device }}" is regex("sdw+")'
register: partitioned_device_live_info

但现在发生的是寄存器变量partitioned_device_live_info被其任务结果的结果所取代。因此,我想将结果保留在已注册变量PASS结果中。有没有办法,我可以把这两个任务连接起来,这样当when为false时,一旦填充了寄存器变量就不会被替换?

类似Task1when的情况为true,寄存器变量有其结果,然后检查task2,但跳过寄存器变量而不替换。因为我需要继续执行其他任务,该变量具有特定值,只有当when为TRUE时我才能获得该值。

是和否。是的,有一个丑陋的解决方案,但也没有。这是预期的行为。下面的丑陋解决方案:

在的基础上使用设定的事实

- name: Create partitions WHEN it is NVME device
parted:
device: "{{ item.0.device }}"
number: "{{ item.1.number }}"
part_start: "{{ item.1.start }
part_end: "{{ item.1.end }}"
state: present
loop:  "{{ local_volume_mount_disks|subelements('partitions') }}"
when: '"{{item.0.device }}" is regex("nvmew+")'
register: tmp
- set_fact: partitioned_device_live_info ="{{tmp}}"
when: tmp.changed
- name: Create partitions WHEN it is SD* device
parted:
device: "{{ item.0.device }}"
number: "{{ item.1.number }}"
part_start: "{{ item.1.start }}"
part_end: "{{ item.1.end }}"
state: present
loop:  "{{ local_volume_mount_disks|subelements('partitions') }}"
when: '"{{item.0.device }}" is regex("sdw+")'
register: tmp

- set_fact: partitioned_device_live_info ="{{tmp}}"
when: tmp.changed

最新更新