Ansible var jinja2模板

时间:2016-01-06 03:16:02

标签: jinja2 ansible

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

yaml var文件有:

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

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

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

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

- 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 ]

1 个答案:

答案 0 :(得分:2)

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

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

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

...你只需循环nodes即可。 host_varsgroup_vars通常用于解决这种情况,即您对不同的主机或主机集具有不同的配置。

但我同意有些情况令人不舒服 - 并最终回答你的问题:你可以使用变量inventory_hostname_short来获取主持人的短名称:

{% for item in node[inventory_hostname_short].sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}
相关问题