This commit is contained in:
guoxudong
2020-06-05 09:42:05 +08:00
parent 8ce637a004
commit 8f0900f95e
3 changed files with 16 additions and 17 deletions

View File

@@ -2,9 +2,9 @@
本教程只是一个快速开始的示例,完整的插件文档请看:[kustomize 插件](plugins.md)
本示例将使用 bash 编写了一个傻瓜 _exec_ 插件,用来生成一个 `ConfigMap`
本示例将使用 bash 编写了一个简单的 _exec_ 插件,用来生成一个 `ConfigMap`
在不破坏当前设置的情况下,尝试本教程
尝试本教程不会破坏你的当前设置。
#### 环境要求
@@ -13,8 +13,7 @@
* `curl`
* `Go 1.13`
## 定义一个工作空间
## 创建一个工作空间/目录
```
DEMO=$(mktemp -d)
@@ -147,7 +146,7 @@ mkdir -p $MY_PLUGIN_DIR
插件的目录结构为: `apiVersion 的 value/小写 kind 的 value`
插件拥有自己的目录不但可以保存插件代码,还可以保存测试以及任何可能需要的补充数据文件。
插件拥有自己的目录不但可以保存插件代码,还可以保存测试代码以需要的补充数据文件。
## 编写插件
@@ -191,7 +190,7 @@ mkdir -p $DEMO/bin
mv kustomize $DEMO/bin
```
## 检查这个目录
## 检查目录结构
```
tree $DEMO

View File

@@ -5,7 +5,7 @@
# Go plugin 注意事项
_Go 插件_由 Go [plugin package] 描述的编译器,需要特殊的构建标志,不能单独运行,必须加载到正在运行的 Go 程序中。
_Go 插件_一个编译产品/组件,其定义见 [plugin package],需要特殊的构建标志,不能单独运行,必须加载到正在运行的 Go 程序中。
> 用 Go 编写的普通程序可以作为 _exec 插件_但是不能作为 _Go 插件_。
@@ -19,9 +19,9 @@ Go 插件编译会创建一个 [ELF] 格式的 `.so` 文件,根据定义,该
主程序 ELF 和插件 ELF 的编译条件(软件包依赖项的版本 `GOOS``GOARCH`)之间的偏移会导致插件加载失败,并带有无用的错误消息。
Exec 插件也会缺乏出处,但不会因编译不正确而失败。
Exec 插件也会缺乏来源,但不会因编译不正确而失败。
在任何情况下,共享插件的最好方法是使用某种 _捆绑包_git repo URL、git 存档文件、tar 包等),其中包含可在下解包的源代码,测试和相关数据 `$XDG_CONFIG_HOME/kustomize/plugin`
在任何情况下,共享插件的最好方法是使用某种 _捆绑包_git repo URL、git 存档文件、tar 包等),其中包含可解包至 `$XDG_CONFIG_HOME/kustomize/plugin` 的源代码,测试和相关数据
对于 Go 插件,使用共享插件的最终用户 _必须同时编译 kustomize 和 plugin_
@@ -47,15 +47,15 @@ go build -buildmode plugin \
### 安全
Go 插件开发者可以操作与原生 kustomize 操作相同的 API可确保某些语义、变量和检查等一致。通过stdin/stdout 处理此问题的 exec 插件子流程将使下游转换器和使用者解决问题变得更容易
Go 插件开发者可以操作与原生 kustomize 操作相同的 API可确保某些语义、变量和检查等一致。exec 插件子进程通过 stdin/stdout 处理这些问题,但对于下游的转化器和使用者来说,会更容易把事情搞砸
关键点:如果插件通过 kustomize 提供的文件 `Loader` 接口读取文件,则会受到 kustomize 文件加载限制的约束。当然,除了代码审之外,没有什么可以阻止 Go 插件导入 io 包并执行其所需的任何操作。
关键点:如果插件通过 kustomize 提供的文件 `Loader` 接口读取文件,则会受到 kustomize 文件加载限制的约束。当然,除了代码审之外,没有什么可以阻止 Go 插件导入 io 包并执行其所需的任何操作。
### Debugging
Go 插件开发者可以在功能测试中运行插件时,在 _本地_ 调试插件,并在插件内部和其他位置设置断点。
为了获得两全其美的方式(共享性和安全性),开发人员可以编写一个 `.go` 程序作为 _exec 插件_但可以通过处理该程序 `go generate` 来发出 Go 插件(反之亦然)。
为了获得两全其美的方式(共享性和安全性),开发人员可以编写一个 `.go` 程序作为 _exec 插件_同时可以被 `go generate` 程序处理生成 Go 插件(反之亦然)。
### 贡献单元化

View File

@@ -8,9 +8,9 @@
请务必阅读 [Go plugin 注意事项](goPluginCaveats.md)。
该示例使用 Go 插件`SopsEncodedSecrets` 该插件位于 [sopsencodedsecrets repository]中。这是一个进程内的 Go 插件,而不是恰巧用 Go 编写的 exec 插件(这是 Go 作者的另一种选择)。
该示例使用 Go 插件 `SopsEncodedSecrets`该插件位于 [sopsencodedsecrets repository]中。这是一个进程内的 Go 插件,而不是恰巧用 Go 编写的 exec 插件(这是 Go 作者的另一种选择)。
在不破坏当前设置的情况下,尝试本教程
尝试本教程不会破坏你的当前设置。
#### 环境要求
@@ -28,7 +28,7 @@
* Google cloud (gcloud) 安装
* 具有 KMS 权限的 Google帐户
## 定义一个工作空间
## 创建一个工作空间/目录
```shell
# 将这些目录分开,以免造成 DEMO 目录的混乱。
@@ -68,7 +68,7 @@ PLUGIN_ROOT=$DEMO/kustomize/plugin
并在下面的命令行中临时设置 `XDG_CONFIG_HOME`
### What apiVersion and kind?
### 使用什么 apiVersion kind
在 kustomize 插件的开发时,插件代码不关心也不知道配置文件中的 `apiVersion``kind`
@@ -178,7 +178,7 @@ generators:
EOF
```
现在生成真实的加密数据
接下来生成真实的加密数据。
### 确保您已安装加密工具