首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jinja2模板

jinja2模板
EN

Stack Overflow用户
提问于 2016-01-06 03:16:02
回答 1查看 1.8K关注 0票数 2

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

yaml var文件有:

代码语言:javascript
运行
复制
nodes:
  barni:
    - { name: 'LoginGraceTime', value: '2m'}
    - { name: 'MaxSessions', value: '6'}
    - { name: 'ChallengeResponseAuthentication', value: 'yes'}

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

代码语言:javascript
运行
复制
{% for item in node.barni.sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}

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

代码语言:javascript
运行
复制
- 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 ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 03:58:44

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

如果您有一个包含以下内容的文件host_vars/barni.yml (尽管使用的是全名而不是短名称):

代码语言:javascript
运行
复制
nodes:
  - { name: 'LoginGraceTime', value: '2m'}
  - { name: 'MaxSessions', value: '6'}
  - { name: 'ChallengeResponseAuthentication', value: 'yes'}

...you只需在nodes上循环即可。host_varsgroup_vars通常用于解决针对不同主机或主机集有不同配置的这种情况。

但我同意,在有些情况下,这是不舒服的--并最终回答您的问题:您可以使用变量inventory_hostname_short获得主机的短名称:

代码语言:javascript
运行
复制
{% for item in node[inventory_hostname_short].sshdextra %}
{{ item.name }} {{ item.value }}
{% endfor %}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34625039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档