从 protobuf 中的其他包导入类型定义
Import type definitions from other packages in protobuf
我正在尝试使用非常基本的单一操作创建 grpc 服务,即 GetDeployment
,将命名空间和名称作为输入,returns Kubernetes 部署。问题是我不想为 Deployment 定义我自己的 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) {}
}
提前致谢
GRPC codegen 只是一个协议插件。它为 service
和 rpc
生成代码,但它遵循 normal protobuf rules 进行导入。
在您的示例中,如果您的文件位于 src/api.proto 中并且 k8s api 存储库是一个 git 子模块签出到 thirdparty/k8s.io/api
文件夹中,您将生成运行ning:
你需要的文件
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 和 运行 协议也在该文件上。
我正在尝试使用非常基本的单一操作创建 grpc 服务,即 GetDeployment
,将命名空间和名称作为输入,returns Kubernetes 部署。问题是我不想为 Deployment 定义我自己的 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) {}
}
提前致谢
GRPC codegen 只是一个协议插件。它为 service
和 rpc
生成代码,但它遵循 normal protobuf rules 进行导入。
在您的示例中,如果您的文件位于 src/api.proto 中并且 k8s api 存储库是一个 git 子模块签出到 thirdparty/k8s.io/api
文件夹中,您将生成运行ning:
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 和 运行 协议也在该文件上。