From 34d4acbb162ea7cf7c96c8a723194011c2ed6681 Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Mon, 18 Jul 2022 22:14:15 +0200 Subject: [PATCH 1/8] feat(gateway): support URL rewriting Signed-off-by: Mike Beaumont --- api/mesh/v1alpha1/gateway_route.pb.go | 538 +++++++++++++----- api/mesh/v1alpha1/gateway_route.proto | 11 + .../gateway/gateway_route_generator.go | 13 + .../runtime/gateway/route/configurers.go | 36 ++ pkg/plugins/runtime/gateway/route/table.go | 8 + .../runtime/gateway/route_table_generator.go | 2 + .../gatewayapi/http_route_conversion.go | 78 ++- 7 files changed, 532 insertions(+), 154 deletions(-) diff --git a/api/mesh/v1alpha1/gateway_route.pb.go b/api/mesh/v1alpha1/gateway_route.pb.go index 4650052b1959..c4d0b85870d7 100644 --- a/api/mesh/v1alpha1/gateway_route.pb.go +++ b/api/mesh/v1alpha1/gateway_route.pb.go @@ -978,6 +978,7 @@ type MeshGatewayRoute_HttpRoute_Filter struct { // *MeshGatewayRoute_HttpRoute_Filter_RequestHeader_ // *MeshGatewayRoute_HttpRoute_Filter_Mirror_ // *MeshGatewayRoute_HttpRoute_Filter_Redirect_ + // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ Filter isMeshGatewayRoute_HttpRoute_Filter_Filter `protobuf_oneof:"filter"` } @@ -1041,6 +1042,13 @@ func (x *MeshGatewayRoute_HttpRoute_Filter) GetRedirect() *MeshGatewayRoute_Http return nil } +func (x *MeshGatewayRoute_HttpRoute_Filter) GetRewrite() *MeshGatewayRoute_HttpRoute_Filter_Rewrite { + if x, ok := x.GetFilter().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_); ok { + return x.Rewrite + } + return nil +} + type isMeshGatewayRoute_HttpRoute_Filter_Filter interface { isMeshGatewayRoute_HttpRoute_Filter_Filter() } @@ -1057,6 +1065,10 @@ type MeshGatewayRoute_HttpRoute_Filter_Redirect_ struct { Redirect *MeshGatewayRoute_HttpRoute_Filter_Redirect `protobuf:"bytes,3,opt,name=redirect,proto3,oneof"` } +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ struct { + Rewrite *MeshGatewayRoute_HttpRoute_Filter_Rewrite `protobuf:"bytes,4,opt,name=rewrite,proto3,oneof"` +} + func (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_) isMeshGatewayRoute_HttpRoute_Filter_Filter() { } @@ -1064,6 +1076,8 @@ func (*MeshGatewayRoute_HttpRoute_Filter_Mirror_) isMeshGatewayRoute_HttpRoute_F func (*MeshGatewayRoute_HttpRoute_Filter_Redirect_) isMeshGatewayRoute_HttpRoute_Filter_Filter() {} +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_) isMeshGatewayRoute_HttpRoute_Filter_Filter() {} + type MeshGatewayRoute_HttpRoute_Rule struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1534,6 +1548,88 @@ func (x *MeshGatewayRoute_HttpRoute_Filter_Redirect) GetStatusCode() uint32 { return 0 } +type MeshGatewayRoute_HttpRoute_Filter_Rewrite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Path: + // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_ + // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_ + Path isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path `protobuf_oneof:"path"` +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) Reset() { + *x = MeshGatewayRoute_HttpRoute_Filter_Rewrite{} + if protoimpl.UnsafeEnabled { + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite) ProtoMessage() {} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) ProtoReflect() protoreflect.Message { + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshGatewayRoute_HttpRoute_Filter_Rewrite.ProtoReflect.Descriptor instead. +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite) Descriptor() ([]byte, []int) { + return file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP(), []int{0, 4, 1, 3} +} + +func (m *MeshGatewayRoute_HttpRoute_Filter_Rewrite) GetPath() isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path { + if m != nil { + return m.Path + } + return nil +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) GetReplaceFull() string { + if x, ok := x.GetPath().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_); ok { + return x.ReplaceFull + } + return "" +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) GetReplacePrefixMatch() string { + if x, ok := x.GetPath().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_); ok { + return x.ReplacePrefixMatch + } + return "" +} + +type isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path interface { + isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() +} + +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_ struct { + ReplaceFull string `protobuf:"bytes,1,opt,name=replace_full,json=replaceFull,proto3,oneof"` +} + +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_ struct { + ReplacePrefixMatch string `protobuf:"bytes,2,opt,name=replace_prefix_match,json=replacePrefixMatch,proto3,oneof"` +} + +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_) isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() { +} + +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_) isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() { +} + type MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1546,7 +1642,7 @@ type MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header struct { func (x *MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header) Reset() { *x = MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header{} if protoimpl.UnsafeEnabled { - mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[23] + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1559,7 +1655,7 @@ func (x *MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header) String() string func (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header) ProtoMessage() {} func (x *MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header) ProtoReflect() protoreflect.Message { - mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[23] + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1589,6 +1685,100 @@ func (x *MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header) GetValue() stri return "" } +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) Reset() { + *x = MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{} + if protoimpl.UnsafeEnabled { + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) ProtoMessage() {} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) ProtoReflect() protoreflect.Message { + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull.ProtoReflect.Descriptor instead. +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) Descriptor() ([]byte, []int) { + return file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP(), []int{0, 4, 1, 3, 0} +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) Reset() { + *x = MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) ProtoMessage() {} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) ProtoReflect() protoreflect.Message { + mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch.ProtoReflect.Descriptor instead. +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) Descriptor() ([]byte, []int) { + return file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP(), []int{0, 4, 1, 3, 1} +} + +func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + var File_mesh_v1alpha1_gateway_route_proto protoreflect.FileDescriptor var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ @@ -1605,7 +1795,7 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xc2, 0x1f, 0x0a, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x6f, 0x22, 0xd7, 0x21, 0x0a, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, @@ -1687,7 +1877,7 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x3a, 0x04, - 0x88, 0xb5, 0x18, 0x01, 0x1a, 0x94, 0x12, 0x0a, 0x09, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, + 0x88, 0xb5, 0x18, 0x01, 0x1a, 0xa9, 0x14, 0x0a, 0x09, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, @@ -1754,7 +1944,7 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x21, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, - 0x45, 0x47, 0x45, 0x58, 0x10, 0x01, 0x1a, 0xda, 0x07, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x45, 0x47, 0x45, 0x58, 0x10, 0x01, 0x1a, 0xef, 0x09, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x6c, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, @@ -1773,97 +1963,114 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x1a, 0xb3, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x5c, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x03, - 0x61, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x4e, 0x0a, 0x06, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xb0, 0x01, 0x0a, 0x06, - 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, - 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, - 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x0a, - 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, - 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x0b, 0x12, 0x09, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x40, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x1a, 0xb8, - 0x01, 0x0a, 0x08, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x24, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x88, 0xb5, 0x18, - 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x65, 0x12, 0x28, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, - 0x10, 0xff, 0xff, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, - 0x1c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0xfa, 0x42, 0x05, - 0x2a, 0x03, 0x28, 0xac, 0x02, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, 0xb4, 0x02, 0x52, 0x0a, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x1a, 0x85, 0x02, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x5c, 0x0a, 0x07, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, - 0x01, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6b, 0x75, - 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4e, 0x0a, 0x08, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x59, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, + 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, + 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x1a, 0xb3, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x4a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x03, 0x73, 0x65, 0x74, + 0x12, 0x5c, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x04, 0x88, 0xb5, 0x18, - 0x00, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x1a, 0x9e, 0x02, 0x0a, 0x04, - 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x41, 0x0a, 0x03, 0x75, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x55, 0x64, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x03, 0x75, 0x64, 0x70, 0x12, 0x41, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x63, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x41, 0x0a, 0x03, 0x74, 0x6c, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, - 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, - 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6c, - 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x44, 0x0a, - 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6b, 0x75, - 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x68, - 0x74, 0x74, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x3a, 0x68, 0xaa, 0x8c, - 0x89, 0xa6, 0x01, 0x1a, 0x0a, 0x18, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, - 0x89, 0xa6, 0x01, 0x12, 0x12, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, - 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, - 0x01, 0x14, 0x3a, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x42, 0x56, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x68, 0x71, 0x2f, 0x6b, 0x75, 0x6d, 0x61, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x8a, 0xb5, 0x18, 0x28, 0x50, 0x01, 0xa2, 0x01, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0xf2, 0x01, 0x10, 0x6d, 0x65, - 0x73, 0x68, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x4e, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x20, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, + 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xb0, 0x01, 0x0a, 0x06, 0x4d, 0x69, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x54, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, + 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, 0x88, 0xb5, 0x18, 0x01, 0xfa, + 0x42, 0x0b, 0x12, 0x09, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x52, 0x0a, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x1a, 0xb8, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x24, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x08, + 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, + 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x10, 0xff, 0xff, 0x03, 0x52, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x1c, 0x88, 0xb5, 0x18, 0x01, + 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x28, 0xac, 0x02, + 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, 0xb4, 0x02, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x43, 0x6f, 0x64, 0x65, 0x1a, 0xb7, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x23, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x21, 0x0a, 0x0b, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x28, 0x0a, 0x12, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x08, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x85, 0x02, 0x0a, 0x04, 0x52, 0x75, 0x6c, + 0x65, 0x12, 0x5c, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, + 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, + 0x4f, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x4e, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x42, 0x04, 0x88, 0xb5, 0x18, 0x00, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, + 0x1a, 0x9e, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x41, 0x0a, 0x03, 0x75, 0x64, 0x70, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, + 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x55, 0x64, 0x70, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x75, 0x64, 0x70, 0x12, 0x41, 0x0a, 0x03, + 0x74, 0x63, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, + 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, + 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, + 0x54, 0x63, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, + 0x41, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, + 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x2e, 0x54, 0x6c, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, + 0x6c, 0x73, 0x12, 0x44, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x3a, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x1a, 0x0a, 0x18, 0x4d, 0x65, 0x73, 0x68, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x12, 0x12, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, + 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, + 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x14, 0x3a, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x42, 0x56, 0x5a, 0x28, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x68, 0x71, + 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x8a, 0xb5, 0x18, 0x28, 0x50, 0x01, 0xa2, 0x01, 0x10, + 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0xf2, 0x01, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1879,41 +2086,44 @@ func file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP() []byte { } var file_mesh_v1alpha1_gateway_route_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_mesh_v1alpha1_gateway_route_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_mesh_v1alpha1_gateway_route_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_mesh_v1alpha1_gateway_route_proto_goTypes = []interface{}{ - (MeshGatewayRoute_HttpRoute_Match_Path_MatchType)(0), // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.MatchType - (MeshGatewayRoute_HttpRoute_Match_Header_MatchType)(0), // 1: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.MatchType - (MeshGatewayRoute_HttpRoute_Match_Query_MatchType)(0), // 2: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.MatchType - (*MeshGatewayRoute)(nil), // 3: kuma.mesh.v1alpha1.MeshGatewayRoute - (*MeshGatewayRoute_Backend)(nil), // 4: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend - (*MeshGatewayRoute_UdpRoute)(nil), // 5: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute - (*MeshGatewayRoute_TcpRoute)(nil), // 6: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute - (*MeshGatewayRoute_TlsRoute)(nil), // 7: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute - (*MeshGatewayRoute_HttpRoute)(nil), // 8: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute - (*MeshGatewayRoute_Conf)(nil), // 9: kuma.mesh.v1alpha1.MeshGatewayRoute.Conf - nil, // 10: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.DestinationEntry - (*MeshGatewayRoute_UdpRoute_Match)(nil), // 11: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Match - (*MeshGatewayRoute_UdpRoute_Rule)(nil), // 12: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Rule - (*MeshGatewayRoute_TcpRoute_Match)(nil), // 13: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Match - (*MeshGatewayRoute_TcpRoute_Rule)(nil), // 14: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Rule - (*MeshGatewayRoute_TlsRoute_Match)(nil), // 15: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Match - (*MeshGatewayRoute_TlsRoute_Rule)(nil), // 16: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule - (*MeshGatewayRoute_HttpRoute_Match)(nil), // 17: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match - (*MeshGatewayRoute_HttpRoute_Filter)(nil), // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter - (*MeshGatewayRoute_HttpRoute_Rule)(nil), // 19: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule - (*MeshGatewayRoute_HttpRoute_Match_Path)(nil), // 20: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path - (*MeshGatewayRoute_HttpRoute_Match_Header)(nil), // 21: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header - (*MeshGatewayRoute_HttpRoute_Match_Query)(nil), // 22: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query - (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader)(nil), // 23: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader - (*MeshGatewayRoute_HttpRoute_Filter_Mirror)(nil), // 24: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror - (*MeshGatewayRoute_HttpRoute_Filter_Redirect)(nil), // 25: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Redirect - (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header)(nil), // 26: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header - (*Selector)(nil), // 27: kuma.mesh.v1alpha1.Selector - (HttpMethod)(0), // 28: kuma.mesh.v1alpha1.HttpMethod - (*wrapperspb.DoubleValue)(nil), // 29: google.protobuf.DoubleValue + (MeshGatewayRoute_HttpRoute_Match_Path_MatchType)(0), // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.MatchType + (MeshGatewayRoute_HttpRoute_Match_Header_MatchType)(0), // 1: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.MatchType + (MeshGatewayRoute_HttpRoute_Match_Query_MatchType)(0), // 2: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.MatchType + (*MeshGatewayRoute)(nil), // 3: kuma.mesh.v1alpha1.MeshGatewayRoute + (*MeshGatewayRoute_Backend)(nil), // 4: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend + (*MeshGatewayRoute_UdpRoute)(nil), // 5: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute + (*MeshGatewayRoute_TcpRoute)(nil), // 6: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute + (*MeshGatewayRoute_TlsRoute)(nil), // 7: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute + (*MeshGatewayRoute_HttpRoute)(nil), // 8: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute + (*MeshGatewayRoute_Conf)(nil), // 9: kuma.mesh.v1alpha1.MeshGatewayRoute.Conf + nil, // 10: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.DestinationEntry + (*MeshGatewayRoute_UdpRoute_Match)(nil), // 11: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Match + (*MeshGatewayRoute_UdpRoute_Rule)(nil), // 12: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Rule + (*MeshGatewayRoute_TcpRoute_Match)(nil), // 13: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Match + (*MeshGatewayRoute_TcpRoute_Rule)(nil), // 14: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Rule + (*MeshGatewayRoute_TlsRoute_Match)(nil), // 15: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Match + (*MeshGatewayRoute_TlsRoute_Rule)(nil), // 16: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule + (*MeshGatewayRoute_HttpRoute_Match)(nil), // 17: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match + (*MeshGatewayRoute_HttpRoute_Filter)(nil), // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter + (*MeshGatewayRoute_HttpRoute_Rule)(nil), // 19: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule + (*MeshGatewayRoute_HttpRoute_Match_Path)(nil), // 20: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path + (*MeshGatewayRoute_HttpRoute_Match_Header)(nil), // 21: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header + (*MeshGatewayRoute_HttpRoute_Match_Query)(nil), // 22: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query + (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader)(nil), // 23: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader + (*MeshGatewayRoute_HttpRoute_Filter_Mirror)(nil), // 24: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror + (*MeshGatewayRoute_HttpRoute_Filter_Redirect)(nil), // 25: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Redirect + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite)(nil), // 26: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite + (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header)(nil), // 27: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull)(nil), // 28: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite.ReplaceFull + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch)(nil), // 29: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite.ReplacePrefixMatch + (*Selector)(nil), // 30: kuma.mesh.v1alpha1.Selector + (HttpMethod)(0), // 31: kuma.mesh.v1alpha1.HttpMethod + (*wrapperspb.DoubleValue)(nil), // 32: google.protobuf.DoubleValue } var file_mesh_v1alpha1_gateway_route_proto_depIdxs = []int32{ - 27, // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.selectors:type_name -> kuma.mesh.v1alpha1.Selector + 30, // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.selectors:type_name -> kuma.mesh.v1alpha1.Selector 9, // 1: kuma.mesh.v1alpha1.MeshGatewayRoute.conf:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Conf 10, // 2: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.destination:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.DestinationEntry 12, // 3: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.rules:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Rule @@ -1931,27 +2141,28 @@ var file_mesh_v1alpha1_gateway_route_proto_depIdxs = []int32{ 15, // 15: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule.matches:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Match 4, // 16: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule.backends:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend 20, // 17: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.path:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path - 28, // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.method:type_name -> kuma.mesh.v1alpha1.HttpMethod + 31, // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.method:type_name -> kuma.mesh.v1alpha1.HttpMethod 21, // 19: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.headers:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header 22, // 20: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.query_parameters:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query 23, // 21: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.request_header:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader 24, // 22: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.mirror:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror 25, // 23: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.redirect:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Redirect - 17, // 24: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule.matches:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match - 18, // 25: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule.filters:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter - 4, // 26: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule.backends:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend - 0, // 27: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.match:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.MatchType - 1, // 28: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.match:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.MatchType - 2, // 29: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.match:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.MatchType - 26, // 30: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.set:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header - 26, // 31: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.add:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header - 4, // 32: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.backend:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend - 29, // 33: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.percentage:type_name -> google.protobuf.DoubleValue - 34, // [34:34] is the sub-list for method output_type - 34, // [34:34] is the sub-list for method input_type - 34, // [34:34] is the sub-list for extension type_name - 34, // [34:34] is the sub-list for extension extendee - 0, // [0:34] is the sub-list for field type_name + 26, // 24: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.rewrite:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite + 17, // 25: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule.matches:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match + 18, // 26: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule.filters:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter + 4, // 27: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule.backends:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend + 0, // 28: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.match:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.MatchType + 1, // 29: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.match:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.MatchType + 2, // 30: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.match:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.MatchType + 27, // 31: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.set:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header + 27, // 32: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.add:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header + 4, // 33: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.backend:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend + 32, // 34: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.percentage:type_name -> google.protobuf.DoubleValue + 35, // [35:35] is the sub-list for method output_type + 35, // [35:35] is the sub-list for method input_type + 35, // [35:35] is the sub-list for extension type_name + 35, // [35:35] is the sub-list for extension extendee + 0, // [0:35] is the sub-list for field type_name } func init() { file_mesh_v1alpha1_gateway_route_proto_init() } @@ -2227,6 +2438,18 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { } } file_mesh_v1alpha1_gateway_route_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MeshGatewayRoute_HttpRoute_Filter_Rewrite); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mesh_v1alpha1_gateway_route_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header); i { case 0: return &v.state @@ -2238,6 +2461,30 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { return nil } } + file_mesh_v1alpha1_gateway_route_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mesh_v1alpha1_gateway_route_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_mesh_v1alpha1_gateway_route_proto_msgTypes[6].OneofWrappers = []interface{}{ (*MeshGatewayRoute_Conf_Udp)(nil), @@ -2249,6 +2496,11 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_)(nil), (*MeshGatewayRoute_HttpRoute_Filter_Mirror_)(nil), (*MeshGatewayRoute_HttpRoute_Filter_Redirect_)(nil), + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_)(nil), + } + file_mesh_v1alpha1_gateway_route_proto_msgTypes[23].OneofWrappers = []interface{}{ + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_)(nil), + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -2256,7 +2508,7 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mesh_v1alpha1_gateway_route_proto_rawDesc, NumEnums: 3, - NumMessages: 24, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/api/mesh/v1alpha1/gateway_route.proto b/api/mesh/v1alpha1/gateway_route.proto index 028ea0a87666..544ed4b6dfed 100644 --- a/api/mesh/v1alpha1/gateway_route.proto +++ b/api/mesh/v1alpha1/gateway_route.proto @@ -245,10 +245,21 @@ message MeshGatewayRoute { ]; }; + message Rewrite { + message ReplaceFull { string path = 1; } + message ReplacePrefixMatch { string path = 1; } + + oneof path { + string replace_full = 1; + string replace_prefix_match = 2; + } + } + oneof filter { RequestHeader request_header = 1; Mirror mirror = 2; Redirect redirect = 3; + Rewrite rewrite = 4; } }; diff --git a/pkg/plugins/runtime/gateway/gateway_route_generator.go b/pkg/plugins/runtime/gateway/gateway_route_generator.go index de4e16dea4f9..16744fbb64f3 100644 --- a/pkg/plugins/runtime/gateway/gateway_route_generator.go +++ b/pkg/plugins/runtime/gateway/gateway_route_generator.go @@ -192,6 +192,19 @@ func makeHttpRouteEntry(name string, rule *mesh_proto.MeshGatewayRoute_HttpRoute entry.RequestHeaders.Delete = append( entry.RequestHeaders.Delete, h.GetRemove()...) + } else if h := f.GetRewrite(); h != nil { + rewrite := route.Rewrite{} + + if p := h.GetPath(); p != nil { + switch t := p.(type) { + case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_: + rewrite.ReplaceFullPath = &t.ReplaceFull + case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_: + rewrite.ReplacePrefixMatch = &t.ReplacePrefixMatch + } + } + + entry.Rewrite = &rewrite } } diff --git a/pkg/plugins/runtime/gateway/route/configurers.go b/pkg/plugins/runtime/gateway/route/configurers.go index 282acf721bf1..2ba917d2b570 100644 --- a/pkg/plugins/runtime/gateway/route/configurers.go +++ b/pkg/plugins/runtime/gateway/route/configurers.go @@ -323,6 +323,42 @@ func RouteActionRedirect(redirect *Redirection) RouteConfigurer { }) } +func RouteRewrite(rewrite *Rewrite) RouteConfigurer { + if rewrite == nil { + return RouteConfigureFunc(nil) + } + + return RouteConfigureFunc(func(r *envoy_config_route.Route) error { + if r.GetAction() == nil { + return errors.New("cannot configure rewrite before the route action") + } + + action := r.GetRoute() + + if action == nil { + return errors.New("cannot configure rewrite on a non-forwarding route") + } + + if rewrite.ReplaceFullPath != nil { + action.RegexRewrite = &envoy_type_matcher.RegexMatchAndSubstitute{ + Pattern: &envoy_type_matcher.RegexMatcher{ + EngineType: &envoy_type_matcher.RegexMatcher_GoogleRe2{ + GoogleRe2: &envoy_type_matcher.RegexMatcher_GoogleRE2{}, + }, + Regex: `.*`, + }, + Substitution: *rewrite.ReplaceFullPath, + } + } + + if rewrite.ReplacePrefixMatch != nil { + action.PrefixRewrite = *rewrite.ReplacePrefixMatch + } + + return nil + }) +} + // RouteActionForward configures the route to forward traffic to the // given destinations, with the appropriate weights. This replaces any // previous action specification. diff --git a/pkg/plugins/runtime/gateway/route/table.go b/pkg/plugins/runtime/gateway/route/table.go index 1ee627dae226..d27092cf56e9 100644 --- a/pkg/plugins/runtime/gateway/route/table.go +++ b/pkg/plugins/runtime/gateway/route/table.go @@ -36,6 +36,8 @@ type Entry struct { // RequestHeaders specifies transformations on the HTTP // request headers. RequestHeaders *Headers + + Rewrite *Rewrite } // KeyValue is a generic pairing of key and value strings. Route table @@ -115,6 +117,12 @@ type Headers struct { Delete []string } +type Rewrite struct { + ReplaceFullPath *string + + ReplacePrefixMatch *string +} + // Mirror specifies a traffic mirroring operation. type Mirror struct { Forward Destination diff --git a/pkg/plugins/runtime/gateway/route_table_generator.go b/pkg/plugins/runtime/gateway/route_table_generator.go index 7a41bc63b6df..ea779ecc28d5 100644 --- a/pkg/plugins/runtime/gateway/route_table_generator.go +++ b/pkg/plugins/runtime/gateway/route_table_generator.go @@ -124,6 +124,8 @@ func GenerateVirtualHost( routeBuilder.Configure(route.RouteMirror(m.Percentage, m.Forward)) } + routeBuilder.Configure(route.RouteRewrite(e.Rewrite)) + vh.Configure(route.VirtualHostRoute(&routeBuilder)) } diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go index fba25d185439..a7ee7a830dc0 100644 --- a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go +++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go @@ -59,14 +59,14 @@ func (r *HTTPRouteReconciler) gapiToKumaRule( var filters []*mesh_proto.MeshGatewayRoute_HttpRoute_Filter for _, filter := range rule.Filters { - kumaFilter, filterCondition, err := r.gapiToKumaFilter(ctx, mesh, route.Namespace, filter) + kumaFilters, filterCondition, err := r.gapiToKumaFilters(ctx, mesh, route.Namespace, filter) if err != nil { return nil, condition, err } if filterCondition != nil { condition = filterCondition } else { - filters = append(filters, kumaFilter) + filters = append(filters, kumaFilters...) } } @@ -296,10 +296,10 @@ func gapiToKumaMatch(match gatewayapi.HTTPRouteMatch) (*mesh_proto.MeshGatewayRo return kumaMatch, nil } -func (r *HTTPRouteReconciler) gapiToKumaFilter( +func (r *HTTPRouteReconciler) gapiToKumaFilters( ctx context.Context, mesh string, namespace string, filter gatewayapi.HTTPRouteFilter, -) (*mesh_proto.MeshGatewayRoute_HttpRoute_Filter, *ResolvedRefsConditionFalse, error) { - var kumaFilter *mesh_proto.MeshGatewayRoute_HttpRoute_Filter +) ([]*mesh_proto.MeshGatewayRoute_HttpRoute_Filter, *ResolvedRefsConditionFalse, error) { + var kumaFilters []*mesh_proto.MeshGatewayRoute_HttpRoute_Filter var condition *ResolvedRefsConditionFalse @@ -319,11 +319,11 @@ func (r *HTTPRouteReconciler) gapiToKumaFilter( requestHeader.Remove = filter.Remove - kumaFilter = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_RequestHeader_{ RequestHeader: &requestHeader, }, - } + }) case gatewayapi.HTTPRouteFilterRequestMirror: filter := filter.RequestMirror @@ -342,14 +342,34 @@ func (r *HTTPRouteReconciler) gapiToKumaFilter( Percentage: util_proto.Double(100), } - kumaFilter = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Mirror_{ Mirror: &mirror, }, - } + }) case gatewayapi.HTTPRouteFilterRequestRedirect: filter := filter.RequestRedirect + if p := filter.Path; p != nil { + rewrite := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite{} + + switch p.Type { + case gatewayapi.FullPathHTTPPathModifier: + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_{ + ReplaceFull: *p.ReplaceFullPath, + } + case gatewayapi.PrefixMatchHTTPPathModifier: + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_{ + ReplacePrefixMatch: *p.ReplacePrefixMatch, + } + } + kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_{ + Rewrite: &rewrite, + }, + }) + } + redirect := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Redirect{} if s := filter.Scheme; s != nil { @@ -368,14 +388,50 @@ func (r *HTTPRouteReconciler) gapiToKumaFilter( redirect.StatusCode = uint32(*sc) } - kumaFilter = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Redirect_{ Redirect: &redirect, }, + }) + case gatewayapi.HTTPRouteFilterURLRewrite: + filter := filter.URLRewrite + + if filter.Hostname != nil { + var requestHeader mesh_proto.MeshGatewayRoute_HttpRoute_Filter_RequestHeader + requestHeader.Set = append(requestHeader.Set, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header{ + Name: "Host", + Value: string(*filter.Hostname), + }) + kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_RequestHeader_{ + RequestHeader: &requestHeader, + }, + }) + } + + if p := filter.Path; p != nil { + rewrite := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite{} + + switch p.Type { + case gatewayapi.FullPathHTTPPathModifier: + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_{ + ReplaceFull: *p.ReplaceFullPath, + } + case gatewayapi.PrefixMatchHTTPPathModifier: + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_{ + ReplacePrefixMatch: *p.ReplacePrefixMatch, + } + } + + kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_{ + Rewrite: &rewrite, + }, + }) } default: return nil, nil, fmt.Errorf("unsupported filter type %q", filter.Type) } - return kumaFilter, condition, nil + return kumaFilters, condition, nil } From 335305e379da93321a7649372af4b9f1ee8a2c8c Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Mon, 18 Jul 2022 23:13:13 +0200 Subject: [PATCH 2/8] test(e2e): enable experimental channel in tests Signed-off-by: Mike Beaumont --- test/e2e/gateway/gatewayapi/gateway_api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/gateway/gatewayapi/gateway_api.go b/test/e2e/gateway/gatewayapi/gateway_api.go index 433baf8e5834..6c10c9421d61 100644 --- a/test/e2e/gateway/gatewayapi/gateway_api.go +++ b/test/e2e/gateway/gatewayapi/gateway_api.go @@ -18,7 +18,7 @@ func GatewayAPICRDs(cluster Cluster) error { return k8s.RunKubectlE( cluster.GetTesting(), cluster.GetKubectlOptions(), - "apply", "-f", "https://github.com/kubernetes-sigs/gateway-api/releases/download/v0.5.0/standard-install.yaml") + "apply", "-f", "https://github.com/kubernetes-sigs/gateway-api/releases/download/v0.5.0/experimental-install.yaml") } const GatewayClass = ` From 47206e1b42c8693a9795073c091ccd1411bb43e7 Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Tue, 19 Jul 2022 11:22:39 +0200 Subject: [PATCH 3/8] test(e2e): add gatewy URL rewrite test Signed-off-by: Mike Beaumont --- test/e2e/gateway/gateway_kubernetes.go | 26 ++++++++++++++++++++++++++ test/e2e/gateway/utils.go | 14 +++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/test/e2e/gateway/gateway_kubernetes.go b/test/e2e/gateway/gateway_kubernetes.go index 519cc14f2be2..be516bddd9fd 100644 --- a/test/e2e/gateway/gateway_kubernetes.go +++ b/test/e2e/gateway/gateway_kubernetes.go @@ -5,6 +5,8 @@ import ( "encoding/base64" "fmt" "net" + "net/url" + "path" "strings" "text/template" @@ -169,6 +171,20 @@ spec: conf: http: rules: + - matches: + - path: + match: PREFIX + value: /prefix/ + filters: + - requestHeader: + set: + - name: Host + value: other.example.kuma.io + - rewrite: + replacePrefixMatch: "/" + backends: + - destination: + kuma.io/service: echo-server_kuma-test_svc_80 # Matches the echo-server we deployed. - matches: - path: match: PREFIX @@ -273,6 +289,16 @@ spec: client.FromKubernetesPod(ClientNamespace, "gateway-client")) }) + It("should rewrite HTTP requests", func() { + expectedPath := path.Join("/test", GinkgoT().Name()) + targetPath := path.Join("prefix", "/test", url.PathEscape(GinkgoT().Name())) + expectedHostname := "other.example.kuma.io" + ProxyHTTPRequests(cluster, "kubernetes", + net.JoinHostPort(GatewayAddress("edge-gateway"), GatewayPort), + targetPath, expectedPath, expectedHostname, + client.FromKubernetesPod(ClientNamespace, "gateway-client")) + }) + It("should proxy TCP connections", func() { ProxyTcpRequest(cluster, "request", "response", net.JoinHostPort(GatewayAddress("edge-gateway"), "8081"), diff --git a/test/e2e/gateway/utils.go b/test/e2e/gateway/utils.go index ef9ca816742a..07fa939f60e8 100644 --- a/test/e2e/gateway/utils.go +++ b/test/e2e/gateway/utils.go @@ -42,20 +42,24 @@ func ProxyTcpRequest(cluster framework.Cluster, input, expectedResponse string, }, "60s", "1s").Should(Succeed()) } -// ProxySimpleRequests tests that basic HTTP requests are proxied to the echo-server. func ProxySimpleRequests(cluster framework.Cluster, instance string, gateway string, opts ...client.CollectResponsesOptsFn) { + targetPath := path.Join("test", url.PathEscape(GinkgoT().Name())) + ProxyHTTPRequests(cluster, instance, gateway, targetPath, targetPath, "example.kuma.io", opts...) +} + +// ProxySimpleRequests tests that basic HTTP requests are proxied to the echo-server. +func ProxyHTTPRequests(cluster framework.Cluster, instance, gateway, targetPath, expectedPath, expectedHostname string, opts ...client.CollectResponsesOptsFn) { framework.Logf("expecting 200 response from %q", gateway) Eventually(func(g Gomega) { - target := fmt.Sprintf("http://%s/%s", - gateway, path.Join("test", url.PathEscape(GinkgoT().Name())), - ) + target := fmt.Sprintf("http://%s/%s", gateway, targetPath) opts = append(opts, client.WithHeader("Host", "example.kuma.io")) response, err := client.CollectResponse(cluster, "gateway-client", target, opts...) g.Expect(err).To(Succeed()) g.Expect(response.Instance).To(Equal(instance)) - g.Expect(response.Received.Headers["Host"]).To(ContainElement("example.kuma.io")) + g.Expect(response.Received.Headers["Host"]).To(ContainElement(expectedHostname)) + g.Expect(response.Received.Path).To(HavePrefix(expectedPath)) }, "60s", "1s").Should(Succeed()) } From 87b8d4ded13051683340f5c991c595c1f4552d3a Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Tue, 19 Jul 2022 11:45:07 +0200 Subject: [PATCH 4/8] chore(api): remove unused Messages Signed-off-by: Mike Beaumont --- api/mesh/v1alpha1/gateway_route.pb.go | 327 ++++++------------ api/mesh/v1alpha1/gateway_route.proto | 3 - .../gateway/gateway_route_generator.go | 4 +- .../gatewayapi/http_route_conversion.go | 8 +- 4 files changed, 107 insertions(+), 235 deletions(-) diff --git a/api/mesh/v1alpha1/gateway_route.pb.go b/api/mesh/v1alpha1/gateway_route.pb.go index c4d0b85870d7..d1c696ea42fa 100644 --- a/api/mesh/v1alpha1/gateway_route.pb.go +++ b/api/mesh/v1alpha1/gateway_route.pb.go @@ -1554,8 +1554,8 @@ type MeshGatewayRoute_HttpRoute_Filter_Rewrite struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Path: - // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_ - // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_ + // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull + // *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch Path isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path `protobuf_oneof:"path"` } @@ -1599,14 +1599,14 @@ func (m *MeshGatewayRoute_HttpRoute_Filter_Rewrite) GetPath() isMeshGatewayRoute } func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) GetReplaceFull() string { - if x, ok := x.GetPath().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_); ok { + if x, ok := x.GetPath().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull); ok { return x.ReplaceFull } return "" } func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite) GetReplacePrefixMatch() string { - if x, ok := x.GetPath().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_); ok { + if x, ok := x.GetPath().(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch); ok { return x.ReplacePrefixMatch } return "" @@ -1616,18 +1616,18 @@ type isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path interface { isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() } -type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_ struct { +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull struct { ReplaceFull string `protobuf:"bytes,1,opt,name=replace_full,json=replaceFull,proto3,oneof"` } -type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_ struct { +type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch struct { ReplacePrefixMatch string `protobuf:"bytes,2,opt,name=replace_prefix_match,json=replacePrefixMatch,proto3,oneof"` } -func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_) isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() { +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() { } -func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_) isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() { +func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) isMeshGatewayRoute_HttpRoute_Filter_Rewrite_Path() { } type MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header struct { @@ -1685,100 +1685,6 @@ func (x *MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header) GetValue() stri return "" } -type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` -} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) Reset() { - *x = MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{} - if protoimpl.UnsafeEnabled { - mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) ProtoMessage() {} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) ProtoReflect() protoreflect.Message { - mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull.ProtoReflect.Descriptor instead. -func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) Descriptor() ([]byte, []int) { - return file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP(), []int{0, 4, 1, 3, 0} -} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -type MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` -} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) Reset() { - *x = MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{} - if protoimpl.UnsafeEnabled { - mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) ProtoMessage() {} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) ProtoReflect() protoreflect.Message { - mi := &file_mesh_v1alpha1_gateway_route_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch.ProtoReflect.Descriptor instead. -func (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) Descriptor() ([]byte, []int) { - return file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP(), []int{0, 4, 1, 3, 1} -} - -func (x *MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - var File_mesh_v1alpha1_gateway_route_proto protoreflect.FileDescriptor var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ @@ -1795,7 +1701,7 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xd7, 0x21, 0x0a, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x6f, 0x22, 0x89, 0x21, 0x0a, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, @@ -1877,7 +1783,7 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x3a, 0x04, - 0x88, 0xb5, 0x18, 0x01, 0x1a, 0xa9, 0x14, 0x0a, 0x09, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, + 0x88, 0xb5, 0x18, 0x01, 0x1a, 0xdb, 0x13, 0x0a, 0x09, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, @@ -1944,7 +1850,7 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x21, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, - 0x45, 0x47, 0x45, 0x58, 0x10, 0x01, 0x1a, 0xef, 0x09, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x45, 0x47, 0x45, 0x58, 0x10, 0x01, 0x1a, 0xa1, 0x09, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x6c, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, @@ -2011,66 +1917,61 @@ var file_mesh_v1alpha1_gateway_route_proto_rawDesc = []byte{ 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x1c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x28, 0xac, 0x02, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, 0xb4, 0x02, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x1a, 0xb7, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x23, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x21, 0x0a, 0x0b, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x28, 0x0a, 0x12, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x08, - 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x85, 0x02, 0x0a, 0x04, 0x52, 0x75, 0x6c, - 0x65, 0x12, 0x5c, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, + 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x6a, 0x0a, 0x07, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x23, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x85, 0x02, 0x0a, 0x04, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x5c, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, + 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x12, 0x4f, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x0c, 0x88, 0xb5, 0x18, 0x01, 0xfa, 0x42, - 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x4f, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x4e, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, + 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x4e, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x42, 0x04, 0x88, 0xb5, 0x18, 0x00, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x73, 0x1a, 0x9e, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x41, 0x0a, 0x03, 0x75, + 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, + 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, + 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x55, + 0x64, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x75, 0x64, 0x70, 0x12, 0x41, + 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, + 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x2e, 0x54, 0x63, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, 0x63, + 0x70, 0x12, 0x41, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6c, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x03, 0x74, 0x6c, 0x73, 0x12, 0x44, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x42, 0x04, 0x88, 0xb5, 0x18, 0x00, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, - 0x1a, 0x9e, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x41, 0x0a, 0x03, 0x75, 0x64, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, - 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x55, 0x64, 0x70, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x75, 0x64, 0x70, 0x12, 0x41, 0x0a, 0x03, - 0x74, 0x63, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, - 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, - 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, - 0x54, 0x63, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, - 0x41, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, - 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x2e, 0x54, 0x6c, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x03, 0x74, - 0x6c, 0x73, 0x12, 0x44, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x3a, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x1a, 0x0a, 0x18, 0x4d, 0x65, 0x73, 0x68, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x12, 0x12, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, - 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, - 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x14, 0x3a, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x42, 0x56, 0x5a, 0x28, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x68, 0x71, - 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x8a, 0xb5, 0x18, 0x28, 0x50, 0x01, 0xa2, 0x01, 0x10, - 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0xf2, 0x01, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x3a, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x1a, 0x0a, 0x18, 0x4d, 0x65, 0x73, + 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x12, 0x12, 0x10, 0x4d, 0x65, 0x73, + 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0xaa, 0x8c, 0x89, + 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, + 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x14, 0x3a, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, + 0x68, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x42, 0x56, 0x5a, + 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, + 0x68, 0x71, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x8a, 0xb5, 0x18, 0x28, 0x50, 0x01, 0xa2, + 0x01, 0x10, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0xf2, 0x01, 0x10, 0x6d, 0x65, 0x73, 0x68, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2086,44 +1987,42 @@ func file_mesh_v1alpha1_gateway_route_proto_rawDescGZIP() []byte { } var file_mesh_v1alpha1_gateway_route_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_mesh_v1alpha1_gateway_route_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_mesh_v1alpha1_gateway_route_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_mesh_v1alpha1_gateway_route_proto_goTypes = []interface{}{ - (MeshGatewayRoute_HttpRoute_Match_Path_MatchType)(0), // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.MatchType - (MeshGatewayRoute_HttpRoute_Match_Header_MatchType)(0), // 1: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.MatchType - (MeshGatewayRoute_HttpRoute_Match_Query_MatchType)(0), // 2: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.MatchType - (*MeshGatewayRoute)(nil), // 3: kuma.mesh.v1alpha1.MeshGatewayRoute - (*MeshGatewayRoute_Backend)(nil), // 4: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend - (*MeshGatewayRoute_UdpRoute)(nil), // 5: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute - (*MeshGatewayRoute_TcpRoute)(nil), // 6: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute - (*MeshGatewayRoute_TlsRoute)(nil), // 7: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute - (*MeshGatewayRoute_HttpRoute)(nil), // 8: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute - (*MeshGatewayRoute_Conf)(nil), // 9: kuma.mesh.v1alpha1.MeshGatewayRoute.Conf - nil, // 10: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.DestinationEntry - (*MeshGatewayRoute_UdpRoute_Match)(nil), // 11: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Match - (*MeshGatewayRoute_UdpRoute_Rule)(nil), // 12: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Rule - (*MeshGatewayRoute_TcpRoute_Match)(nil), // 13: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Match - (*MeshGatewayRoute_TcpRoute_Rule)(nil), // 14: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Rule - (*MeshGatewayRoute_TlsRoute_Match)(nil), // 15: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Match - (*MeshGatewayRoute_TlsRoute_Rule)(nil), // 16: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule - (*MeshGatewayRoute_HttpRoute_Match)(nil), // 17: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match - (*MeshGatewayRoute_HttpRoute_Filter)(nil), // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter - (*MeshGatewayRoute_HttpRoute_Rule)(nil), // 19: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule - (*MeshGatewayRoute_HttpRoute_Match_Path)(nil), // 20: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path - (*MeshGatewayRoute_HttpRoute_Match_Header)(nil), // 21: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header - (*MeshGatewayRoute_HttpRoute_Match_Query)(nil), // 22: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query - (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader)(nil), // 23: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader - (*MeshGatewayRoute_HttpRoute_Filter_Mirror)(nil), // 24: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror - (*MeshGatewayRoute_HttpRoute_Filter_Redirect)(nil), // 25: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Redirect - (*MeshGatewayRoute_HttpRoute_Filter_Rewrite)(nil), // 26: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite - (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header)(nil), // 27: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header - (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull)(nil), // 28: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite.ReplaceFull - (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch)(nil), // 29: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite.ReplacePrefixMatch - (*Selector)(nil), // 30: kuma.mesh.v1alpha1.Selector - (HttpMethod)(0), // 31: kuma.mesh.v1alpha1.HttpMethod - (*wrapperspb.DoubleValue)(nil), // 32: google.protobuf.DoubleValue + (MeshGatewayRoute_HttpRoute_Match_Path_MatchType)(0), // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path.MatchType + (MeshGatewayRoute_HttpRoute_Match_Header_MatchType)(0), // 1: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header.MatchType + (MeshGatewayRoute_HttpRoute_Match_Query_MatchType)(0), // 2: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query.MatchType + (*MeshGatewayRoute)(nil), // 3: kuma.mesh.v1alpha1.MeshGatewayRoute + (*MeshGatewayRoute_Backend)(nil), // 4: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend + (*MeshGatewayRoute_UdpRoute)(nil), // 5: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute + (*MeshGatewayRoute_TcpRoute)(nil), // 6: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute + (*MeshGatewayRoute_TlsRoute)(nil), // 7: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute + (*MeshGatewayRoute_HttpRoute)(nil), // 8: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute + (*MeshGatewayRoute_Conf)(nil), // 9: kuma.mesh.v1alpha1.MeshGatewayRoute.Conf + nil, // 10: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.DestinationEntry + (*MeshGatewayRoute_UdpRoute_Match)(nil), // 11: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Match + (*MeshGatewayRoute_UdpRoute_Rule)(nil), // 12: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Rule + (*MeshGatewayRoute_TcpRoute_Match)(nil), // 13: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Match + (*MeshGatewayRoute_TcpRoute_Rule)(nil), // 14: kuma.mesh.v1alpha1.MeshGatewayRoute.TcpRoute.Rule + (*MeshGatewayRoute_TlsRoute_Match)(nil), // 15: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Match + (*MeshGatewayRoute_TlsRoute_Rule)(nil), // 16: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule + (*MeshGatewayRoute_HttpRoute_Match)(nil), // 17: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match + (*MeshGatewayRoute_HttpRoute_Filter)(nil), // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter + (*MeshGatewayRoute_HttpRoute_Rule)(nil), // 19: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Rule + (*MeshGatewayRoute_HttpRoute_Match_Path)(nil), // 20: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path + (*MeshGatewayRoute_HttpRoute_Match_Header)(nil), // 21: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header + (*MeshGatewayRoute_HttpRoute_Match_Query)(nil), // 22: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query + (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader)(nil), // 23: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader + (*MeshGatewayRoute_HttpRoute_Filter_Mirror)(nil), // 24: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror + (*MeshGatewayRoute_HttpRoute_Filter_Redirect)(nil), // 25: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Redirect + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite)(nil), // 26: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Rewrite + (*MeshGatewayRoute_HttpRoute_Filter_RequestHeader_Header)(nil), // 27: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header + (*Selector)(nil), // 28: kuma.mesh.v1alpha1.Selector + (HttpMethod)(0), // 29: kuma.mesh.v1alpha1.HttpMethod + (*wrapperspb.DoubleValue)(nil), // 30: google.protobuf.DoubleValue } var file_mesh_v1alpha1_gateway_route_proto_depIdxs = []int32{ - 30, // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.selectors:type_name -> kuma.mesh.v1alpha1.Selector + 28, // 0: kuma.mesh.v1alpha1.MeshGatewayRoute.selectors:type_name -> kuma.mesh.v1alpha1.Selector 9, // 1: kuma.mesh.v1alpha1.MeshGatewayRoute.conf:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Conf 10, // 2: kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.destination:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend.DestinationEntry 12, // 3: kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.rules:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.UdpRoute.Rule @@ -2141,7 +2040,7 @@ var file_mesh_v1alpha1_gateway_route_proto_depIdxs = []int32{ 15, // 15: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule.matches:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Match 4, // 16: kuma.mesh.v1alpha1.MeshGatewayRoute.TlsRoute.Rule.backends:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend 20, // 17: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.path:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Path - 31, // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.method:type_name -> kuma.mesh.v1alpha1.HttpMethod + 29, // 18: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.method:type_name -> kuma.mesh.v1alpha1.HttpMethod 21, // 19: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.headers:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Header 22, // 20: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.query_parameters:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Match.Query 23, // 21: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.request_header:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader @@ -2157,7 +2056,7 @@ var file_mesh_v1alpha1_gateway_route_proto_depIdxs = []int32{ 27, // 31: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.set:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header 27, // 32: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.add:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.RequestHeader.Header 4, // 33: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.backend:type_name -> kuma.mesh.v1alpha1.MeshGatewayRoute.Backend - 32, // 34: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.percentage:type_name -> google.protobuf.DoubleValue + 30, // 34: kuma.mesh.v1alpha1.MeshGatewayRoute.HttpRoute.Filter.Mirror.percentage:type_name -> google.protobuf.DoubleValue 35, // [35:35] is the sub-list for method output_type 35, // [35:35] is the sub-list for method input_type 35, // [35:35] is the sub-list for extension type_name @@ -2461,30 +2360,6 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { return nil } } - file_mesh_v1alpha1_gateway_route_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_mesh_v1alpha1_gateway_route_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } file_mesh_v1alpha1_gateway_route_proto_msgTypes[6].OneofWrappers = []interface{}{ (*MeshGatewayRoute_Conf_Udp)(nil), @@ -2499,8 +2374,8 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_)(nil), } file_mesh_v1alpha1_gateway_route_proto_msgTypes[23].OneofWrappers = []interface{}{ - (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_)(nil), - (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_)(nil), + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull)(nil), + (*MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -2508,7 +2383,7 @@ func file_mesh_v1alpha1_gateway_route_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mesh_v1alpha1_gateway_route_proto_rawDesc, NumEnums: 3, - NumMessages: 27, + NumMessages: 25, NumExtensions: 0, NumServices: 0, }, diff --git a/api/mesh/v1alpha1/gateway_route.proto b/api/mesh/v1alpha1/gateway_route.proto index 544ed4b6dfed..96f72f3db8d5 100644 --- a/api/mesh/v1alpha1/gateway_route.proto +++ b/api/mesh/v1alpha1/gateway_route.proto @@ -246,9 +246,6 @@ message MeshGatewayRoute { }; message Rewrite { - message ReplaceFull { string path = 1; } - message ReplacePrefixMatch { string path = 1; } - oneof path { string replace_full = 1; string replace_prefix_match = 2; diff --git a/pkg/plugins/runtime/gateway/gateway_route_generator.go b/pkg/plugins/runtime/gateway/gateway_route_generator.go index 16744fbb64f3..d4fa297df859 100644 --- a/pkg/plugins/runtime/gateway/gateway_route_generator.go +++ b/pkg/plugins/runtime/gateway/gateway_route_generator.go @@ -197,9 +197,9 @@ func makeHttpRouteEntry(name string, rule *mesh_proto.MeshGatewayRoute_HttpRoute if p := h.GetPath(); p != nil { switch t := p.(type) { - case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_: + case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull: rewrite.ReplaceFullPath = &t.ReplaceFull - case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_: + case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch: rewrite.ReplacePrefixMatch = &t.ReplacePrefixMatch } } diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go index a7ee7a830dc0..a46747d5258f 100644 --- a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go +++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go @@ -355,11 +355,11 @@ func (r *HTTPRouteReconciler) gapiToKumaFilters( switch p.Type { case gatewayapi.FullPathHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_{ + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{ ReplaceFull: *p.ReplaceFullPath, } case gatewayapi.PrefixMatchHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_{ + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{ ReplacePrefixMatch: *p.ReplacePrefixMatch, } } @@ -414,11 +414,11 @@ func (r *HTTPRouteReconciler) gapiToKumaFilters( switch p.Type { case gatewayapi.FullPathHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull_{ + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{ ReplaceFull: *p.ReplaceFullPath, } case gatewayapi.PrefixMatchHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch_{ + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{ ReplacePrefixMatch: *p.ReplacePrefixMatch, } } From 6adfe9b26e95d93bdb2f9a71a36272b19f6aa503 Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Tue, 19 Jul 2022 12:40:50 +0200 Subject: [PATCH 5/8] refactor(gatewayapi): extract helper method Signed-off-by: Mike Beaumont --- .../gatewayapi/http_route_conversion.go | 59 ++++++++----------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go index a46747d5258f..7534177445b5 100644 --- a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go +++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_conversion.go @@ -296,6 +296,26 @@ func gapiToKumaMatch(match gatewayapi.HTTPRouteMatch) (*mesh_proto.MeshGatewayRo return kumaMatch, nil } +func pathRewriteToKuma(modifier gatewayapi.HTTPPathModifier) mesh_proto.MeshGatewayRoute_HttpRoute_Filter { + rewrite := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite{} + + switch modifier.Type { + case gatewayapi.FullPathHTTPPathModifier: + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{ + ReplaceFull: *modifier.ReplaceFullPath, + } + case gatewayapi.PrefixMatchHTTPPathModifier: + rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{ + ReplacePrefixMatch: *modifier.ReplacePrefixMatch, + } + } + return mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ + Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_{ + Rewrite: &rewrite, + }, + } +} + func (r *HTTPRouteReconciler) gapiToKumaFilters( ctx context.Context, mesh string, namespace string, filter gatewayapi.HTTPRouteFilter, ) ([]*mesh_proto.MeshGatewayRoute_HttpRoute_Filter, *ResolvedRefsConditionFalse, error) { @@ -351,23 +371,8 @@ func (r *HTTPRouteReconciler) gapiToKumaFilters( filter := filter.RequestRedirect if p := filter.Path; p != nil { - rewrite := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite{} - - switch p.Type { - case gatewayapi.FullPathHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{ - ReplaceFull: *p.ReplaceFullPath, - } - case gatewayapi.PrefixMatchHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{ - ReplacePrefixMatch: *p.ReplacePrefixMatch, - } - } - kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ - Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_{ - Rewrite: &rewrite, - }, - }) + filter := pathRewriteToKuma(*p) + kumaFilters = append(kumaFilters, &filter) } redirect := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Redirect{} @@ -410,24 +415,8 @@ func (r *HTTPRouteReconciler) gapiToKumaFilters( } if p := filter.Path; p != nil { - rewrite := mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite{} - - switch p.Type { - case gatewayapi.FullPathHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull{ - ReplaceFull: *p.ReplaceFullPath, - } - case gatewayapi.PrefixMatchHTTPPathModifier: - rewrite.Path = &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch{ - ReplacePrefixMatch: *p.ReplacePrefixMatch, - } - } - - kumaFilters = append(kumaFilters, &mesh_proto.MeshGatewayRoute_HttpRoute_Filter{ - Filter: &mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_{ - Rewrite: &rewrite, - }, - }) + filter := pathRewriteToKuma(*p) + kumaFilters = append(kumaFilters, &filter) } default: return nil, nil, fmt.Errorf("unsupported filter type %q", filter.Type) From f0ef8cef9649987d477d7873008e50f27217d209 Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Tue, 19 Jul 2022 15:48:51 +0200 Subject: [PATCH 6/8] test(e2e): fix path handling Signed-off-by: Mike Beaumont --- test/e2e/gateway/gateway_kubernetes.go | 3 +-- test/e2e/gateway/utils.go | 24 ++++++++++++++++++++---- test/framework/client/collect.go | 12 ++++++------ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/test/e2e/gateway/gateway_kubernetes.go b/test/e2e/gateway/gateway_kubernetes.go index be516bddd9fd..82e5dfede5c7 100644 --- a/test/e2e/gateway/gateway_kubernetes.go +++ b/test/e2e/gateway/gateway_kubernetes.go @@ -5,7 +5,6 @@ import ( "encoding/base64" "fmt" "net" - "net/url" "path" "strings" "text/template" @@ -291,7 +290,7 @@ spec: It("should rewrite HTTP requests", func() { expectedPath := path.Join("/test", GinkgoT().Name()) - targetPath := path.Join("prefix", "/test", url.PathEscape(GinkgoT().Name())) + targetPath := path.Join("prefix", "/test", GinkgoT().Name()) expectedHostname := "other.example.kuma.io" ProxyHTTPRequests(cluster, "kubernetes", net.JoinHostPort(GatewayAddress("edge-gateway"), GatewayPort), diff --git a/test/e2e/gateway/utils.go b/test/e2e/gateway/utils.go index 07fa939f60e8..5b2cbfce1867 100644 --- a/test/e2e/gateway/utils.go +++ b/test/e2e/gateway/utils.go @@ -4,6 +4,7 @@ import ( "fmt" "net/url" "path" + "strings" "github.com/gruntwork-io/terratest/modules/k8s" . "github.com/onsi/ginkgo/v2" @@ -43,20 +44,35 @@ func ProxyTcpRequest(cluster framework.Cluster, input, expectedResponse string, } func ProxySimpleRequests(cluster framework.Cluster, instance string, gateway string, opts ...client.CollectResponsesOptsFn) { - targetPath := path.Join("test", url.PathEscape(GinkgoT().Name())) - ProxyHTTPRequests(cluster, instance, gateway, targetPath, targetPath, "example.kuma.io", opts...) + targetPath := path.Join("test", GinkgoT().Name()) + ProxyHTTPRequests(cluster, instance, gateway, targetPath, "", "example.kuma.io", opts...) } // ProxySimpleRequests tests that basic HTTP requests are proxied to the echo-server. func ProxyHTTPRequests(cluster framework.Cluster, instance, gateway, targetPath, expectedPath, expectedHostname string, opts ...client.CollectResponsesOptsFn) { framework.Logf("expecting 200 response from %q", gateway) + if len(expectedPath) > 0 && !strings.HasPrefix(expectedPath, "/") { + expectedPath = fmt.Sprintf("/%s", expectedPath) + } Eventually(func(g Gomega) { - target := fmt.Sprintf("http://%s/%s", gateway, targetPath) + var escaped []string + for _, segment := range strings.Split(targetPath, "/") { + escaped = append(escaped, url.PathEscape(segment)) + } + + target := fmt.Sprintf("http://%s/%s", gateway, path.Join(escaped...)) opts = append(opts, client.WithHeader("Host", "example.kuma.io")) response, err := client.CollectResponse(cluster, "gateway-client", target, opts...) - g.Expect(err).To(Succeed()) + if expectedPath == "" { + expected := client.CollectOptions(target, opts...) + parsed, err := url.Parse(expected.URL) + g.Expect(err).NotTo(HaveOccurred()) + expectedPath = parsed.Path + } + + g.Expect(err).NotTo(HaveOccurred()) g.Expect(response.Instance).To(Equal(instance)) g.Expect(response.Received.Headers["Host"]).To(ContainElement(expectedHostname)) g.Expect(response.Received.Path).To(HavePrefix(expectedPath)) diff --git a/test/framework/client/collect.go b/test/framework/client/collect.go index c5c57620a1be..165252e20a1a 100644 --- a/test/framework/client/collect.go +++ b/test/framework/client/collect.go @@ -152,7 +152,7 @@ func FromKubernetesPod(namespace string, application string) CollectResponsesOpt } } -func collectOptions(requestURL string, options ...CollectResponsesOptsFn) CollectResponsesOpts { +func CollectOptions(requestURL string, options ...CollectResponsesOptsFn) CollectResponsesOpts { opts := DefaultCollectResponsesOpts() opts.URL = requestURL @@ -185,7 +185,7 @@ func CollectTCPResponse( stdin string, fn ...CollectResponsesOptsFn, ) (string, error) { - opts := collectOptions(destination, fn...) + opts := CollectOptions(destination, fn...) cmd := []string{"bash", "-c", fmt.Sprintf("echo '%s' | curl --max-time 3 %s", stdin, opts.ShellEscaped(opts.URL))} var appPodName string @@ -211,7 +211,7 @@ func CollectResponse( destination string, fn ...CollectResponsesOptsFn, ) (types.EchoResponse, error) { - opts := collectOptions(destination, fn...) + opts := CollectOptions(destination, fn...) cmd := collectCommand(opts, "curl", "--request", opts.Method, "--max-time", "3", @@ -245,7 +245,7 @@ func CollectResponseDirectly( destination string, fn ...CollectResponsesOptsFn, ) (types.EchoResponse, error) { - opts := collectOptions(destination, fn...) + opts := CollectOptions(destination, fn...) req, err := http.NewRequest(opts.Method, opts.URL, nil) if err != nil { @@ -320,7 +320,7 @@ type FailureResponse struct { // Curl JSON output is returned so the caller can inspect the failure to // see whether it was what was expected. func CollectFailure(cluster framework.Cluster, container, destination string, fn ...CollectResponsesOptsFn) (FailureResponse, error) { - opts := collectOptions(destination, fn...) + opts := CollectOptions(destination, fn...) cmd := collectCommand(opts, "curl", "--request", opts.Method, "--max-time", "3", @@ -381,7 +381,7 @@ func CollectFailure(cluster framework.Cluster, container, destination string, fn } func CollectResponses(cluster framework.Cluster, source, destination string, fn ...CollectResponsesOptsFn) ([]types.EchoResponse, error) { - opts := collectOptions(destination, fn...) + opts := CollectOptions(destination, fn...) mut := sync.Mutex{} var responses []types.EchoResponse From 4d40fa872cc0cc859bbae4a56dbb6aed2ad44001 Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Tue, 19 Jul 2022 16:34:22 +0200 Subject: [PATCH 7/8] refactor(gateway): var naming Signed-off-by: Mike Beaumont --- pkg/plugins/runtime/gateway/gateway_route_generator.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/plugins/runtime/gateway/gateway_route_generator.go b/pkg/plugins/runtime/gateway/gateway_route_generator.go index d4fa297df859..92d9f8279880 100644 --- a/pkg/plugins/runtime/gateway/gateway_route_generator.go +++ b/pkg/plugins/runtime/gateway/gateway_route_generator.go @@ -192,10 +192,10 @@ func makeHttpRouteEntry(name string, rule *mesh_proto.MeshGatewayRoute_HttpRoute entry.RequestHeaders.Delete = append( entry.RequestHeaders.Delete, h.GetRemove()...) - } else if h := f.GetRewrite(); h != nil { + } else if r := f.GetRewrite(); r != nil { rewrite := route.Rewrite{} - if p := h.GetPath(); p != nil { + if p := r.GetPath(); p != nil { switch t := p.(type) { case *mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplaceFull: rewrite.ReplaceFullPath = &t.ReplaceFull From 884e83f3cd48ab217ee554df5a97cef6c95d95cd Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Tue, 19 Jul 2022 16:46:32 +0200 Subject: [PATCH 8/8] feat(gateway): add validation for replacePrefixMatch Signed-off-by: Mike Beaumont --- .../apis/mesh/gateway_route_validator.go | 15 +++++++++++- .../apis/mesh/gateway_route_validator_test.go | 24 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pkg/core/resources/apis/mesh/gateway_route_validator.go b/pkg/core/resources/apis/mesh/gateway_route_validator.go index 2c8bfb36dcff..f766d0d67bb7 100644 --- a/pkg/core/resources/apis/mesh/gateway_route_validator.go +++ b/pkg/core/resources/apis/mesh/gateway_route_validator.go @@ -101,6 +101,7 @@ func validateMeshGatewayRouteHTTPRule( conf *mesh_proto.MeshGatewayRoute_HttpRoute_Rule, ) validators.ValidationError { var hasRedirect bool + var hasPrefixMatch bool if len(conf.GetMatches()) < 1 { return validators.MakeRequiredFieldErr(path.Field("matches")) @@ -110,6 +111,10 @@ func validateMeshGatewayRouteHTTPRule( for i, m := range conf.GetMatches() { err.Add(validateMeshGatewayRouteHTTPMatch(path.Field("matches").Index(i), m)) + + if p := m.GetPath(); p != nil && p.GetMatch() == mesh_proto.MeshGatewayRoute_HttpRoute_Match_Path_PREFIX { + hasPrefixMatch = true + } } for i, f := range conf.GetFilters() { @@ -117,7 +122,7 @@ func validateMeshGatewayRouteHTTPRule( hasRedirect = true } - err.Add(validateMeshGatewayRouteHTTPFilter(path.Field("filters").Index(i), f)) + err.Add(validateMeshGatewayRouteHTTPFilter(path.Field("filters").Index(i), f, hasPrefixMatch)) } // It doesn't make sense to redirect and also mirror or rewrite request headers. @@ -199,6 +204,7 @@ func validateMeshGatewayRouteHTTPMatch( func validateMeshGatewayRouteHTTPFilter( path validators.PathBuilder, conf *mesh_proto.MeshGatewayRoute_HttpRoute_Filter, + hasPrefixMatch bool, ) validators.ValidationError { var err validators.ValidationError @@ -267,6 +273,13 @@ func validateMeshGatewayRouteHTTPFilter( )) } + if m := conf.GetRewrite(); m != nil { + path := path.Field("rewrite") + if _, ok := m.GetPath().(*mesh_proto.MeshGatewayRoute_HttpRoute_Filter_Rewrite_ReplacePrefixMatch); ok && !hasPrefixMatch { + err.AddViolationAt(path.Field("replacePrefixMatch"), "cannot be used without a match on path prefix") + } + } + return err } diff --git a/pkg/core/resources/apis/mesh/gateway_route_validator_test.go b/pkg/core/resources/apis/mesh/gateway_route_validator_test.go index c23fae65dc1b..e2b6492cbb9c 100644 --- a/pkg/core/resources/apis/mesh/gateway_route_validator_test.go +++ b/pkg/core/resources/apis/mesh/gateway_route_validator_test.go @@ -649,6 +649,30 @@ conf: - weight: 5 destination: kuma.io/service: target-2 +`), + ErrorCase("prefix match replacement without prefix match filter", validators.Violation{ + Field: "conf.http.rules[0].filters[0].rewrite.replacePrefixMatch", + Message: "cannot be used without a match on path prefix", + }, ` +type: MeshGatewayRoute +name: route +mesh: default +selectors: +- match: + kuma.io/service: gateway +conf: + http: + rules: + - matches: + - path: + value: /exact_path + filters: + - rewrite: + replacePrefixMatch: "/" + backends: + - weight: 5 + destination: + kuma.io/service: target-2 `), ) })