例如,在编辑配置文件时,/etc/sysctl.conf
以幂等方式进行更新通常很有用,这意味着如果多次执行脚本,您不会为所做的配置更改获得多个条目。
作为我遇到这种情况的真实实例,我需要在多阶段ansible
剧本中编辑上述文件。但问题是,如果后期失败,则需要重新运行playbook,这意味着更新命令可能会运行多次,如果更新不是幂等的,则会导致重复。
那么问题是如何以幂等方式更新此类配置文件?
非幂等更新的一个示例是:
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
或在 ansible 中:
- name: Set swappiness setting
shell: echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
理想情况下,如果最初设置了变量的值,则应将其替换为新值。
sysctl
使用module代替运行 shell 命令。如果可能,请避免使用
shell
.我刚刚找到了另一个答案,https://stackoverflow.com/a/31632883/376258,指向http://augeas.net/,这要归功于你的问题引发的一些好奇的谷歌搜索。这是我在 ubuntu 20.04 中如何使其工作的:
并验证: