如果已经应用补丁,有没有办法检查ansible?

时间:2015-06-29 11:55:18

标签: patch ansible

我想知道是否有办法确定使用ansible playbook是否已应用补丁。例如,我有一个shell脚本,我需要修补,然后使用它的修补版本。如果已修补,则跳过任务。

此时我的playbook在尝试执行修补任务时失败,因为它是在之前的尝试中完成的,并且在尝试修补修补文件时出错。 感谢

3 个答案:

答案 0 :(得分:2)

您也可以在修补之前进行测试。

patch -R --dry-run -f  < patchfile;
if [ $? -eq 0 ] then
  patch -f < patchfile
fi

作为单行(并使用||而不是if..then)将是:

patch -R --dry-run -f < patchfile || patch -R -f < patchfile

基本上它试图做一个干运行的补丁-R试图恢复补丁,然后如果失败则试图修补补丁。

然而,这并非没有缺点,因为两个命令都可能失败。

答案 1 :(得分:1)

您可能想检查文件的md5并仅在校验和不是您期望的那个时应用补丁:

- stat: path=/my/file get_md5=yes
  register: file_md5
- patch: ...
  when: file_md5.stat.md5 != myexpectedmd5

答案 2 :(得分:0)

您可以执行此操作的一种方法是结合此处已经给出的两个答案,即使用您的patch创建一个新的空文件,然后针对(stat)过滤该文件是否存在或不是在应用补丁之前。

   a  b
1  1  2 
2  2  3
3  3  nan

然后作为您的任务的一部分

diff -urN mycode-0.1/is-patched mycode-0.1/is-patched
--- mycode-0.1/is-patched      1970-01-01 10:00:00.000000000 +1000
+++ mycode-0.1/is-patched      2018-04-18 10:00:00.000000000 +1000
@@ -0,0 +1 @@
+

这可以避免需要其中一个更新文件的哈希值。