我有一个像这样的模板:
listen {{haproxy_app_name}} 0.0.0.0:514
mode {{haproxy_mode}}
balance {{haproxy_algorithm}}
option httpclose
option forwardfor
{% for server in haproxy_backend_servers %}
server {{server.name}} {{server.ip}}:{{server.port}} {{server.paramstring}}
{% endfor %}
我正在尝试用引用字典清单中主机列表的字典列表填充haproxy_backend_servers
,但是在语法上苦苦挣扎。我不确定这是否是由于对Jinja,Ansible或YAML缺乏了解。
我没有动态清单,我所拥有的主机数量超出了我手动对其进行重复操作的范围。
- hosts: balancer
vars:
haproxy_app_name: balancer
haproxy_mode: tcp
haproxy_algorithm: roundrobin
haproxy_backend_servers:
- name: listener
ip: "{{ item }}"
port: 514
paramstring: cookie A check
with_items: "{{ groups.listener }}"
每次我尝试运行它时,都会失败并显示FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'item' is undefined"}
。 (with_items
的缩进似乎并没有影响该错误;它的粘贴方式只是我中断的地方。)
在这种情况下可以这样做吗?有更好的方法吗?
答案 0 :(得分:0)
我注意到模板可以访问所有变量,而不仅仅是在任务中声明的变量,因此我修改了模板:
{% for server in groups.listener %}
server listener {{server}}:514 cookie A check
{% endfor %}
尽管还是可以通过var做到这一点,但仍然感到好奇。
答案 1 :(得分:0)
您可以创建模板变量,并在pre_tasks中使用set_fact。
示例:
在此示例中,我想用清单(backend_db节点)填充pgpool2_backends列表变量。
为此,我创建了一个模板变量(pgpool2_backend_template),然后使用set_fact和pre_tasks中的项目填充pgpool2_backends。
Window {
Image {
id: needle
property real angle
source: "needle.png"
transformOrigin: Item.Bottom
rotation: needle.angle
}
onFrameSwapped: {
needle.angle = new_angle_from_usb;
update();
}
}