-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support plugins #30
Support plugins #30
Conversation
351c621
to
b26a81c
Compare
dce3e5a
to
4aa31f0
Compare
src/plugins/index.ts
Outdated
export const ProviderPlugins = [ | ||
relationPlugin, | ||
modelPlugin, | ||
] as IProviderPlugin[]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里需要 assert types 的原因是?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
因为这两个 Plugin 实际上返回的是两种类型,一个是带relation的Unstructured,另一个是 Model,所以这里要把它们as成一个比较抽象的 IProviderPlugin,也就是返回Unstructured的。在插件内可以定义具体的类型,在插件外应该假设插件返回的都是共通的Unstructured。
8abd45d
to
9810f61
Compare
@Yuyz0112 @MrWindlike 已将 plugins 移动到 d2 中。这个 pr 只有 plugins 机制了。请再 review 一下 |
LGTM |
改动
添加到 K8s 的部分资源的 Model。(移动到了 d2 中)添加了 ModelPlugin。完善了 RelationPlugin。添加了 Plugin 的单测。review 建议
虽然代码新增很多,但大多数是mock数据和复制的代码。主要关注下面文件即可
Plugin 机制
Plugin作用是在用过 API 获取到数据后,对数据进行一些格式化。经过 Plugin 处理后的数据会进入到 GlobalStore 中缓存。
目前有两个Plugin,分别是ModelPlugin和RelationPlugin。
Plugin 的实现
Plugin的接口如下。主要需要实现
processData
和processItem
。对于格式化后返回的类型,接口中定义的是Unstructured & Output
,也就是说无论返回什么类型,都要能够兼容Unstructured
。restoreItem
和restoreData
可能相对不重要,因为可以通过 model 的restore
方法直接获得原始数据(rawYaml),以后可能会移除。Model
Model 是格式化后的 K8s 资源数据结构,用于 UI 展示。它会:
Model 的继承关系
按照K8s资源的数据结构,大概是这样的关系。
Model 的实现
Model 有一些基本规则:
最基础的K8s资源长这样。