Ansible var jinja2 模板
Ansible var jinja2 template
我一直在尝试在 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('-','')}
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'}
...您可以简单地遍历 nodes
然后。 host_vars
和group_vars
通常用来解决这种你对不同主机或主机组有不同配置的情况。
但我同意在某些情况下这是不舒服的 - 最后回答您的问题:您可以使用变量 inventory_hostname_short
来获取主机的简称:
{% for item in node[inventory_hostname_short].sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}
我一直在尝试在 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('-','')}
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'}
...您可以简单地遍历 nodes
然后。 host_vars
和group_vars
通常用来解决这种你对不同主机或主机组有不同配置的情况。
但我同意在某些情况下这是不舒服的 - 最后回答您的问题:您可以使用变量 inventory_hostname_short
来获取主机的简称:
{% for item in node[inventory_hostname_short].sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}