Skip to content

Плагин мастера настройки

Добавляет поля конфигурации вашего плагина в интерактивный TUI-мастер terraci init. Пользователи настраивают плагин через форму вместо ручного редактирования YAML.

Реализация

Реализуйте InitContributor из pkg/plugin/initwiz:

go
import "github.com/edelwud/terraci/pkg/plugin/initwiz"

func (p *Plugin) InitGroups() []*initwiz.InitGroupSpec {
    return []*initwiz.InitGroupSpec{
        {
            Title:    "Slack Notifications",
            Category: initwiz.CategoryFeature,
            Order:    300,
            Fields: []initwiz.InitField{
                {
                    Key:         "slack.enabled",
                    Title:       "Enable Slack notifications?",
                    Type:        initwiz.FieldBool,
                    Default:     false,
                },
            },
        },
        {
            Title:    "Slack Settings",
            Category: initwiz.CategoryDetail,
            Order:    300,
            ShowWhen: func(s *initwiz.StateMap) bool {
                return s.Bool("slack.enabled")
            },
            Fields: []initwiz.InitField{
                {
                    Key:     "slack.channel",
                    Title:   "Channel",
                    Type:    initwiz.FieldString,
                    Default: "#terraform-deploys",
                },
                {
                    Key:     "slack.on_failure",
                    Title:   "Notify on failure",
                    Type:    initwiz.FieldSelect,
                    Default: "always",
                    Options: []initwiz.InitOption{
                        {Label: "Always", Value: "always"},
                        {Label: "Only on failure", Value: "failure"},
                    },
                },
            },
        },
    }
}

func (p *Plugin) BuildInitConfig(state *initwiz.StateMap) *initwiz.InitContribution {
    if !state.Bool("slack.enabled") {
        return nil
    }
    return &initwiz.InitContribution{
        PluginKey: "slack",
        Config: map[string]any{
            "enabled": true,
            "channel": state.String("slack.channel"),
        },
    }
}

Категории форм

КатегорияОтображениеДля чего
CategoryProviderОтдельная группа с ShowWhenCI-настройки (image, runner)
CategoryPipelineОбъединяется в группу "Pipeline"Поведение пайплайна (plan_enabled)
CategoryFeatureОбъединяется в группу "Features"Переключатели фич
CategoryDetailОтдельная группа с ShowWhenДетальные настройки включённых фич

Типы полей

ТипВиджетЗначение
FieldStringТекстовый вводstring
FieldBoolПереключательbool
FieldSelectВыпадающий списокstring

Порядок

Order управляет позицией группы. Встроенные плагины: 100-202. Используйте 300+ для кастомных.

StateMap

go
state.String("key")     // строка или ""
state.Bool("key")       // bool или false
state.Get("key")        // any или nil
state.Provider()        // state.String("provider")
state.Binary()          // state.String("binary")

См. также

Released under the MIT License.