Я только что унаследовал установку прокси/сервера приложений Nginx, которая использует Consul и Consul Template для обнаружения и регистрации службы. Прокси-сервер Nginx имеет файл конфигурации с такой записью для регистрации нижестоящих серверов приложений:
<snip>
upstream appservers {
{{ range service "my-app-servers" }}
server {{ .Address }}.{{ .Port }};
{{ end }}
}
<snip>
У меня consul-template
работает в фоновом режиме, чтобы отслеживать любые обновления my-app-servers
, соответствующим образом обновлять файл nginx.conf
, а затем перезагружать конфигурацию nginx. Все это прекрасно работает, и мы можем добавлять и удалять серверы приложений по мере необходимости. Тем не менее, если есть сценарий, в котором у нас нет доступных серверов приложений, мы получим пустой блок upstream
, и это приведет к сбою перезагрузки nginx.
Есть ли способ в шаблоне консула иметь логику "if service my-app-servers exists, then..."
и "if not, then..."
? Я хотел бы, чтобы мой файл nginx.conf
имел одну конфигурацию для сценариев, в которых существуют вышестоящие серверы, и другую настройку на случай непредвиденных обстоятельств, которая отображает страницы ошибок, когда вышестоящие серверы не существуют. Я все еще осваиваю консул-шаблон и не видел примеров, демонстрирующих синтаксис такой логики. Любая помощь?
Вы можете добиться этого, сохранив результат поиска service
в переменной, а затем используя условное выражение, которое выводит восходящий блок только в том случае, если переменная не пуста.
{{- $upstream_services := service "my-app-servers" -}}
{{- if $upstream_services -}}
upstream appservers {
{{- range $upstream_services }}
server {{ .Address }}.{{ .Port }};
{{- end }}
}
{{- end }}