gpt4 book ai didi

apache - Ansible 模块 "lineinfile"替换多个文件中的多行

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:47 30 4
gpt4 key购买 nike

我们的 SSL 证书将在几天内用完。所以我认为 Ansible 可以将新证书放在服务器上并更改 apache2 站点。

服务器站点正在此服务器上运行。

我想替换以下几行:

  • SSLCertificateChainFile
  • SSLCertificateKeyFile
  • SSLCertificateFile

我使用此命令获取/etc/apache2 中存在模式“SSLCertificate”的所有站点的列表。

- name: Apache 2.2 list sites files and store it in register
command: grep -lR --exclude default-ssl "SSLCertificate" /etc/apache2/
register: apache22_sites

这就是我在只需要更改一个文件时使用的:

- name: apache2.2.* | configure certs
lineinfile: dest=/path/to/... regexp={{ item.regexp }} line={{ item.line}} backrefs=yes
with_items:
- { regexp: "SSLCertificateChainFile", line: " SSLCertificateChainFile = ..." }
- { regexp: "SSLCertificateKeyFile ", line: " SSLCertificateKeyFile = ..." }
- { regexp: "SSLCertificateFile", line: " SSLCertificateFile = ..."
notify: reload apache2

我如何告诉 ansible 将此代码用于变量“apache22_sites”多行中列出的多个文件?

我找到了一个很好的提示 here ,遗憾的是只有一行不好。

我感谢任何提示、技巧、提示 :)

问候语丹尼斯

最佳答案

作为tedder42在评论中指出,人们使用 lineinfile 时通常会出现这种情况,你会过得更好templating这些文件。

但是,如果您想解决更普遍的问题,即如何遍历多个事物列表,那么您应该使用 with_nested loop .

所以在你的情况下你会有类似的东西:

- name: Apache 2.2 list sites files and store it in register
command: grep -lR --exclude default-ssl "SSLCertificate" /etc/apache2/
register: apache22_sites

- name: apache2.2.* | configure certs
lineinfile: dest={{ item.0 }} regexp={{ item.1.regexp }} line={{ item.1.line}} backrefs=yes
with_nested:
- apache22_sites
- lines_to_replace
notify: reload apache2

只要你在这样的地方定义你的lines_to_replace:

lines_to_replace:
- { regexp: "SSLCertificateChainFile", line: " SSLCertificateChainFile = ..." }
- { regexp: "SSLCertificateKeyFile ", line: " SSLCertificateKeyFile = ..." }
- { regexp: "SSLCertificateFile", line: " SSLCertificateFile = ..."

关于apache - Ansible 模块 "lineinfile"替换多个文件中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842092/

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