Spec-Zone.ru › Caddy

Написание адаптеров конфигурации

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

Если адаптер для языка/синтаксиса/формата, которые вы предпочитаете, еще не существует, вы можете написать его!

Шаблон

Вот шаблон, с которого вы можете начать:

package myadapter
import (
	"fmt"
	"github.com/caddyserver/caddy/v2/caddyconfig"
)
func init() {
	caddyconfig.RegisterAdapter("adapter_name", MyAdapter{})
}
// MyAdapter adapts ____ to Caddy JSON.
type MyAdapter struct{
}
// Adapt adapts the body to Caddy JSON.
func (a MyAdapter) Adapt(body []byte, options map[string]interface{}) ([]byte, []caddyconfig.Warning, error) {
	// TODO: parse body and convert it to JSON
	return nil, nil, fmt.Errorf("not implemented")
}
  • См. godoc для RegisterAdapter()
  • См. godoc для 'Интерфейса адаптера'

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

Обратите внимание, что хотя адаптеры конфигурации являются плагинами Caddy, они не являются модулями Caddy, потому что они не интегрируются в часть конфигурации (но они появятся в list-modules для удобства). Таким образом, у них нет методов Provision() или Validate(), или они не следуют остальному жизненному циклу модуля. Им нужно только реализовать интерфейс Adapter и быть зарегистрированными как адаптеры.

При заполнении полей конфигурации, которые являются типами json.RawMessage (т.е. полями модулей), используйте функции JSON() и JSONModuleObject():

  • caddyconfig.JSON() используется для сериализации значений модулей без встроенного имени модуля. (Часто используется для полей ModuleMap, где имя модуля является ключом карты.)
  • caddyconfig.JSONModuleObject() используется для сериализации значений модулей с добавлением имени модуля в объект. (Используется практически во всех остальных случаях.)

Типы серверов Caddyfile

Также можно реализовать собственный формат Caddyfile. Адаптер Caddyfile — это одно реализация адаптера, и его значение по умолчанию для «типа сервера» — HTTP, но он поддерживает альтернативные «типы серверов» при регистрации. Например, HTTP Caddyfile регистрируется следующим образом:

func init() {
	caddyconfig.RegisterAdapter("caddyfile",  caddyfile.Adapter{ServerType: ServerType{}})
}

Вы бы реализовали интерфейс caddyfile.ServerType и соответствующим образом зарегистрировали свой собственный адаптер.

© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/extending-caddy/config-adapters

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API