jinja2 - Ansible var jinja2 模板

标签 jinja2 ansible

我一直在尝试引用 Ansible 中的变量,但每次都会收到错误。

yaml var 文件有:

nodes:
  barni:
    - { name: 'LoginGraceTime', value: '2m'}
    - { name: 'MaxSessions', value: '6'}
    - { name: 'ChallengeResponseAuthentication', value: 'yes'}

其中 barni 是“主机名 -s”。我需要 sshd_config.j2 模板中的动态内容来匹配变量中的主机名。如果我指定node.barni.sshdextra,模板工作正常,但我需要将“barni”动态替换为服务器名称的短名称。

{% for item in node.barni.sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}

在任务中我可以使用引用短主机名 hostname_mounts: "{{hostname_shortname.replace('-','')} hostname_shortname: "{{inventory_hostname.split('.')[0]}} 在变量 def 文件中

- name: nfs - edit - remove nfs lines from /etc/fstab
  command: sed -i '/nfs/d' /etc/fstab
  ignore_errors: yes
  when: "'{{inventory_hostname}}'.startswith('{{hostname_mounts}}')"
  tags: [ nfs ]

最佳答案

首先让我们确保您了解 Ansibles host_vars 的概念。

如果您有一个文件host_vars/barni.yml(尽管使用的是全名而不是简称),其内容为:

nodes:
  - { name: 'LoginGraceTime', value: '2m'}
  - { name: 'MaxSessions', value: '6'}
  - { name: 'ChallengeResponseAuthentication', value: 'yes'}

...您只需循环遍历节点即可。 host_varsgroup_vars 通常用于解决这种对不同主机或主机组有不同配置的情况。

但我同意在某些情况下这会让人感到不舒服 - 最后回答您的问题:您可以使用变量 inventory_hostname_short 来获取主机的短名称:

{% for item in node[inventory_hostname_short].sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}

关于jinja2 - Ansible var jinja2 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34625039/

相关文章:

ansible - 如何为本地和远程主机设置不同的python解释器

python - Pyramid 上扩展名为 .html 的 Jinja2 模板?

pdf - WeasyPrint 不插入来自 Jinja2 的图像用于 PDF 报告

ansible - 如何自动测试配置管理脚本?

amazon-web-services - 如何以可扩展和灵活的方式管理具有多个环境的 Ansible 库存?

python - Ansible 不从 ~/.aws/credentials 读取凭证

Django 集成与 Mako Jinja2 模板比较使用 : render_to_response. 问题?

python - 将Excel中的列表存储到字典中

Jinja2 中的 HTML 表单元素未打印正确的字符串。它只打印空格前的值

templates - Jinja2 For 循环 YAML 字典列表