Ansible 根据主机名填充变量

Ansible 根据主机名填充变量

我已经用 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 模板中的引用)

相关内容