使用jinja2模板时,不确定的错误错误

问题描述 投票:0回答:1

我正在练习ansible。我已经基本完成了所有工作,现在我正在构建jinja2模板并使用它。当我需要为组建立报告并将其上传并上传到各自的dns服务器时,有一个练习。美国组中所有服务器的报告将上载到dns_server_america,亚洲也是如此。

dns_server_america ansible_host=172.20.1.100 ansible_ssh_pass=Passw0rd ansible_user=root
dns_server_asia ansible_host=172.20.1.101 ansible_ssh_pass=Passw0rd ansible_user=root

[america]
web0001 ansible_hostname=web0001.company.com ansible_host=10.1.1.101 
web0002 ansible_hostname=web0002.company.com ansible_host=10.1.1.102 


[asia]
web2001 ansible_hostname=web2001.company.com ansible_host=10.1.1.201 
web2002 ansible_hostname=web2002.company.com ansible_host=10.1.1.202 

这是YAML。

- name: Generate dns hosts files on americas servers
  hosts: dns_server_america
  tasks:
  - template: src=templates/hosts.j2 dest=/tmp/hosts.txt
    vars:
      GROUP_NAME: america

- name: Generate dns hosts files on asia servers
  hosts: dns_server_asia
  tasks:
  - template: src=templates/hosts.j2 dest=/tmp/hosts.txt
    vars:
      GROUP_NAME: asia

这是jinja2模板。

{% for host in groups[GROUP_NAME] %}
{{ host }} {{ hostvars[host]['ansible_host'] }}
{% endfor %}

我们为什么不在jinja2模板中引用[host][GROUP_NAME]。 Ansible说,将变量放在方括号中时,应该将它们用引号引起来。当我用引号将其括起来时,会收到一条错误消息“未定义的变量”,当我删除引号时,便能够成功运行该剧本。请告知,我可能遗漏了一些东西,或者我对变量的理解理论可能是错误的。

ansible jinja2 ansible-inventory ansible-template
1个回答
0
投票

Q:“为什么不在jinja2模板中引用[host]和[GROUP_NAME]?”

A:主机GROUP_NAME都是变量。索引中需要变量的值。如果变量名用'host''GROUP_NAME'引起来,则使用变量名代替变量的值。

© www.soinside.com 2019 - 2024. All rights reserved.