我想知道是否有办法确定使用ansible playbook是否已应用补丁。例如,我有一个shell脚本,我需要修补,然后使用它的修补版本。如果已修补,则跳过任务。
此时我的playbook在尝试执行修补任务时失败,因为它是在之前的尝试中完成的,并且在尝试修补修补文件时出错。 感谢
答案 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 @@
+
这可以避免需要其中一个更新文件的哈希值。