我已经用 Google 搜索过,但找不到我想做的事情的解决方案。
我想根据服务器的主机名设置一个 jinja2 变量(我正在使用不同的证书并希望让 ansiblessl.conf
根据主机名创建)。
我想要一个可以做类似以下事情的字典:
Certmapping:
host1: www.mydomain.com
host2: beta.mydomain.com
host3: partner.mydomain.com
然后是一个引用字典的模板,如下所示:
SSLCertificateFile /etc/pki/tls/certs/<domain>.crt
我可能会有一个怪物:
if {{ ansible_hostname }} == 'host1' ...
但这看上去不太优雅。
答案1
根据不知疲倦的 @michaelhampton 的建议,你可以这样使用host_vars
project root
-- host_vars
-- host1.yml
-- host2.yml
-- host3.yml
-- my_playbook.yml
因此,当您设置 host1.yml 时,您只需将其所需的值放在那里即可:
---
Certmap: www.mydomain.com
当你需要访问它时,只需像这样引用它:
{{ Certmap }}
只要每个主机都有一个Certmap
定义的 host_vars 文件,它就会根据不同的主机而改变。
答案2
给定你的Certmapping
字典,只需使用以下内容:
- set_fact:
certificate_configuration_line: "SSLCertificateFile /etc/pki/tls/certs/{{Certmapping[ansible_hostname]}}.crt"
(set_fact
仅作为示例,您可以直接使用lineinfile
或 Jinja2 模板中的引用)