创建一个插件

0 感谢你的贡献!

首先,请阅读我们的贡献指引文档。

1 自动建立新插件的代码框架

运行dtm develop create-plugin --name=YOUR-PLUGIN-NAME ,dtm将自动生成以下文件。

/cmd/plugin/YOUR-PLUGIN-NAME/main.go

这是该插件代码的唯一主要入口。

你不需要修改这个文件。如果你觉得自动生成的这个文件有问题,你可以创建一个PR来直接修改模板

/docs/plugins/YOUR-PLUGIN-NAME.md

这是自动生成的插件的文档。

虽然dtm的目的就是自动化,但它并不能魔法般的生成文档。你需要自己编写自己想要创建的这个插件的文档。

/internal/pkg/plugin/YOUR-PLUGIN-NAME/

请在这里编写插件的主要逻辑。

可以查看我们的Standard Go Project Layout文件,了解关于项目布局的详细说明。

2 接口

2.1 定义

每个插件都需要实现pluginengine中定义的所有接口。

目前,有4个接口,可能会有变化。目前,这4个接口是。

2.2 返回值

Create, ReadUpdate 方法返回两个值 (statemanager.ResourceStatus, error)。第一个是 “状态”,第二个是 “错误”。

Delete 接口返回两个值 (bool, error)。如果没有错误,它应当返回 (true, nil);否则应返回 (false, error)

3 插件是如何工作的?

DevStream是使用go plugin来实现自定义插件的。。

当你执行一个调用任何接口(Create, Read, Update, Delete)的命令时,DevStream的pluginengine会调用plugin.Lookup(“DevStreamPlugin”)函数来加载插件,获得实现DevStreamPlugin接口的变量DevStreamPlugin,然后你就可以调用相应的插件接口。所以我们不建议你直接修改/cmd/plugin/YOUR-PLUGIN-NAME/main.go文件,因为该文件是根据接口定义自动生成好的。

注意:/cmd/plugin/YOUR-PLUGIN-NAME/main.go文件中的main()不会被执行,它只是用来避免 golangci-lint 错误。