我试图在Ansible中为负载均衡器编写一个nginx模板。如果我有5个应用程序服务器,那么上游服务器行必须写入5次,每次绑定端口增加1.像这样:
upstream app_servers {
server 127.0.0.1:4000 fail_timeout=0;
server 127.0.0.1:4001 fail_timeout=0;
server 127.0.0.1:4002 fail_timeout=0;
server 127.0.0.1:4003 fail_timeout=0;
server 127.0.0.1:4004 fail_timeout=0;
}
我将应用程序服务器的数量作为变量。如何在ansible模板中编写这种循环?我发现" with_indexed_items"在ansible docs中,但我不确定它是否符合这种情况。
答案 0 :(得分:4)
with_indexed_items
仅在您想要创建5个不同文件时才有用。由于您需要将此文件放在一个文件中,而该文件很可能是通过template task编写的,因此您可以在一个范围内循环:
upstream app_servers {
{% for number in range(5) %}
server 127.0.0.1:400{{ number }} fail_timeout=0;
{% endfor %}
}
我将应用程序服务器的数量作为变量。
您可以在上面的范围定义中使用该变量range(your_variable)
如果没有改进,这显然只能工作到9,否则您将在 40010 之上创建端口。
Jinja loops也有一个索引属性(实际上有两个,一个从0开始,一个从1开始)如果你想以某种方式需要遍历应用程序服务器(例如在应用程序中循环主机)库存组)你可以使用这个索引。
upstream app_servers {
{% for something in whatever %}
server 127.0.0.1:400{{ loop.index0 }} fail_timeout=0;
{% endfor %}
}
答案 1 :(得分:0)
您可能希望用户Jinja template
并在其中添加一些逻辑来迭代一组服务器。
看看:
ansible模板模块http://docs.ansible.com/ansible/template_module.html
Jinja for loop http://jinja.pocoo.org/docs/dev/templates/