Loops 可变计数器环路

Loops 可变计数器环路,loops,ansible,ansible-playbook,Loops,Ansible,Ansible Playbook,我正在尝试为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_time

我正在尝试为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模板中编写这种循环?我在ansible文档中找到了带有索引的项目,但我不确定它是否适合这种情况。

您可能希望使用Jinja模板,并在其中添加一些逻辑来迭代服务器集

看看:

易变模板模块


Jinja for loop

您可能希望使用Jinja模板,并在其中添加一些逻辑来迭代一组服务器

看看:

易变模板模块

只有当您想创建5个不同的文件时,带有索引项的Jinja for循环才会有用。由于您需要在单个文件中使用此文件,而该文件很可能是通过写入的,因此您可以在一个范围内循环:

upstream app_servers {
{% for number in range(5) %}
  server 127.0.0.1:400{{ number }} fail_timeout=0;
{% endfor %}
}
我将应用程序服务器的数量作为一个变量

您可以在上面的范围定义中使用该变量,rangeyour_变量

如果没有改进,这显然只能在9之前工作,或者您将创建40010以上的端口

Jinja也有一个索引属性,实际上是两个,一个从0开始,一个从1开始,如果您需要在应用程序服务器上循环,例如在应用程序资源清册组中循环主机,那么您可以使用此索引

upstream app_servers {
{% for something in whatever %}
  server 127.0.0.1:400{{ loop.index0 }} fail_timeout=0;
{% endfor %}
}
如果要创建5个不同的文件,则使用_索引_项才有用。由于您需要在单个文件中使用此文件,而该文件很可能是通过写入的,因此您可以在一个范围内循环:

upstream app_servers {
{% for number in range(5) %}
  server 127.0.0.1:400{{ number }} fail_timeout=0;
{% endfor %}
}
我将应用程序服务器的数量作为一个变量

您可以在上面的范围定义中使用该变量,rangeyour_变量

如果没有改进,这显然只能在9之前工作,或者您将创建40010以上的端口

Jinja也有一个索引属性,实际上是两个,一个从0开始,一个从1开始,如果您需要在应用程序服务器上循环,例如在应用程序资源清册组中循环主机,那么您可以使用此索引

upstream app_servers {
{% for something in whatever %}
  server 127.0.0.1:400{{ loop.index0 }} fail_timeout=0;
{% endfor %}
}

谢谢你@udondan!在范围内循环解决了这个问题。我的应用程序作为工作程序运行,我只定义要绑定的第一个端口,工作程序以增量方式绑定到端口。因此,像下面这样编写模板对我来说很有用:上游应用程序{{%for number in rangeapp_workers%}服务器127.0.0.1:{{app_first_port+number}失败{u timeout=0;{%endfor%}谢谢@udondan!在范围内循环解决了这个问题。我的应用程序作为工作程序运行,我只定义要绑定的第一个端口,工作程序以增量方式绑定到端口。因此,像下面这样编写模板对我来说很有用:上游应用程序{{%for number in rangeapp_workers%}服务器127.0.0.1:{{{app_first_port+number}fail_timeout=0;{%endfor%}