- Note
- 这里的尝试是在 Istio 0.7.1 版本时做的,后续新的版本可能会有差异。
这里描述怎样弄一个自定义的 Template。
我的 adapter 名叫 tsfauth,内置的 template 没有合适的,我要弄一个跟它配套使用的 template。
先给 template 建个文件夹:
mkdir mixer/adapter/tsfauth/template/tsfauthcheck
在 template
目录下又加了一层 tsfauthcheck
目录,是因为 Mixer 的生成代码不好(指下面的 mixgenbootstrap
),如果不加 tsfauthcheck
目录,生成的 mixer/template/template.gen.go
里面会有 import 冲突。servicecontrol adapter 也是同样的原因加了最后的目录。
模板名用 tsfauthcheck
而不用 tsfauth
,是因为 Mixer 在解析配置文件时,template 和 handler 是用的同个「命名空间」的。如果两者都用同个名字 tsfauth
,这时你在 operatorconfig 里面写 kind: tsfauth
,Mixer 会把它当作是 handler 而不是 template,这样就你无法定义 template instance。mixer/testdata/config/quota.yaml
中也是同样的问题,所以它把 adapter 定义为 memquota
,使用 quota
模板。
然后在这个目录中写你的 template.proto
文件,格式参考内置的几个。
生成 descriptor_set
文件:
cd mixer/adapter/tsfauth/template/tsfauthcheck
protoc --descriptor_set_out template_proto.descriptor_set -I /home/onlyice/go/src/istio.io/istio/vendor/istio.io/api/ -I . template.proto
生成 template.gen.go
:
把这行代码加入 mixer/template/inventory.yaml
:
../adapter/tsfauth/template/tsfauthcheck/template_proto.descriptor_set: "istio.io/istio/mixer/adapter/tsfauth/template/tsfauthcheck"
cd mixer/template
mixgenbootstrap -f inventory.yaml -o template.gen.go
生成 template_handler.gen.go
和 template_handler_service.proto
:
cd mixer/adapter/tsfauth/template/tsfauthcheck
mixgenproc template_proto.descriptor_set -o template_handler.gen.go -t template_handler_service.proto
生成 template_handler_service.pb.go
和文档:
$GOPATH/src/istio.io/istio/bin/mixer_codegen.sh -f mixer/adapter/tsfauth/template/tsfauthcheck/template_handler_service.proto
大功告成,在你的 adapter 的 GetInfo
函数中,指定它为 template 就可以了。