PLAY RECAP 中可以忽略 check_mode 任务吗?

问题描述 投票:0回答:1

我正在检查模式下使用 zypper 模块来测试是否安装了某个软件包,并根据此信息执行后续任务。

- name: check if {{ package }} is installed
  community.general.zypper:
    name: "{{ package }}"
    state: installed
  register: _package_installed
  check_mode: true
- name: change a file from {{ package }}
  lineinfile:
     ...
  when: _package_installed.changed

这有效。但令人恼火的是,在

check_mode
中运行的步骤返回“已更改”状态,并且在 PLAY RECAP 中显示为“已更改”状态,即使实际上并未在目标系统上应用任何更改。仅仅查看 RECAP 的用户可能会错误地认为该剧实际上修改了系统。

使用

changed_when: false
不是一个选项,因为它会导致后面的
when:
子句始终返回 false。我可以求助于解析 zypper 模块的标准输出,但我想避免这种情况,因为它很容易出错,并且该解决方案将是该模块独有的。

ansible
1个回答
0
投票

一般来说,这是不可能的。

如果任务被“更改”,无论是否在

check_mode
中,它都会在播放日志和游戏回顾中显示,除非设置了
changed_when: false
。对于某些模块,可以设置
changed_when: false
,注册结果,并在后面的条件中使用特定于模块的返回值(例如
rc
表示
ansible.builtin.command
)。

对于问题中提到的

zypper
特定问题,可以使用
package_facts
来代替,正如@Zeitounator的评论中指出的那样。

© www.soinside.com 2019 - 2024. All rights reserved.