我们的应用程序在/etc/services
中创建了很多定义。我们保留了一个包含所有这些定义的services
文件,以便我们可以像这样将它们直接传输到/etc/services
:
cp /etc/services /etc/services.stock
cat /path/to/build/services >> /etc/services
这个命令可以正常运行,但它不具备幂等性,也就是说,重复执行此命令会导致服务文件再次附加信息。
在处理 Ansible playbook 时,我正在尝试找出如何实现幂等性。我可以这样做:
- command: "cat /path/to/build/services >> /etc/services"
但我不希望它在每次运行playbook时都运行。
另一个选项是这样做:
- name: add services
lineinfile:
state: present
insertafter: EOF
dest: /etc/services
line: "{{ item }}"
with_items:
- line 1
- line 2
- line 3
- line 4
- ...
但是这种方法非常缓慢,因为它会逐行处理每个文件。
有更好的方法吗?模板并不能帮助,因为它们会完全覆盖服务文件,这似乎有点无礼。
/etc/services.stock
不存在时才执行cp /etc/services /etc/services.stock
。2)执行cat /etc/services.stock /path/to/build/services >/etc/services
。 - clstrfsck