2016-05-02 2 views
0

Я пытаюсь написать шаблон nginx для балансировки нагрузки в Ansible. Если у меня есть 5 серверов приложений, а затем вверх по течению линии сервер должен быть записан в 5 раз, каждый раз увеличивает значение привязки порта на 1. Как это:Ansible counter loop

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; 
} 

У меня есть количество серверов приложений в качестве переменной. Как я могу написать такой цикл в шаблоне? Я нашел «with_indexed_items» в недоступных документах, но я не уверен, что он подходит для этого случая.

ответ

2

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 или вы будете создавать порты выше .

Jinja loops также имеют свойство индекса (на самом деле два, один начиная с 0 и один начиная с 1). Если вам нужно было бы зациклиться на серверах приложений (например, перебрать хосты в группе инвентаризации приложений) вы можете использовать этот индекс.

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

Спасибо @udondan! Проблема с диапазоном решает проблему. – raiblue

+0

Мое приложение работает как рабочие, и я определяю только первый порт для привязки, а рабочие привязываются к портам постепенно. Итак, написав шаблон, как показано ниже, работает для меня: upstream app { {% для числа в диапазоне (app_workers)%} server 127.0.0.1: {{app_first_port + number}} fail_timeout = 0; {% endfor%} } – raiblue