你如何在 Ansible 中解决这个问题?
我有一个文件/etc/foo/foo.config
。我想在这个文件中将字符串“DisallowBar”替换为“AlllowBarUntilMidnight”。
Ansible 在这些情况下应该像这样:
- Case1:DisallowBar 被找到并被替换:OK
- 案例 2:AllowBarUntilMidnight 已经在文件中。什么都没做:好的
- Case3:DisallowBar 和 AllowBarUntilMidnight 不在文件中:我希望 ansible 失败。
Case3 对我来说很重要,因为这种状态不应该存在。这是一个错误,不应默默地通过。
您可以使用replace
validate
参数来确保将要写入的文件包含且不再包含.AllowBarUntilMidnight
DisallowBar
该
validate
命令在生成的临时文件上运行,然后在运行后将其复制到位replace
。在这种情况下,如果grep
失败,则意味着没有进行替换,并且您的原始文件从未包含DisallowBar
过。然后播放失败并且文件没有改变。您可以简单地依赖
replace
函数的默认行为来确保文件不再包含字符串DisallowBar
。在该替换任务运行后,您只需要确认文件确实包含字符串
AllowBarUntilMidnight
,如果不包含则引发错误。你可以用一个简单的grep
.