Я настраиваю кластер Redis для своих веб-серверов, который я хочу, чтобы один из них был ведущим, а остальные три - рабами.
В связи с этим у меня должно быть два разных файла .config для разных серверов: ведомые с линией slaveof <host> <port>
и ведущий без этой линии.
Так было бы что-то вроде:
## master_server /etc/redis.conf
bind 0.0.0.0
port 6379
etc...
## slave_server1 /etc/redis.conf
bind 0.0.0.0
port 6379
slaveof masters_ip_address 6379
etc...
## slave_server2 /etc/redis.conf
bind 0.0.0.0
port 6379
slaveof masters_ip_address 6379
etc...
## slave_server3 /etc/redis.conf
bind 0.0.0.0
port 6379
slaveof masters_ip_address 6379
etc...
Вот как я пытался это сделать:
Сначала я установил две переменные в основном файле по умолчанию:
## /defaults/main.yml
redis_slave: 'masters_ip_address 6379'
redis_master: ''
А затем добавил переменную false
в мои group_vars , которая имеет приоритетное значение, поэтому все серверы унаследовали бы это значение, а также добавила одну и ту же переменную в host_vars соответствует серверу, которым я хочу быть главным, но true
, поэтому только этот сервер будет иметь значение, отличное от переменной slaveof
:
## /group_vars/webservers.yml
master: false
## /host_vars/master_server.yml
master: true
И в моем шаблоне я реализую логику if-else для установки правильных значений:
## redis.conf.j2
{% if master == false %}
{% set slaveof = redis_slave %}
{% else %}
{% set slaveof = redis_master %}
{% endif %}
slaveof {{ slaveof }}
Но когда я пытаюсь протестировать этот playbook, он устанавливает одинаковый файл .config для всех серверов. Я что-то упустил или есть другой способ сделать это проще?