如何在Jinja2模板中使用变量

时间:2019-08-29 02:27:36

标签: ansible jinja2

正在发生的事情

我有一个带有以下代码的jinja2模板

nodes:
{% for host in abc_masters %}
- address: "{{ abc_ip_address }}"
  port: "22"
  role:
    - controlplane
    - etcd
  hostname_override: "{{ inventory_hostname }}"
  user: {{ admin_user }}
  docker_socket: /var/run/docker.sock
  ssh_key_path: {{ ssh_key_path }}
  labels: {}
{% endfor %}

问题是什么

当我运行ansible-playbook命令时,出现以下错误。

  

致命:[abc-worker-3]:失败! => {       “已更改”:错误,       “ msg”:“ AnsibleUndefinedVariable:'abc_masters'未定义”}

现在,没有在哪里定义“ abc_masters”变量? 此外,在清单文件夹的hosts文件中,已经提到了abc_masters ...

[abc_masters]
abc-master-0 ansible_ssh_user=administrator  ansible_host=192.168.160.101 ansible_port=22 abc_ip_address=192.168.160.101
abc-master-1 ansible_ssh_user=administrator  ansible_host=192.168.160.102 ansible_port=22 abc_ip_address=192.168.160.102

期望

我的理解是,jinja2模板应该从hosts文件中获取此变量,并在数组上进行迭代以获取每个主机的详细信息……这是正确的吗?

请指出我想念的地方。我是否需要在其他地方定义此变量?那那个位置是什么?

1 个答案:

答案 0 :(得分:2)

abc_masters 是组的名称。使用特殊变量 groups 迭代该组中的主机

{% for host in groups['abc_masters'] %}

引用Special Variables

  

组:包含清单中所有组的字典/地图,每个组都有属于它的主机列表