設定アダプターの記述
さまざまな理由で、JSON でない形式を使用して Caddy を設定したい場合があります。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")
}
RegisterAdapter()
の Godoc を参照してください。アダプター
インターフェイスの Godoc を参照してください。
返される JSON はインデントしないでください。常にコンパクトにする必要があります。呼び出し元は必要に応じていつでも飾り立てることができます。
設定アダプターは Caddy のプラグインであることに注意してください。ただし、設定の一部に統合されないため、Caddy のモジュールではありません(ただし、利便性のために list-modules
に表示されます)。そのため、Provision()
や Validate()
メソッドはなく、モジュールのライフサイクルの残りに従いません。アダプター
インターフェイスを実装してアダプターとして登録する必要があります。
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
インターフェイス を実装して、それに応じて独自のアダプターを登録する必要があります。