团队,
我有一种情况,根据条件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