我们的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,遗憾的是只有一行。
我感谢任何提示,技巧和提示:)
问候 丹尼斯
答案 0 :(得分:1)
正如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 = ..."