ドキュメント
a project

設定アダプターの記述

さまざまな理由で、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")
}

返される 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 インターフェイス を実装して、それに応じて独自のアダプターを登録する必要があります。