我有一本如下的剧本。应该将python安装到远程机器上,以便它可以开始使用模块,因此为什么要使用raw呢,因为它是唯一无需python解释器即可运行的东西。
---
- name: Checking Ansible Python Dependency
hosts: Debian_Buster
gather_facts: False
tasks:
- name: install python 2
become: yes
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
此剧本任务按预期工作,但即使未安装任何内容,也始终返回“已更改”。
有没有一种方法可以使该剧本在test -e /usr/bin/python
返回0时返回“ ok”,然后在test -e /usr/bin/python
返回1时返回“ changed”?
注意:由于无法使用python依赖项,因此我无法使用除raw以外的任何其他模块。
答案 0 :(得分:1)
此类问题的基本解决方案是使用register
关键字保存任务的结果,然后以changed_when
表达式检查结果。
在您的情况下,我们不能仅使用返回码来决定这一点,但是我们只能检查标准输出,如果我错了,请纠正我,只有在test
命令成功的情况下,该输出才为空。
示例:
- name: install python 2
become: yes
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
register: command_result
changed_when: command_result.stdout | length > 0