我在我们的服务器和工作站上进行了一些安装,这些安装是通过专有的安装脚本(例如 MATLAB)执行的。
保持幂等性我想分析在该过程中创建的日志文件。如何根据这些日志文件的内容定义
changed_when
?
例如,
command
任务目前如下所示:
- name: Run MATLAB installer
ansible.builtin.command:
argv:
- /mnt/matlabiso/install
- -inputFile
- /mnt/downloads/Software/MATLAB/R2024a/installer_input_linux.txt
changed_when: false
因此,此命令会在 /tmp/ML2024.log 中创建一个日志文件,其中最后一行为“安装成功”,如果不成功则为“安装失败”。如果记住正确的话,命令本身通常不会失败。
如果我正确理解了我的linter,
changed_when: false
,那么读取日志文件的内容并通过调试进行打印并不是调用命令的真正幂等方式,因为更改已经通过命令完成了。
所以实际问题:我是否错过了命令如何处理文件内容的方法,而无需创建自定义脚本,该脚本随后执行、设置并读取内容。
问:“为了保持幂等性,我想分析在此过程中创建的日志文件。”
不过,这对我来说看起来像是自定义事实的工作。
问:“
command
如何能够处理文件内容,而无需创建自定义脚本,然后执行、设置并读取内容?”
command
模块 – 在目标上执行命令 - 注释 并至少“如果需要这些功能,请使用 ansible.builtin.shell
模块。”
问:“此命令在 /tmp/ML2024.log
处创建一个日志文件,其中
Succesful installed
行作为最后一行,如果不成功,则为
Installation failed
。” 这听起来更像是
定义失败和failed_when
的状态,因为它不告诉它之前是否已经安装过。查看最小的示例手册
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- shell:
cmd: echo 'Installation failed' > /tmp/ML2024.log | grep 'Succesful installed' /tmp/ML2024.log
register: result
- debug:
var: result
产生的输出
TASK [shell] *******************************************************************
fatal: [localhost]: FAILED! => changed=true
cmd: echo 'Installation failed' > /tmp/ML2024.log | grep 'Succesful installed' /tmp/ML2024.log
delta: '0:00:00.007761'
end: '2024-11-12 09:30:00.347773'
msg: non-zero return code
rc: 1
start: '2024-11-12 09:30:00.340012'
stderr: ''
stderr_lines: <omitted>
stdout: ''
stdout_lines: <omitted>
只需 注册 result
正如您所说,命令本身大多会成功,并且您想要更广泛的“成功”概念。
你最好的选择似乎是将多个命令包装在一个
块中。
块允许您按顺序运行多个命令,并将该组命令视为成功或失败,以及在失败时可以执行一些清理步骤。