Шаблон консула - условие «Если сервис существует»?

Я только что унаследовал установку прокси/сервера приложений 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 имел одну конфигурацию для сценариев, в которых существуют вышестоящие серверы, и другую настройку на случай непредвиденных обстоятельств, которая отображает страницы ошибок, когда вышестоящие серверы не существуют. Я все еще осваиваю консул-шаблон и не видел примеров, демонстрирующих синтаксис такой логики. Любая помощь?

Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
2
0
1 114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добиться этого, сохранив результат поиска service в переменной, а затем используя условное выражение, которое выводит восходящий блок только в том случае, если переменная не пуста.

{{- $upstream_services := service "my-app-servers" -}}
{{- if $upstream_services -}}
upstream appservers {
  {{- range $upstream_services }}
     server {{ .Address }}.{{ .Port }};
  {{- end }}
}
{{- end }}

Другие вопросы по теме