Визуализируйте файл yaml, используя консул-шаблон
У меня есть требование заполнить файл конфигурации значениями, когда экземпляр загружается. Чтобы добиться этого, я использую консул (для хранения ключей / значений) и консул-шаблон для отображения правильных значений во время выполнения. Я новичок в консуле и консул-шаблоне и обладаю очень базовыми знаниями по этому вопросу.
Вот параметр (ips) в моем Yaml, который нужно заполнить:
- function: get_logistics
parameters:
- ips:
Так вот как должна быть логика:
При запуске процесса cons-шаблона он должен проверить, существует ли значение в ключе консула (env_var1/env_var2/env_var3/tokens). Если значение существует, семена должны иметь это значение. Если значение не существует, он должен запросить каталог услуг и получить первые 3 IP-адреса, которые проходят проверку работоспособности службы. Если он не находит никаких IP-адресов, он должен заполнить семена своим собственным IP-адресом.
Когда значение найдено в ключе на консуле. Выход должен быть:
- function: get_logistics
parameters:
- ips: '10.x.x.x,10.y.y.y'
env_var1 / env_var2 / env_var3 / ips: '10.xxx,10.yyy'
Когда не найдено в ключе на консуле, но найдено в проверке работоспособности. Выход должен быть:
- function: get_logistics
parameters:
- ips: '10.x.x.x,10.y.y.y,10.z.z.z'
"0.xxx,10.yyy,10.zzz" - это IP-адреса, которые проходят проверку работоспособности службы.
Когда IP-адрес не найден в каталоге услуг. Ips должен быть заполнен собственным IP.
- function: get_logistics
parameters:
- ips: '10.a.a.a'
Это код, который я пробовал:
- function: get_logistics
parameters:
{{$x := env "var1"}}
{{$y := env "var2"}}
{{$z := env "var3"}}
{{$keyname := printf "%s/%s/%s/ips" $x $y $z}}
{{if key $keyname}}
- ips: "{{key $keyname}}"
{{else}}
{{if service "shared|passing"}}
- ips: "{{range $index, $service := service "$z"}}{{if ne $index 0}},{{end}}{{.Address}}{{end}}"
{{else}}
- ips: "{{ env "IP_ADDRESS" }}"
{{end}}
{{end}}
Вывод, который я получаю, когда в ключе есть значение:
- function: get_logistics
parameters:
- ips: "10.x.x.x,10.y.y.y"
Я хочу получить следующий вывод (без пустых строк после 'parameters:'):
- function: get_logistics
parameters:
- ips: "10.x.x.x,10.y.y.y"
Пожалуйста, дайте мне знать, если есть лучший способ добиться этого. Также я хотел бы, чтобы ips заполнялся в одном и том же месте в файле yaml для всех возможных сценариев (то есть параметр ips должен быть ниже строки "parameter:"). Спасибо!