【问题标题】:how to use variable in jinja2 template如何在jinja2模板中使用变量
【发布时间】:2019-08-29 02:27:36
【问题描述】:

发生了什么

我有带有以下代码的 ansible 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”变量?? 此外,在inventory文件夹的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 文件中获取这个变量并遍历数组以获取每个主机的详细信息...是否正确?

请建议我在哪里失踪。我需要在其他地方定义这个变量吗?那是什么位置呢?

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

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

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

    引用Special Variables

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

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多