我正在尝试使用一个非常基本的单一操作创建一个grpc服务,该操作为GetDeployment
,将名称空间和名称作为输入,并返回Kubernetes部署。事实是,我不想为自己的部署定义message
,因为它已经存在于official Kubernetes repository上。
我对grpc还是很陌生,可能对它的工作原理还不太了解,但是我可以通过写以下.proto
文件的方式将此消息导入到自己的文件中吗?
syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "k8s.io/kubernetes/pkg/api/v1/generated.proto";
message GetDeploymentOptions {
string namespace = 1;
string name = 2;
}
service AppsV1 {
rpc GetDeployment(GetDeploymentOptions) returns (k8s.io.kubernetes.pkg.api.v1.Deployment) {}
}
提前谢谢
答案 0 :(得分:1)
GRPC codegen只是一个protoc插件。它为service
和rpc
生成代码,但遵循normal protobuf rules进行导入。
在您的示例中,如果文件位于src / api.proto中,并且k8s api仓库是检出到thirdparty/k8s.io/api
文件夹中的git子模块,则可以通过运行以下命令来生成所需的文件:
root>protoc.exe -I thirdparty k8s.io/api/core/v1/generated.proto --go_out=go
root>protoc.exe -I thirdparty src/api.proto --go_out=plugins=grpc:go
第一个命令正在生成包含k8s消息的.pb.go文件,而第二个命令正在生成包含您的消息和服务的.pb.go文件。
查看该文件的瞬时导入,您可能还需要将api-machinery检出到k8s.io/apimachinery中,并在该文件上也运行protoc。