Skip to content

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

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

По-умолчанию, мы предоставляем человекочитаемый формат конфигурационного файла, ориентируясь на тех системных администраторов,которые привыкли редактировать текстовые конфигурационные файлы руками. Flussonic запустится в случае, когда формат невалидный (например при его сохранении произошла ошибка, или какая-то опция стала неподдерживаемой после обновления версии ПО) и перейдет в аварийный режим.

Валидация до старта сервера не имеет смысла, поскольку система управления сервисами 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 схеме;
  • проверка внешних условий и тех, которые нельзя выразить в схеме, например целостность сертификатов

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

# 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"]}