gpt4 book ai didi

linux - 如何使用 Ansible 将大量文本附加到文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:42 25 4
gpt4 key购买 nike

我们的应用程序在 /etc/services 中创建了很多定义。我们保留了一个包含所有这些定义的 services 文件,这样我们就可以像这样将它们通过管道传输到 /etc/services 中:

cp /etc/services /etc/services.stock
cat /path/to/build/services >> /etc/services

它可以工作,但它不是幂等的,即重复运行这些命令将导致服务文件再次附加信息。

当我研究我们的 Ansible 剧本时,我试图找出如何做到这一点。我可以这样:

- 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
- ...

但这真的很慢,因为它单独处理每一行。

有没有更好的方法?模板没有帮助,因为它们会完全覆盖服务文件,这看起来有点粗鲁。

最佳答案

blockinfile是一个 native 的幂等模块,用于确保文件中存在(不存在)一组指定的行。

例子:

- name: add services
blockinfile:
state: present
insertafter: EOF
dest: /etc/services
marker: "<!-- add services ANSIBLE MANAGED BLOCK -->"
content: |
line 1
line 2
line 3

关于linux - 如何使用 Ansible 将大量文本附加到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com