Skip to content

Валидация конфига

Flussonic выполняет валидацию конфигурационного файла по тем же правилам, что и валидацию API вызовов: по одной и той же OpenAPI схеме. По умолчанию мы предоставляем человекочитаемый формат конфигурационного файла, ориентируясь на тех системных администраторов, которые привыкли редактировать текстовые конфигурационные файлы руками.

При каждом запуске, а также при изменении конфигурационного файла Flussonic выполняет проверку конфигурации на наличие проблем. Если при сохранении конфигурационного файла произошла ошибка или какая-то опция стала неподдерживаемой после обновления версии ПО, то Flussonic все равно запустится, но перейдет в аварийный режим. О работе в аварийном режиме свидетельствует то, что в UI доступно только страницы Config и Support. Кроме того, о состоянии конфига можно судить по параметрам streamer_status (код ошибки) и text_alerts (текстовое описание ошибки) в ответе на запрос Flussonic-API: GET /streamer/api/v3/config/stats.

Валидация до старта сервера не имеет смысла, поскольку система управления сервисами systemd не поддерживает ситуацию при которой сервис не может работать из-за невалидного конфига и никак не сигнализирует оператору системы об этой ситуации. Т.е. у вас просто будет рестартиться сервис без какой-либо внятной индикации.

В случае, когда конфигурация Flussonic происходит не руками человека, а генерируется из внешней системы, задача валидации конфига стоит очень остро, ведь надо как-то проверить корректность работы генератора и получается, что при генерации текстового формата единственный способ — сгенерировать, перезапустить сервер и выяснить, что конфиг был невалидный.

Это решение, конечно, не подходит для работы, поэтому мы рекомендуем использование JSON формата для конфига при генерации сторонними средствами.

Т.е. суть подхода:

  • формируете конфиг по указанной нами OpenAPI схеме (формат, совместимый с JSON schema);
  • генерируете его JSON-представление;
  • валидируете любым внешним валидатором по схеме;
  • пишете результирующий конфиг в /etc/flussonic/flussonic.conf;
  • запускаете сервер.

Схема конфига JSON

Вы можете взять актуальную OpenAPI схему для Flussonic в одном из следующих мест:

В схеме определен тип #/components/schemas/server_config, именно по нему валидируется конфиг при чтении.

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

Для того, чтобы подсмотреть, как выглядит JSON-представление конфига, можно воспользоваться имеющейся утилитой:

# /opt/flussonic/bin/validate_config -j
{"listeners":{"http":[{"port":80}]}}

Для работы с JSON рекомендуем использовать утилиту jq:

# /opt/flussonic/bin/validate_config -j | jq
{
  "listeners": {
    "http": [
      {
        "port": 80
      }
    ]
  }
}

Выше вы видите представление простейшего конфига:

http 80;

Валидация конфига JSON

Валидация конфига происходит в два этапа:

  • формальная проверка по JSON Schema;
  • проверка внешних условий и тех, которые нельзя выразить в схеме, например целостность сертификатов.

Для валидации целостности конфига можно воспользоваться внешней утилитой для валидации по схеме, а можно той, которую мы предлагаем:

# cat /etc/flussonic/flussonic.conf
htp 80;
# /opt/flussonic/bin/validate_config -j
{"col":1,"config":{},"detail":"htp","error":"unknown_command","line":1,"path":[]}

Аналогично будет с JSON-конфигом:

# cat /etc/flussonic/flussonic.conf
{"listeners":{"http":[{"port":80,"flag":true}]}}
# /opt/flussonic/bin/validate_config -j
{"error":"unknown_key","path":["server_config","listeners","http",0,"flag"]}