幂等编辑配置文件

幂等编辑配置文件

例如,在编辑配置文件时,/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

理想情况下,如果最初设置了变量的值,则应将其替换为新值。

答案1

不要运行 shell 命令,而是使用sysctl模块

如果可能,请避免使用shell.

- ansible.posix.sysctl:
    name: vm.swappiness
    value: '10'
    state: present

答案2

我刚刚找到了另一个答案,https://stackoverflow.com/a/31632883/376258, 指向http://augeas.net/感谢您的问题引发的一些好奇的谷歌搜索。这是我在 ubuntu 20.04 中如何使其工作的:

sudo apt install libaugeas-dev
virtualenv -p /usr/bin/python3.10 venv; . venv/bin/activate.fish
pip install git+https://github.com/hercules-team/python-augeas
sudo venv/bin/python3 -c """
import augeas
aug = augeas.Augeas()
aug.set('/files/etc/sysctl.conf/fs.inotify.max_inotify_watches', '44194306')
aug.set('/files/etc/sysctl.conf/fs.inotify.max_user_watches', '44194306')
aug.save()
"""

并验证:

cat /etc/sysctl.conf | grep inotify

相关内容