Merge branch 'master' of https://github.com/apache/dubbo-kubernetes
# Conflicts:
# app/dubboctl/cmd/proxy.go
diff --git a/api/mesh/v1alpha1/dataplane.pb.go b/api/mesh/v1alpha1/dataplane.pb.go
index e44d81f..ac772cc 100644
--- a/api/mesh/v1alpha1/dataplane.pb.go
+++ b/api/mesh/v1alpha1/dataplane.pb.go
@@ -809,7 +809,7 @@
0x70, 0x68, 0x61, 0x31, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
- 0x86, 0x11, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x49, 0x0a,
+ 0x91, 0x11, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x49, 0x0a,
0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x29, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e,
@@ -938,18 +938,19 @@
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a,
- 0x77, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x13, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
- 0x6e, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0b,
- 0x12, 0x09, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 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, 0x0d, 0x3a, 0x0b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x70,
- 0x6c, 0x61, 0x6e, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0e, 0x3a, 0x0c, 0x12, 0x0a, 0x64, 0x61,
- 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x58, 0x01,
- 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68,
- 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75,
- 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x81, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x13, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c,
+ 0x61, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+ 0x0b, 0x12, 0x09, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 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, 0x04, 0x52, 0x02, 0x08, 0x01, 0xaa, 0x8c, 0x89, 0xa6,
+ 0x01, 0x0d, 0x3a, 0x0b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xaa,
+ 0x8c, 0x89, 0xa6, 0x01, 0x0e, 0x3a, 0x0c, 0x12, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
+ 0x6e, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x58, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+ 0x02, 0x68, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b,
+ 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65,
+ 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/mesh/v1alpha1/dataplane.proto b/api/mesh/v1alpha1/dataplane.proto
index c8a708e..382ec20 100644
--- a/api/mesh/v1alpha1/dataplane.proto
+++ b/api/mesh/v1alpha1/dataplane.proto
@@ -17,6 +17,7 @@
option (dubbo.mesh.resource).type = "Dataplane";
option (dubbo.mesh.resource).package = "mesh";
option (dubbo.mesh.resource).dds.send_to_zone = true;
+ option (dubbo.mesh.resource).dds.send_to_global = true;
option (dubbo.mesh.resource).ws.name = "dataplane";
option (dubbo.mesh.resource).ws.plural = "dataplanes";
option (dubbo.mesh.resource).scope_namespace = true;
diff --git a/api/mesh/v1alpha1/dds.pb.go b/api/mesh/v1alpha1/dds.pb.go
index 1ac46ed..f9ae117 100644
--- a/api/mesh/v1alpha1/dds.pb.go
+++ b/api/mesh/v1alpha1/dds.pb.go
@@ -171,528 +171,6 @@
return nil
}
-// XDSConfigRequest is a request for XDS Config Dump that is executed on Zone
-// CP.
-type XDSConfigRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // RequestID is a UUID of a request so we can correlate requests with response
- // on one stream.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Type of resource (Dataplane, ZoneIngress, ZoneEgress)
- ResourceType string `protobuf:"bytes,2,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"`
- // Name of the resource on which we execute config dump.
- ResourceName string `protobuf:"bytes,3,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
- // Mesh of the resource on which we execute config dump. Should be empty for
- // ZoneIngress, ZoneEgress.
- ResourceMesh string `protobuf:"bytes,4,opt,name=resource_mesh,json=resourceMesh,proto3" json:"resource_mesh,omitempty"`
-}
-
-func (x *XDSConfigRequest) Reset() {
- *x = XDSConfigRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *XDSConfigRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*XDSConfigRequest) ProtoMessage() {}
-
-func (x *XDSConfigRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[3]
- 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 XDSConfigRequest.ProtoReflect.Descriptor instead.
-func (*XDSConfigRequest) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_dds_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *XDSConfigRequest) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (x *XDSConfigRequest) GetResourceType() string {
- if x != nil {
- return x.ResourceType
- }
- return ""
-}
-
-func (x *XDSConfigRequest) GetResourceName() string {
- if x != nil {
- return x.ResourceName
- }
- return ""
-}
-
-func (x *XDSConfigRequest) GetResourceMesh() string {
- if x != nil {
- return x.ResourceMesh
- }
- return ""
-}
-
-// XDSConfigRequest is a response containing result of XDS Config Dump execution
-// on Zone CP.
-type XDSConfigResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // RequestID is a UUID that was set by the Global CP.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Types that are assignable to Result:
- //
- // *XDSConfigResponse_Error
- // *XDSConfigResponse_Config
- Result isXDSConfigResponse_Result `protobuf_oneof:"result"`
-}
-
-func (x *XDSConfigResponse) Reset() {
- *x = XDSConfigResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *XDSConfigResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*XDSConfigResponse) ProtoMessage() {}
-
-func (x *XDSConfigResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[4]
- 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 XDSConfigResponse.ProtoReflect.Descriptor instead.
-func (*XDSConfigResponse) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_dds_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *XDSConfigResponse) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (m *XDSConfigResponse) GetResult() isXDSConfigResponse_Result {
- if m != nil {
- return m.Result
- }
- return nil
-}
-
-func (x *XDSConfigResponse) GetError() string {
- if x, ok := x.GetResult().(*XDSConfigResponse_Error); ok {
- return x.Error
- }
- return ""
-}
-
-func (x *XDSConfigResponse) GetConfig() []byte {
- if x, ok := x.GetResult().(*XDSConfigResponse_Config); ok {
- return x.Config
- }
- return nil
-}
-
-type isXDSConfigResponse_Result interface {
- isXDSConfigResponse_Result()
-}
-
-type XDSConfigResponse_Error struct {
- // Error that was captured by the Zone CP when executing XDS Config Dump.
- Error string `protobuf:"bytes,2,opt,name=error,proto3,oneof"`
-}
-
-type XDSConfigResponse_Config struct {
- // The XDS Config that is a successful result of XDS Config dump execution.
- Config []byte `protobuf:"bytes,3,opt,name=config,proto3,oneof"`
-}
-
-func (*XDSConfigResponse_Error) isXDSConfigResponse_Result() {}
-
-func (*XDSConfigResponse_Config) isXDSConfigResponse_Result() {}
-
-// StatsRequest is a request for dubbo-dp stats that is executed on Zone CP.
-type StatsRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // RequestID is a UUID of a request so we can correlate requests with response
- // on one stream.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Type of resource (Dataplane, ZoneIngress, ZoneEgress)
- ResourceType string `protobuf:"bytes,2,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"`
- // Name of the resource on which we execute dubbo-dp stats request.
- ResourceName string `protobuf:"bytes,3,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
- // Mesh of the resource on which we execute dubbo-dp stats request.
- // Should be empty for ZoneIngress, ZoneEgress.
- ResourceMesh string `protobuf:"bytes,4,opt,name=resource_mesh,json=resourceMesh,proto3" json:"resource_mesh,omitempty"`
-}
-
-func (x *StatsRequest) Reset() {
- *x = StatsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *StatsRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*StatsRequest) ProtoMessage() {}
-
-func (x *StatsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[5]
- 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 StatsRequest.ProtoReflect.Descriptor instead.
-func (*StatsRequest) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_dds_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *StatsRequest) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (x *StatsRequest) GetResourceType() string {
- if x != nil {
- return x.ResourceType
- }
- return ""
-}
-
-func (x *StatsRequest) GetResourceName() string {
- if x != nil {
- return x.ResourceName
- }
- return ""
-}
-
-func (x *StatsRequest) GetResourceMesh() string {
- if x != nil {
- return x.ResourceMesh
- }
- return ""
-}
-
-// StatsResponse is a response containing result of dubbo-dp stats execution on
-// Zone CP.
-type StatsResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // RequestID is a UUID that was set by the Global CP.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Types that are assignable to Result:
- //
- // *StatsResponse_Error
- // *StatsResponse_Stats
- Result isStatsResponse_Result `protobuf_oneof:"result"`
-}
-
-func (x *StatsResponse) Reset() {
- *x = StatsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *StatsResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*StatsResponse) ProtoMessage() {}
-
-func (x *StatsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[6]
- 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 StatsResponse.ProtoReflect.Descriptor instead.
-func (*StatsResponse) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_dds_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *StatsResponse) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (m *StatsResponse) GetResult() isStatsResponse_Result {
- if m != nil {
- return m.Result
- }
- return nil
-}
-
-func (x *StatsResponse) GetError() string {
- if x, ok := x.GetResult().(*StatsResponse_Error); ok {
- return x.Error
- }
- return ""
-}
-
-func (x *StatsResponse) GetStats() []byte {
- if x, ok := x.GetResult().(*StatsResponse_Stats); ok {
- return x.Stats
- }
- return nil
-}
-
-type isStatsResponse_Result interface {
- isStatsResponse_Result()
-}
-
-type StatsResponse_Error struct {
- // Error that was captured by the Zone CP when executing dubbo-dp stats
- // request.
- Error string `protobuf:"bytes,2,opt,name=error,proto3,oneof"`
-}
-
-type StatsResponse_Stats struct {
- // The stats content that is a successful result of dubbo-dp stats
- // execution.
- Stats []byte `protobuf:"bytes,3,opt,name=stats,proto3,oneof"`
-}
-
-func (*StatsResponse_Error) isStatsResponse_Result() {}
-
-func (*StatsResponse_Stats) isStatsResponse_Result() {}
-
-// ClustersRequest is a request for dubbo-dp clusters that is executed on Zone
-// CP.
-type ClustersRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // RequestID is a UUID of a request so we can correlate requests with response
- // on one stream.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Type of resource (Dataplane, ZoneIngress, ZoneEgress)
- ResourceType string `protobuf:"bytes,2,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"`
- // Name of the resource on which we execute dubbo-dp clusters request.
- ResourceName string `protobuf:"bytes,3,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
- // Mesh of the resource on which we execute dubbo-dp clusters request.
- // Should be empty for ZoneIngress, ZoneEgress.
- ResourceMesh string `protobuf:"bytes,4,opt,name=resource_mesh,json=resourceMesh,proto3" json:"resource_mesh,omitempty"`
-}
-
-func (x *ClustersRequest) Reset() {
- *x = ClustersRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ClustersRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ClustersRequest) ProtoMessage() {}
-
-func (x *ClustersRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[7]
- 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 ClustersRequest.ProtoReflect.Descriptor instead.
-func (*ClustersRequest) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_dds_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *ClustersRequest) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (x *ClustersRequest) GetResourceType() string {
- if x != nil {
- return x.ResourceType
- }
- return ""
-}
-
-func (x *ClustersRequest) GetResourceName() string {
- if x != nil {
- return x.ResourceName
- }
- return ""
-}
-
-func (x *ClustersRequest) GetResourceMesh() string {
- if x != nil {
- return x.ResourceMesh
- }
- return ""
-}
-
-// ClustersResponse is a response containing result of dubbo-dp clusters
-// execution on Zone CP.
-type ClustersResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // RequestID is a UUID that was set by the Global CP.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Types that are assignable to Result:
- //
- // *ClustersResponse_Error
- // *ClustersResponse_Clusters
- Result isClustersResponse_Result `protobuf_oneof:"result"`
-}
-
-func (x *ClustersResponse) Reset() {
- *x = ClustersResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ClustersResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ClustersResponse) ProtoMessage() {}
-
-func (x *ClustersResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[8]
- 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 ClustersResponse.ProtoReflect.Descriptor instead.
-func (*ClustersResponse) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_dds_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *ClustersResponse) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (m *ClustersResponse) GetResult() isClustersResponse_Result {
- if m != nil {
- return m.Result
- }
- return nil
-}
-
-func (x *ClustersResponse) GetError() string {
- if x, ok := x.GetResult().(*ClustersResponse_Error); ok {
- return x.Error
- }
- return ""
-}
-
-func (x *ClustersResponse) GetClusters() []byte {
- if x, ok := x.GetResult().(*ClustersResponse_Clusters); ok {
- return x.Clusters
- }
- return nil
-}
-
-type isClustersResponse_Result interface {
- isClustersResponse_Result()
-}
-
-type ClustersResponse_Error struct {
- // Error that was captured by the Zone CP when executing dubbo-dp clusters
- // request.
- Error string `protobuf:"bytes,2,opt,name=error,proto3,oneof"`
-}
-
-type ClustersResponse_Clusters struct {
- // The clusters content that is a successful result of dubbo-dp clusters
- // execution.
- Clusters []byte `protobuf:"bytes,3,opt,name=clusters,proto3,oneof"`
-}
-
-func (*ClustersResponse_Error) isClustersResponse_Result() {}
-
-func (*ClustersResponse_Clusters) isClustersResponse_Result() {}
-
type DubboResource_Meta struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -707,7 +185,7 @@
func (x *DubboResource_Meta) Reset() {
*x = DubboResource_Meta{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[9]
+ mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -720,7 +198,7 @@
func (*DubboResource_Meta) ProtoMessage() {}
func (x *DubboResource_Meta) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[9]
+ mi := &file_api_mesh_v1alpha1_dds_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -804,114 +282,45 @@
0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61,
- 0x6c, 0x22, 0xa0, 0x01, 0x0a, 0x10, 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
- 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x68,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x4d, 0x65, 0x73, 0x68, 0x22, 0x6e, 0x0a, 0x11, 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69,
- 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f,
- 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
- 0x12, 0x18, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c,
- 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23,
- 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d,
- 0x65, 0x73, 0x68, 0x22, 0x68, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x05, 0x73,
- 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74,
- 0x61, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9f, 0x01,
- 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64,
- 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x22,
- 0x71, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x08, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x08,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x32, 0x90, 0x01, 0x0a, 0x15, 0x44, 0x75, 0x62, 0x62, 0x6f, 0x44, 0x69, 0x73, 0x63,
- 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x14,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x62, 0x62, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76,
- 0x33, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
- 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e,
- 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x28, 0x01, 0x30, 0x01, 0x32, 0xa0, 0x03, 0x0a, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
- 0x44, 0x44, 0x53, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x26,
- 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
- 0x70, 0x68, 0x61, 0x31, 0x2e, 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x25, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
- 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x58, 0x44, 0x53,
- 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30,
- 0x01, 0x12, 0x58, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x73,
- 0x12, 0x22, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x21, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
- 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x0e, 0x53,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x25, 0x2e,
- 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x24, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
- 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x68,
- 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2b, 0x2e,
- 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
- 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x75, 0x62,
- 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8e, 0x02, 0x0a, 0x0e, 0x44, 0x44, 0x53,
- 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7d, 0x0a, 0x10, 0x47,
- 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54, 0x6f, 0x5a, 0x6f, 0x6e, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x12,
- 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
- 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c,
- 0x74, 0x61, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
- 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e,
- 0x44, 0x65, 0x6c, 0x74, 0x61, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x7d, 0x0a, 0x10, 0x5a, 0x6f,
- 0x6e, 0x65, 0x54, 0x6f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x32,
- 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64,
- 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x74,
- 0x61, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x1a, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
- 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e,
- 0x44, 0x65, 0x6c, 0x74, 0x61, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74,
- 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64,
- 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f,
- 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
- 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x6c, 0x32, 0x90, 0x01, 0x0a, 0x15, 0x44, 0x75, 0x62, 0x62, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f,
+ 0x76, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x53,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x62, 0x62, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33,
+ 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44,
+ 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x28, 0x01, 0x30, 0x01, 0x32, 0x7c, 0x0a, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x44,
+ 0x53, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c,
+ 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
+ 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x6f,
+ 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
+ 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x48,
+ 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x32, 0x8e, 0x02, 0x0a, 0x0e, 0x44, 0x44, 0x53, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7d, 0x0a, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x54,
+ 0x6f, 0x5a, 0x6f, 0x6e, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
+ 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76,
+ 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x44, 0x69, 0x73, 0x63,
+ 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65,
+ 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73,
+ 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x44,
+ 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x28, 0x01, 0x30, 0x01, 0x12, 0x7d, 0x0a, 0x10, 0x5a, 0x6f, 0x6e, 0x65, 0x54, 0x6f, 0x47, 0x6c,
+ 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x32, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79,
+ 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65,
+ 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x44, 0x69, 0x73, 0x63, 0x6f,
+ 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x31, 0x2e, 0x65,
+ 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73,
+ 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x44,
+ 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28,
+ 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b,
+ 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65,
+ 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x33,
}
var (
@@ -926,47 +335,35 @@
return file_api_mesh_v1alpha1_dds_proto_rawDescData
}
-var file_api_mesh_v1alpha1_dds_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_api_mesh_v1alpha1_dds_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
var file_api_mesh_v1alpha1_dds_proto_goTypes = []interface{}{
(*DubboResource)(nil), // 0: dubbo.mesh.v1alpha1.DubboResource
(*ZoneHealthCheckRequest)(nil), // 1: dubbo.mesh.v1alpha1.ZoneHealthCheckRequest
(*ZoneHealthCheckResponse)(nil), // 2: dubbo.mesh.v1alpha1.ZoneHealthCheckResponse
- (*XDSConfigRequest)(nil), // 3: dubbo.mesh.v1alpha1.XDSConfigRequest
- (*XDSConfigResponse)(nil), // 4: dubbo.mesh.v1alpha1.XDSConfigResponse
- (*StatsRequest)(nil), // 5: dubbo.mesh.v1alpha1.StatsRequest
- (*StatsResponse)(nil), // 6: dubbo.mesh.v1alpha1.StatsResponse
- (*ClustersRequest)(nil), // 7: dubbo.mesh.v1alpha1.ClustersRequest
- (*ClustersResponse)(nil), // 8: dubbo.mesh.v1alpha1.ClustersResponse
- (*DubboResource_Meta)(nil), // 9: dubbo.mesh.v1alpha1.DubboResource.Meta
- nil, // 10: dubbo.mesh.v1alpha1.DubboResource.Meta.LabelsEntry
- (*anypb.Any)(nil), // 11: google.protobuf.Any
- (*durationpb.Duration)(nil), // 12: google.protobuf.Duration
- (*v3.DiscoveryRequest)(nil), // 13: envoy.service.discovery.v3.DiscoveryRequest
- (*v3.DeltaDiscoveryRequest)(nil), // 14: envoy.service.discovery.v3.DeltaDiscoveryRequest
- (*v3.DeltaDiscoveryResponse)(nil), // 15: envoy.service.discovery.v3.DeltaDiscoveryResponse
- (*v3.DiscoveryResponse)(nil), // 16: envoy.service.discovery.v3.DiscoveryResponse
+ (*DubboResource_Meta)(nil), // 3: dubbo.mesh.v1alpha1.DubboResource.Meta
+ nil, // 4: dubbo.mesh.v1alpha1.DubboResource.Meta.LabelsEntry
+ (*anypb.Any)(nil), // 5: google.protobuf.Any
+ (*durationpb.Duration)(nil), // 6: google.protobuf.Duration
+ (*v3.DiscoveryRequest)(nil), // 7: envoy.service.discovery.v3.DiscoveryRequest
+ (*v3.DeltaDiscoveryRequest)(nil), // 8: envoy.service.discovery.v3.DeltaDiscoveryRequest
+ (*v3.DeltaDiscoveryResponse)(nil), // 9: envoy.service.discovery.v3.DeltaDiscoveryResponse
+ (*v3.DiscoveryResponse)(nil), // 10: envoy.service.discovery.v3.DiscoveryResponse
}
var file_api_mesh_v1alpha1_dds_proto_depIdxs = []int32{
- 9, // 0: dubbo.mesh.v1alpha1.DubboResource.meta:type_name -> dubbo.mesh.v1alpha1.DubboResource.Meta
- 11, // 1: dubbo.mesh.v1alpha1.DubboResource.spec:type_name -> google.protobuf.Any
- 12, // 2: dubbo.mesh.v1alpha1.ZoneHealthCheckResponse.interval:type_name -> google.protobuf.Duration
- 10, // 3: dubbo.mesh.v1alpha1.DubboResource.Meta.labels:type_name -> dubbo.mesh.v1alpha1.DubboResource.Meta.LabelsEntry
- 13, // 4: dubbo.mesh.v1alpha1.DubboDiscoveryService.StreamDubboResources:input_type -> envoy.service.discovery.v3.DiscoveryRequest
- 4, // 5: dubbo.mesh.v1alpha1.GlobalDDSService.StreamXDSConfigs:input_type -> dubbo.mesh.v1alpha1.XDSConfigResponse
- 6, // 6: dubbo.mesh.v1alpha1.GlobalDDSService.StreamStats:input_type -> dubbo.mesh.v1alpha1.StatsResponse
- 8, // 7: dubbo.mesh.v1alpha1.GlobalDDSService.StreamClusters:input_type -> dubbo.mesh.v1alpha1.ClustersResponse
- 1, // 8: dubbo.mesh.v1alpha1.GlobalDDSService.HealthCheck:input_type -> dubbo.mesh.v1alpha1.ZoneHealthCheckRequest
- 14, // 9: dubbo.mesh.v1alpha1.DDSSyncService.GlobalToZoneSync:input_type -> envoy.service.discovery.v3.DeltaDiscoveryRequest
- 15, // 10: dubbo.mesh.v1alpha1.DDSSyncService.ZoneToGlobalSync:input_type -> envoy.service.discovery.v3.DeltaDiscoveryResponse
- 16, // 11: dubbo.mesh.v1alpha1.DubboDiscoveryService.StreamDubboResources:output_type -> envoy.service.discovery.v3.DiscoveryResponse
- 3, // 12: dubbo.mesh.v1alpha1.GlobalDDSService.StreamXDSConfigs:output_type -> dubbo.mesh.v1alpha1.XDSConfigRequest
- 5, // 13: dubbo.mesh.v1alpha1.GlobalDDSService.StreamStats:output_type -> dubbo.mesh.v1alpha1.StatsRequest
- 7, // 14: dubbo.mesh.v1alpha1.GlobalDDSService.StreamClusters:output_type -> dubbo.mesh.v1alpha1.ClustersRequest
- 2, // 15: dubbo.mesh.v1alpha1.GlobalDDSService.HealthCheck:output_type -> dubbo.mesh.v1alpha1.ZoneHealthCheckResponse
- 15, // 16: dubbo.mesh.v1alpha1.DDSSyncService.GlobalToZoneSync:output_type -> envoy.service.discovery.v3.DeltaDiscoveryResponse
- 14, // 17: dubbo.mesh.v1alpha1.DDSSyncService.ZoneToGlobalSync:output_type -> envoy.service.discovery.v3.DeltaDiscoveryRequest
- 11, // [11:18] is the sub-list for method output_type
- 4, // [4:11] is the sub-list for method input_type
+ 3, // 0: dubbo.mesh.v1alpha1.DubboResource.meta:type_name -> dubbo.mesh.v1alpha1.DubboResource.Meta
+ 5, // 1: dubbo.mesh.v1alpha1.DubboResource.spec:type_name -> google.protobuf.Any
+ 6, // 2: dubbo.mesh.v1alpha1.ZoneHealthCheckResponse.interval:type_name -> google.protobuf.Duration
+ 4, // 3: dubbo.mesh.v1alpha1.DubboResource.Meta.labels:type_name -> dubbo.mesh.v1alpha1.DubboResource.Meta.LabelsEntry
+ 7, // 4: dubbo.mesh.v1alpha1.DubboDiscoveryService.StreamDubboResources:input_type -> envoy.service.discovery.v3.DiscoveryRequest
+ 1, // 5: dubbo.mesh.v1alpha1.GlobalDDSService.HealthCheck:input_type -> dubbo.mesh.v1alpha1.ZoneHealthCheckRequest
+ 8, // 6: dubbo.mesh.v1alpha1.DDSSyncService.GlobalToZoneSync:input_type -> envoy.service.discovery.v3.DeltaDiscoveryRequest
+ 9, // 7: dubbo.mesh.v1alpha1.DDSSyncService.ZoneToGlobalSync:input_type -> envoy.service.discovery.v3.DeltaDiscoveryResponse
+ 10, // 8: dubbo.mesh.v1alpha1.DubboDiscoveryService.StreamDubboResources:output_type -> envoy.service.discovery.v3.DiscoveryResponse
+ 2, // 9: dubbo.mesh.v1alpha1.GlobalDDSService.HealthCheck:output_type -> dubbo.mesh.v1alpha1.ZoneHealthCheckResponse
+ 9, // 10: dubbo.mesh.v1alpha1.DDSSyncService.GlobalToZoneSync:output_type -> envoy.service.discovery.v3.DeltaDiscoveryResponse
+ 8, // 11: dubbo.mesh.v1alpha1.DDSSyncService.ZoneToGlobalSync:output_type -> envoy.service.discovery.v3.DeltaDiscoveryRequest
+ 8, // [8:12] is the sub-list for method output_type
+ 4, // [4:8] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
@@ -1015,78 +412,6 @@
}
}
file_api_mesh_v1alpha1_dds_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*XDSConfigRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*XDSConfigResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*StatsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*StatsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ClustersRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ClustersResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DubboResource_Meta); i {
case 0:
return &v.state
@@ -1099,25 +424,13 @@
}
}
}
- file_api_mesh_v1alpha1_dds_proto_msgTypes[4].OneofWrappers = []interface{}{
- (*XDSConfigResponse_Error)(nil),
- (*XDSConfigResponse_Config)(nil),
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[6].OneofWrappers = []interface{}{
- (*StatsResponse_Error)(nil),
- (*StatsResponse_Stats)(nil),
- }
- file_api_mesh_v1alpha1_dds_proto_msgTypes[8].OneofWrappers = []interface{}{
- (*ClustersResponse_Error)(nil),
- (*ClustersResponse_Clusters)(nil),
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_mesh_v1alpha1_dds_proto_rawDesc,
NumEnums: 0,
- NumMessages: 11,
+ NumMessages: 5,
NumExtensions: 0,
NumServices: 3,
},
diff --git a/api/mesh/v1alpha1/dds.proto b/api/mesh/v1alpha1/dds.proto
index 70de3a4..7db41de 100644
--- a/api/mesh/v1alpha1/dds.proto
+++ b/api/mesh/v1alpha1/dds.proto
@@ -33,21 +33,6 @@
}
service GlobalDDSService {
- // StreamXDSConfigs is logically a service exposed by Zone CP so Global CP can
- // execute Config Dumps. It is however represented by bi-directional streaming
- // to leverage existing connection from Zone CP to Global CP.
- rpc StreamXDSConfigs(stream XDSConfigResponse)
- returns (stream XDSConfigRequest);
- // StreamStats is logically a service exposed by Zone CP so Global CP can
- // execute dubbo-dp stats requests. It is however represented by
- // bi-directional streaming to leverage existing connection from Zone CP to
- // Global CP.
- rpc StreamStats(stream StatsResponse) returns (stream StatsRequest);
- // StreamStats is logically a service exposed by Zone CP so Global CP can
- // execute dubbo-dp clusters request. It is however represented by
- // bi-directional streaming to leverage existing connection from Zone CP to
- // Global CP.
- rpc StreamClusters(stream ClustersResponse) returns (stream ClustersRequest);
// HealthCheck allows us to implement a health check that works across
// proxies, unlike HTTP/2 PING frames.
rpc HealthCheck(ZoneHealthCheckRequest) returns (ZoneHealthCheckResponse);
@@ -69,96 +54,3 @@
rpc ZoneToGlobalSync(stream envoy.service.discovery.v3.DeltaDiscoveryResponse)
returns (stream envoy.service.discovery.v3.DeltaDiscoveryRequest);
}
-
-// XDSConfigRequest is a request for XDS Config Dump that is executed on Zone
-// CP.
-message XDSConfigRequest {
- // RequestID is a UUID of a request so we can correlate requests with response
- // on one stream.
- string request_id = 1;
-
- // Type of resource (Dataplane, ZoneIngress, ZoneEgress)
- string resource_type = 2;
- // Name of the resource on which we execute config dump.
- string resource_name = 3;
- // Mesh of the resource on which we execute config dump. Should be empty for
- // ZoneIngress, ZoneEgress.
- string resource_mesh = 4;
-}
-
-// XDSConfigRequest is a response containing result of XDS Config Dump execution
-// on Zone CP.
-message XDSConfigResponse {
- // RequestID is a UUID that was set by the Global CP.
- string request_id = 1;
-
- oneof result {
- // Error that was captured by the Zone CP when executing XDS Config Dump.
- string error = 2;
- // The XDS Config that is a successful result of XDS Config dump execution.
- bytes config = 3;
- }
-}
-
-// StatsRequest is a request for dubbo-dp stats that is executed on Zone CP.
-message StatsRequest {
- // RequestID is a UUID of a request so we can correlate requests with response
- // on one stream.
- string request_id = 1;
-
- // Type of resource (Dataplane, ZoneIngress, ZoneEgress)
- string resource_type = 2;
- // Name of the resource on which we execute dubbo-dp stats request.
- string resource_name = 3;
- // Mesh of the resource on which we execute dubbo-dp stats request.
- // Should be empty for ZoneIngress, ZoneEgress.
- string resource_mesh = 4;
-}
-
-// StatsResponse is a response containing result of dubbo-dp stats execution on
-// Zone CP.
-message StatsResponse {
- // RequestID is a UUID that was set by the Global CP.
- string request_id = 1;
-
- oneof result {
- // Error that was captured by the Zone CP when executing dubbo-dp stats
- // request.
- string error = 2;
- // The stats content that is a successful result of dubbo-dp stats
- // execution.
- bytes stats = 3;
- }
-}
-
-// ClustersRequest is a request for dubbo-dp clusters that is executed on Zone
-// CP.
-message ClustersRequest {
- // RequestID is a UUID of a request so we can correlate requests with response
- // on one stream.
- string request_id = 1;
-
- // Type of resource (Dataplane, ZoneIngress, ZoneEgress)
- string resource_type = 2;
- // Name of the resource on which we execute dubbo-dp clusters request.
- string resource_name = 3;
- // Mesh of the resource on which we execute dubbo-dp clusters request.
- // Should be empty for ZoneIngress, ZoneEgress.
- string resource_mesh = 4;
-}
-
-// ClustersResponse is a response containing result of dubbo-dp clusters
-// execution on Zone CP.
-message ClustersResponse {
- // RequestID is a UUID that was set by the Global CP.
- string request_id = 1;
-
- oneof result {
- // Error that was captured by the Zone CP when executing dubbo-dp clusters
- // request.
- string error = 2;
- // The clusters content that is a successful result of dubbo-dp clusters
- // execution.
- bytes clusters = 3;
- }
-}
diff --git a/api/mesh/v1alpha1/dds_grpc.pb.go b/api/mesh/v1alpha1/dds_grpc.pb.go
index c90de7b..e937cd2 100644
--- a/api/mesh/v1alpha1/dds_grpc.pb.go
+++ b/api/mesh/v1alpha1/dds_grpc.pb.go
@@ -141,20 +141,6 @@
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type GlobalDDSServiceClient interface {
- // StreamXDSConfigs is logically a service exposed by Zone CP so Global CP can
- // execute Config Dumps. It is however represented by bi-directional streaming
- // to leverage existing connection from Zone CP to Global CP.
- StreamXDSConfigs(ctx context.Context, opts ...grpc.CallOption) (GlobalDDSService_StreamXDSConfigsClient, error)
- // StreamStats is logically a service exposed by Zone CP so Global CP can
- // execute dubbo-dp stats requests. It is however represented by
- // bi-directional streaming to leverage existing connection from Zone CP to
- // Global CP.
- StreamStats(ctx context.Context, opts ...grpc.CallOption) (GlobalDDSService_StreamStatsClient, error)
- // StreamStats is logically a service exposed by Zone CP so Global CP can
- // execute dubbo-dp clusters request. It is however represented by
- // bi-directional streaming to leverage existing connection from Zone CP to
- // Global CP.
- StreamClusters(ctx context.Context, opts ...grpc.CallOption) (GlobalDDSService_StreamClustersClient, error)
// HealthCheck allows us to implement a health check that works across
// proxies, unlike HTTP/2 PING frames.
HealthCheck(ctx context.Context, in *ZoneHealthCheckRequest, opts ...grpc.CallOption) (*ZoneHealthCheckResponse, error)
@@ -168,99 +154,6 @@
return &globalDDSServiceClient{cc}
}
-func (c *globalDDSServiceClient) StreamXDSConfigs(ctx context.Context, opts ...grpc.CallOption) (GlobalDDSService_StreamXDSConfigsClient, error) {
- stream, err := c.cc.NewStream(ctx, &GlobalDDSService_ServiceDesc.Streams[0], "/dubbo.mesh.v1alpha1.GlobalDDSService/StreamXDSConfigs", opts...)
- if err != nil {
- return nil, err
- }
- x := &globalDDSServiceStreamXDSConfigsClient{stream}
- return x, nil
-}
-
-type GlobalDDSService_StreamXDSConfigsClient interface {
- Send(*XDSConfigResponse) error
- Recv() (*XDSConfigRequest, error)
- grpc.ClientStream
-}
-
-type globalDDSServiceStreamXDSConfigsClient struct {
- grpc.ClientStream
-}
-
-func (x *globalDDSServiceStreamXDSConfigsClient) Send(m *XDSConfigResponse) error {
- return x.ClientStream.SendMsg(m)
-}
-
-func (x *globalDDSServiceStreamXDSConfigsClient) Recv() (*XDSConfigRequest, error) {
- m := new(XDSConfigRequest)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func (c *globalDDSServiceClient) StreamStats(ctx context.Context, opts ...grpc.CallOption) (GlobalDDSService_StreamStatsClient, error) {
- stream, err := c.cc.NewStream(ctx, &GlobalDDSService_ServiceDesc.Streams[1], "/dubbo.mesh.v1alpha1.GlobalDDSService/StreamStats", opts...)
- if err != nil {
- return nil, err
- }
- x := &globalDDSServiceStreamStatsClient{stream}
- return x, nil
-}
-
-type GlobalDDSService_StreamStatsClient interface {
- Send(*StatsResponse) error
- Recv() (*StatsRequest, error)
- grpc.ClientStream
-}
-
-type globalDDSServiceStreamStatsClient struct {
- grpc.ClientStream
-}
-
-func (x *globalDDSServiceStreamStatsClient) Send(m *StatsResponse) error {
- return x.ClientStream.SendMsg(m)
-}
-
-func (x *globalDDSServiceStreamStatsClient) Recv() (*StatsRequest, error) {
- m := new(StatsRequest)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func (c *globalDDSServiceClient) StreamClusters(ctx context.Context, opts ...grpc.CallOption) (GlobalDDSService_StreamClustersClient, error) {
- stream, err := c.cc.NewStream(ctx, &GlobalDDSService_ServiceDesc.Streams[2], "/dubbo.mesh.v1alpha1.GlobalDDSService/StreamClusters", opts...)
- if err != nil {
- return nil, err
- }
- x := &globalDDSServiceStreamClustersClient{stream}
- return x, nil
-}
-
-type GlobalDDSService_StreamClustersClient interface {
- Send(*ClustersResponse) error
- Recv() (*ClustersRequest, error)
- grpc.ClientStream
-}
-
-type globalDDSServiceStreamClustersClient struct {
- grpc.ClientStream
-}
-
-func (x *globalDDSServiceStreamClustersClient) Send(m *ClustersResponse) error {
- return x.ClientStream.SendMsg(m)
-}
-
-func (x *globalDDSServiceStreamClustersClient) Recv() (*ClustersRequest, error) {
- m := new(ClustersRequest)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
func (c *globalDDSServiceClient) HealthCheck(ctx context.Context, in *ZoneHealthCheckRequest, opts ...grpc.CallOption) (*ZoneHealthCheckResponse, error) {
out := new(ZoneHealthCheckResponse)
err := c.cc.Invoke(ctx, "/dubbo.mesh.v1alpha1.GlobalDDSService/HealthCheck", in, out, opts...)
@@ -274,20 +167,6 @@
// All implementations must embed UnimplementedGlobalDDSServiceServer
// for forward compatibility
type GlobalDDSServiceServer interface {
- // StreamXDSConfigs is logically a service exposed by Zone CP so Global CP can
- // execute Config Dumps. It is however represented by bi-directional streaming
- // to leverage existing connection from Zone CP to Global CP.
- StreamXDSConfigs(GlobalDDSService_StreamXDSConfigsServer) error
- // StreamStats is logically a service exposed by Zone CP so Global CP can
- // execute dubbo-dp stats requests. It is however represented by
- // bi-directional streaming to leverage existing connection from Zone CP to
- // Global CP.
- StreamStats(GlobalDDSService_StreamStatsServer) error
- // StreamStats is logically a service exposed by Zone CP so Global CP can
- // execute dubbo-dp clusters request. It is however represented by
- // bi-directional streaming to leverage existing connection from Zone CP to
- // Global CP.
- StreamClusters(GlobalDDSService_StreamClustersServer) error
// HealthCheck allows us to implement a health check that works across
// proxies, unlike HTTP/2 PING frames.
HealthCheck(context.Context, *ZoneHealthCheckRequest) (*ZoneHealthCheckResponse, error)
@@ -298,15 +177,6 @@
type UnimplementedGlobalDDSServiceServer struct {
}
-func (UnimplementedGlobalDDSServiceServer) StreamXDSConfigs(GlobalDDSService_StreamXDSConfigsServer) error {
- return status.Errorf(codes.Unimplemented, "method StreamXDSConfigs not implemented")
-}
-func (UnimplementedGlobalDDSServiceServer) StreamStats(GlobalDDSService_StreamStatsServer) error {
- return status.Errorf(codes.Unimplemented, "method StreamStats not implemented")
-}
-func (UnimplementedGlobalDDSServiceServer) StreamClusters(GlobalDDSService_StreamClustersServer) error {
- return status.Errorf(codes.Unimplemented, "method StreamClusters not implemented")
-}
func (UnimplementedGlobalDDSServiceServer) HealthCheck(context.Context, *ZoneHealthCheckRequest) (*ZoneHealthCheckResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented")
}
@@ -323,84 +193,6 @@
s.RegisterService(&GlobalDDSService_ServiceDesc, srv)
}
-func _GlobalDDSService_StreamXDSConfigs_Handler(srv interface{}, stream grpc.ServerStream) error {
- return srv.(GlobalDDSServiceServer).StreamXDSConfigs(&globalDDSServiceStreamXDSConfigsServer{stream})
-}
-
-type GlobalDDSService_StreamXDSConfigsServer interface {
- Send(*XDSConfigRequest) error
- Recv() (*XDSConfigResponse, error)
- grpc.ServerStream
-}
-
-type globalDDSServiceStreamXDSConfigsServer struct {
- grpc.ServerStream
-}
-
-func (x *globalDDSServiceStreamXDSConfigsServer) Send(m *XDSConfigRequest) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func (x *globalDDSServiceStreamXDSConfigsServer) Recv() (*XDSConfigResponse, error) {
- m := new(XDSConfigResponse)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func _GlobalDDSService_StreamStats_Handler(srv interface{}, stream grpc.ServerStream) error {
- return srv.(GlobalDDSServiceServer).StreamStats(&globalDDSServiceStreamStatsServer{stream})
-}
-
-type GlobalDDSService_StreamStatsServer interface {
- Send(*StatsRequest) error
- Recv() (*StatsResponse, error)
- grpc.ServerStream
-}
-
-type globalDDSServiceStreamStatsServer struct {
- grpc.ServerStream
-}
-
-func (x *globalDDSServiceStreamStatsServer) Send(m *StatsRequest) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func (x *globalDDSServiceStreamStatsServer) Recv() (*StatsResponse, error) {
- m := new(StatsResponse)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func _GlobalDDSService_StreamClusters_Handler(srv interface{}, stream grpc.ServerStream) error {
- return srv.(GlobalDDSServiceServer).StreamClusters(&globalDDSServiceStreamClustersServer{stream})
-}
-
-type GlobalDDSService_StreamClustersServer interface {
- Send(*ClustersRequest) error
- Recv() (*ClustersResponse, error)
- grpc.ServerStream
-}
-
-type globalDDSServiceStreamClustersServer struct {
- grpc.ServerStream
-}
-
-func (x *globalDDSServiceStreamClustersServer) Send(m *ClustersRequest) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func (x *globalDDSServiceStreamClustersServer) Recv() (*ClustersResponse, error) {
- m := new(ClustersResponse)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
func _GlobalDDSService_HealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ZoneHealthCheckRequest)
if err := dec(in); err != nil {
@@ -431,26 +223,7 @@
Handler: _GlobalDDSService_HealthCheck_Handler,
},
},
- Streams: []grpc.StreamDesc{
- {
- StreamName: "StreamXDSConfigs",
- Handler: _GlobalDDSService_StreamXDSConfigs_Handler,
- ServerStreams: true,
- ClientStreams: true,
- },
- {
- StreamName: "StreamStats",
- Handler: _GlobalDDSService_StreamStats_Handler,
- ServerStreams: true,
- ClientStreams: true,
- },
- {
- StreamName: "StreamClusters",
- Handler: _GlobalDDSService_StreamClusters_Handler,
- ServerStreams: true,
- ClientStreams: true,
- },
- },
+ Streams: []grpc.StreamDesc{},
Metadata: "api/mesh/v1alpha1/dds.proto",
}
diff --git a/api/mesh/v1alpha1/envoy_admin_inter_cp_forward.pb.go b/api/mesh/v1alpha1/envoy_admin_inter_cp_forward.pb.go
deleted file mode 100644
index 8b1f5f9..0000000
--- a/api/mesh/v1alpha1/envoy_admin_inter_cp_forward.pb.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.28.1
-// protoc v3.20.0
-// source: api/mesh/v1alpha1/envoy_admin_inter_cp_forward.proto
-
-package v1alpha1
-
-import (
- reflect "reflect"
-)
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-var File_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto protoreflect.FileDescriptor
-
-var file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_rawDesc = []byte{
- 0x0a, 0x34, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f,
- 0x69, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
- 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x1b, 0x61, 0x70, 0x69,
- 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64,
- 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xa6, 0x02, 0x0a, 0x1f, 0x49, 0x6e, 0x74,
- 0x65, 0x72, 0x43, 0x50, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x46, 0x6f,
- 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x09,
- 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x64, 0x75, 0x62, 0x62,
- 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
- 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x26, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x58, 0x44, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74,
- 0x73, 0x12, 0x21, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
- 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
- 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
- 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x75, 0x62,
- 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
- 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62,
- 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68,
- 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x33,
-}
-
-var file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_goTypes = []interface{}{
- (*XDSConfigRequest)(nil), // 0: dubbo.mesh.v1alpha1.XDSConfigRequest
- (*StatsRequest)(nil), // 1: dubbo.mesh.v1alpha1.StatsRequest
- (*ClustersRequest)(nil), // 2: dubbo.mesh.v1alpha1.ClustersRequest
- (*XDSConfigResponse)(nil), // 3: dubbo.mesh.v1alpha1.XDSConfigResponse
- (*StatsResponse)(nil), // 4: dubbo.mesh.v1alpha1.StatsResponse
- (*ClustersResponse)(nil), // 5: dubbo.mesh.v1alpha1.ClustersResponse
-}
-var file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_depIdxs = []int32{
- 0, // 0: dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService.XDSConfig:input_type -> dubbo.mesh.v1alpha1.XDSConfigRequest
- 1, // 1: dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService.Stats:input_type -> dubbo.mesh.v1alpha1.StatsRequest
- 2, // 2: dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService.Clusters:input_type -> dubbo.mesh.v1alpha1.ClustersRequest
- 3, // 3: dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService.XDSConfig:output_type -> dubbo.mesh.v1alpha1.XDSConfigResponse
- 4, // 4: dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService.Stats:output_type -> dubbo.mesh.v1alpha1.StatsResponse
- 5, // 5: dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService.Clusters:output_type -> dubbo.mesh.v1alpha1.ClustersResponse
- 3, // [3:6] is the sub-list for method output_type
- 0, // [0:3] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_init() }
-func file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_init() {
- if File_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto != nil {
- return
- }
- file_api_mesh_v1alpha1_dds_proto_init()
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 0,
- NumExtensions: 0,
- NumServices: 1,
- },
- GoTypes: file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_goTypes,
- DependencyIndexes: file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_depIdxs,
- }.Build()
- File_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto = out.File
- file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_rawDesc = nil
- file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_goTypes = nil
- file_api_mesh_v1alpha1_envoy_admin_inter_cp_forward_proto_depIdxs = nil
-}
diff --git a/api/mesh/v1alpha1/envoy_admin_inter_cp_forward.proto b/api/mesh/v1alpha1/envoy_admin_inter_cp_forward.proto
deleted file mode 100644
index 91cd601..0000000
--- a/api/mesh/v1alpha1/envoy_admin_inter_cp_forward.proto
+++ /dev/null
@@ -1,13 +0,0 @@
-syntax = "proto3";
-
-package dubbo.mesh.v1alpha1;
-
-option go_package = "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1";
-
-import "api/mesh/v1alpha1/dds.proto";
-
-service InterCPEnvoyAdminForwardService {
- rpc XDSConfig(XDSConfigRequest) returns (XDSConfigResponse);
- rpc Stats(StatsRequest) returns (StatsResponse);
- rpc Clusters(ClustersRequest) returns (ClustersResponse);
-}
diff --git a/api/mesh/v1alpha1/envoy_admin_inter_cp_forward_grpc.pb.go b/api/mesh/v1alpha1/envoy_admin_inter_cp_forward_grpc.pb.go
deleted file mode 100644
index 398addc..0000000
--- a/api/mesh/v1alpha1/envoy_admin_inter_cp_forward_grpc.pb.go
+++ /dev/null
@@ -1,177 +0,0 @@
-// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-
-package v1alpha1
-
-import (
- context "context"
-)
-
-import (
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
-)
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-// Requires gRPC-Go v1.32.0 or later.
-const _ = grpc.SupportPackageIsVersion7
-
-// InterCPEnvoyAdminForwardServiceClient is the client API for InterCPEnvoyAdminForwardService service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
-type InterCPEnvoyAdminForwardServiceClient interface {
- XDSConfig(ctx context.Context, in *XDSConfigRequest, opts ...grpc.CallOption) (*XDSConfigResponse, error)
- Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (*StatsResponse, error)
- Clusters(ctx context.Context, in *ClustersRequest, opts ...grpc.CallOption) (*ClustersResponse, error)
-}
-
-type interCPEnvoyAdminForwardServiceClient struct {
- cc grpc.ClientConnInterface
-}
-
-func NewInterCPEnvoyAdminForwardServiceClient(cc grpc.ClientConnInterface) InterCPEnvoyAdminForwardServiceClient {
- return &interCPEnvoyAdminForwardServiceClient{cc}
-}
-
-func (c *interCPEnvoyAdminForwardServiceClient) XDSConfig(ctx context.Context, in *XDSConfigRequest, opts ...grpc.CallOption) (*XDSConfigResponse, error) {
- out := new(XDSConfigResponse)
- err := c.cc.Invoke(ctx, "/dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService/XDSConfig", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *interCPEnvoyAdminForwardServiceClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (*StatsResponse, error) {
- out := new(StatsResponse)
- err := c.cc.Invoke(ctx, "/dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService/Stats", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *interCPEnvoyAdminForwardServiceClient) Clusters(ctx context.Context, in *ClustersRequest, opts ...grpc.CallOption) (*ClustersResponse, error) {
- out := new(ClustersResponse)
- err := c.cc.Invoke(ctx, "/dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService/Clusters", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// InterCPEnvoyAdminForwardServiceServer is the server API for InterCPEnvoyAdminForwardService service.
-// All implementations must embed UnimplementedInterCPEnvoyAdminForwardServiceServer
-// for forward compatibility
-type InterCPEnvoyAdminForwardServiceServer interface {
- XDSConfig(context.Context, *XDSConfigRequest) (*XDSConfigResponse, error)
- Stats(context.Context, *StatsRequest) (*StatsResponse, error)
- Clusters(context.Context, *ClustersRequest) (*ClustersResponse, error)
- mustEmbedUnimplementedInterCPEnvoyAdminForwardServiceServer()
-}
-
-// UnimplementedInterCPEnvoyAdminForwardServiceServer must be embedded to have forward compatible implementations.
-type UnimplementedInterCPEnvoyAdminForwardServiceServer struct {
-}
-
-func (UnimplementedInterCPEnvoyAdminForwardServiceServer) XDSConfig(context.Context, *XDSConfigRequest) (*XDSConfigResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method XDSConfig not implemented")
-}
-func (UnimplementedInterCPEnvoyAdminForwardServiceServer) Stats(context.Context, *StatsRequest) (*StatsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Stats not implemented")
-}
-func (UnimplementedInterCPEnvoyAdminForwardServiceServer) Clusters(context.Context, *ClustersRequest) (*ClustersResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Clusters not implemented")
-}
-func (UnimplementedInterCPEnvoyAdminForwardServiceServer) mustEmbedUnimplementedInterCPEnvoyAdminForwardServiceServer() {
-}
-
-// UnsafeInterCPEnvoyAdminForwardServiceServer may be embedded to opt out of forward compatibility for this service.
-// Use of this interface is not recommended, as added methods to InterCPEnvoyAdminForwardServiceServer will
-// result in compilation errors.
-type UnsafeInterCPEnvoyAdminForwardServiceServer interface {
- mustEmbedUnimplementedInterCPEnvoyAdminForwardServiceServer()
-}
-
-func RegisterInterCPEnvoyAdminForwardServiceServer(s grpc.ServiceRegistrar, srv InterCPEnvoyAdminForwardServiceServer) {
- s.RegisterService(&InterCPEnvoyAdminForwardService_ServiceDesc, srv)
-}
-
-func _InterCPEnvoyAdminForwardService_XDSConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(XDSConfigRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(InterCPEnvoyAdminForwardServiceServer).XDSConfig(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService/XDSConfig",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(InterCPEnvoyAdminForwardServiceServer).XDSConfig(ctx, req.(*XDSConfigRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _InterCPEnvoyAdminForwardService_Stats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(StatsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(InterCPEnvoyAdminForwardServiceServer).Stats(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService/Stats",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(InterCPEnvoyAdminForwardServiceServer).Stats(ctx, req.(*StatsRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _InterCPEnvoyAdminForwardService_Clusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(ClustersRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(InterCPEnvoyAdminForwardServiceServer).Clusters(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService/Clusters",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(InterCPEnvoyAdminForwardServiceServer).Clusters(ctx, req.(*ClustersRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-// InterCPEnvoyAdminForwardService_ServiceDesc is the grpc.ServiceDesc for InterCPEnvoyAdminForwardService service.
-// It's only intended for direct use with grpc.RegisterService,
-// and not to be introspected or modified (even as a copy)
-var InterCPEnvoyAdminForwardService_ServiceDesc = grpc.ServiceDesc{
- ServiceName: "dubbo.mesh.v1alpha1.InterCPEnvoyAdminForwardService",
- HandlerType: (*InterCPEnvoyAdminForwardServiceServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "XDSConfig",
- Handler: _InterCPEnvoyAdminForwardService_XDSConfig_Handler,
- },
- {
- MethodName: "Stats",
- Handler: _InterCPEnvoyAdminForwardService_Stats_Handler,
- },
- {
- MethodName: "Clusters",
- Handler: _InterCPEnvoyAdminForwardService_Clusters_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "api/mesh/v1alpha1/envoy_admin_inter_cp_forward.proto",
-}
diff --git a/api/mesh/v1alpha1/mapping.pb.go b/api/mesh/v1alpha1/mapping.pb.go
index 8c24968..93a5bf2 100644
--- a/api/mesh/v1alpha1/mapping.pb.go
+++ b/api/mesh/v1alpha1/mapping.pb.go
@@ -371,40 +371,41 @@
0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69,
- 0x6e, 0x67, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xd8, 0x01, 0x0a,
+ 0x6e, 0x67, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xea, 0x01, 0x0a,
0x07, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x24, 0x0a, 0x0d,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61,
0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x61, 0x70,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x67,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x79,
0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x09, 0x12, 0x07, 0x4d,
0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x0b, 0x3a, 0x09, 0x0a, 0x07, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0xaa, 0x8c, 0x89,
- 0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x12, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0xaa,
- 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x32, 0xef, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x72, 0x76,
- 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65,
- 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
- 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
- 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d,
- 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
- 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70,
- 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79,
- 0x6e, 0x63, 0x12, 0x27, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
- 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
- 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x75,
- 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
- 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74,
- 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64,
- 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f,
- 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
- 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x08, 0x01, 0xaa, 0x8c, 0x89, 0xa6,
+ 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0b, 0x3a, 0x09, 0x0a, 0x07,
+ 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x12,
+ 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x58,
+ 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x32, 0xef, 0x01, 0x0a, 0x19, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70, 0x69,
+ 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x64, 0x75, 0x62,
+ 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+ 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
+ 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61,
+ 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+ 0x53, 0x79, 0x6e, 0x63, 0x12, 0x27, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
+ 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69,
+ 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e,
+ 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67,
+ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
+ 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65,
+ 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/mesh/v1alpha1/mapping.proto b/api/mesh/v1alpha1/mapping.proto
index 9e0dd4e..8faf3c6 100644
--- a/api/mesh/v1alpha1/mapping.proto
+++ b/api/mesh/v1alpha1/mapping.proto
@@ -50,9 +50,11 @@
option (dubbo.mesh.resource).name = "MappingResource";
option (dubbo.mesh.resource).type = "Mapping";
option (dubbo.mesh.resource).package = "mesh";
+ option (dubbo.mesh.resource).dds.send_to_global = true;
option (dubbo.mesh.resource).dds.send_to_zone = true;
option (dubbo.mesh.resource).ws.name = "mapping";
option (dubbo.mesh.resource).ws.plural = "mappings";
+ option (dubbo.mesh.resource).scope_namespace = true;
option (dubbo.mesh.resource).allow_to_inspect = true;
string zone = 1;
diff --git a/api/mesh/v1alpha1/mesh.pb.go b/api/mesh/v1alpha1/mesh.pb.go
index a7524aa..b6926cf 100644
--- a/api/mesh/v1alpha1/mesh.pb.go
+++ b/api/mesh/v1alpha1/mesh.pb.go
@@ -970,7 +970,7 @@
0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x1a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xff, 0x03, 0x0a, 0x04, 0x4d, 0x65,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x04, 0x0a, 0x04, 0x4d, 0x65,
0x73, 0x68, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x74, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1e, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x4d, 0x74, 0x6c, 0x73,
@@ -996,106 +996,107 @@
0x0b, 0x32, 0x30, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x61, 0x63, 0x6b,
- 0x65, 0x6e, 0x64, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x3a, 0x5c, 0xaa,
+ 0x65, 0x6e, 0x64, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x3a, 0x64, 0xaa,
0x8c, 0x89, 0xa6, 0x01, 0x0e, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x12, 0x04, 0x4d, 0x65, 0x73, 0x68, 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, 0x08, 0x3a, 0x06, 0x0a, 0x04, 0x6d,
- 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x3a, 0x08, 0x12, 0x06, 0x6d, 0x65, 0x73,
- 0x68, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x22, 0xd8, 0x02, 0x0a, 0x1b,
- 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f,
- 0x72, 0x69, 0x74, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
- 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
- 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x64, 0x70, 0x43, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68,
- 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
- 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x61,
- 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2e, 0x44, 0x70, 0x43, 0x65, 0x72, 0x74, 0x52, 0x06, 0x64, 0x70,
- 0x43, 0x65, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x6e,
- 0x66, 0x1a, 0x92, 0x01, 0x0a, 0x06, 0x44, 0x70, 0x43, 0x65, 0x72, 0x74, 0x12, 0x5c, 0x0a, 0x08,
- 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40,
- 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
- 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
- 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
- 0x2e, 0x44, 0x70, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x08, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2a, 0x0a, 0x08, 0x52, 0x6f,
- 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69,
- 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x4e, 0x65, 0x74, 0x77, 0x6f,
- 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
- 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65,
- 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e,
- 0x64, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x1a, 0x48, 0x0a, 0x08, 0x4f,
- 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74,
- 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
- 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68,
- 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x72, 0x0a, 0x07, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67,
- 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65,
- 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
- 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b,
- 0x65, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x75, 0x62,
- 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x2e, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52,
- 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x0e, 0x54, 0x72,
- 0x61, 0x63, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x12, 0x38, 0x0a, 0x08, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 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,
- 0x52, 0x08, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79,
- 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b,
- 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53,
- 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x22, 0xbe, 0x01, 0x0a, 0x1a,
- 0x5a, 0x69, 0x70, 0x6b, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63,
- 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
- 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0d,
- 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x31, 0x32, 0x38, 0x62, 0x69, 0x74, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x31, 0x32, 0x38, 0x62,
- 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e,
- 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65,
- 0x64, 0x53, 0x70, 0x61, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x72, 0x0a, 0x07,
- 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75,
- 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12,
- 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
- 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42,
- 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73,
- 0x22, 0x7d, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65,
- 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12,
- 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79,
- 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x22,
- 0x2e, 0x0a, 0x18, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42, 0x61,
- 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x70,
- 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22,
- 0x33, 0x0a, 0x17, 0x54, 0x63, 0x70, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63,
- 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64,
- 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64,
- 0x72, 0x65, 0x73, 0x73, 0x22, 0x69, 0x0a, 0x07, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x12,
- 0x3e, 0x0a, 0x1a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x77, 0x61, 0x72, 0x65,
- 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x1a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x77, 0x61,
- 0x72, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x12,
- 0x1e, 0x0a, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42,
- 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70,
- 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72,
- 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76,
- 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x02, 0x18, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89,
+ 0xa6, 0x01, 0x08, 0x3a, 0x06, 0x0a, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+ 0x0a, 0x3a, 0x08, 0x12, 0x06, 0x6d, 0x65, 0x73, 0x68, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+ 0x02, 0x68, 0x01, 0x22, 0xd8, 0x02, 0x0a, 0x1b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x61, 0x63, 0x6b,
+ 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x64,
+ 0x70, 0x43, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x75,
+ 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+ 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2e, 0x44, 0x70,
+ 0x43, 0x65, 0x72, 0x74, 0x52, 0x06, 0x64, 0x70, 0x43, 0x65, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x04,
+ 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x1a, 0x92, 0x01, 0x0a, 0x06, 0x44, 0x70,
+ 0x43, 0x65, 0x72, 0x74, 0x12, 0x5c, 0x0a, 0x08, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
+ 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x65, 0x72,
+ 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2e, 0x44, 0x70, 0x43, 0x65, 0x72, 0x74, 0x2e,
+ 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x1a, 0x2a, 0x0a, 0x08, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e,
+ 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c,
+ 0x01, 0x0a, 0x0a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a,
+ 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
+ 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f,
+ 0x75, 0x6e, 0x64, 0x1a, 0x48, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12,
+ 0x3c, 0x0a, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x72, 0x0a,
+ 0x07, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
+ 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67,
+ 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
+ 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63,
+ 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x73, 0x61, 0x6d, 0x70,
+ 0x6c, 0x69, 0x6e, 0x67, 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, 0x52, 0x08, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69,
+ 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x63,
+ 0x6f, 0x6e, 0x66, 0x22, 0xbe, 0x01, 0x0a, 0x1a, 0x5a, 0x69, 0x70, 0x6b, 0x69, 0x6e, 0x54, 0x72,
+ 0x61, 0x63, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x75, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x31,
+ 0x32, 0x38, 0x62, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x72, 0x61,
+ 0x63, 0x65, 0x49, 0x64, 0x31, 0x32, 0x38, 0x62, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70,
+ 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+ 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x11, 0x73, 0x68,
+ 0x61, 0x72, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x78, 0x74, 0x22, 0x72, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12,
+ 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65,
+ 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x75, 0x62, 0x62,
+ 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+ 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x08,
+ 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x7d, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x67,
+ 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16,
+ 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x6f,
+ 0x6e, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x22, 0x2e, 0x0a, 0x18, 0x46, 0x69, 0x6c, 0x65, 0x4c,
+ 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x33, 0x0a, 0x17, 0x54, 0x63, 0x70, 0x4c, 0x6f,
+ 0x67, 0x67, 0x69, 0x6e, 0x67, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x69, 0x0a, 0x07,
+ 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3e, 0x0a, 0x1a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x69, 0x74, 0x79, 0x41, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61,
+ 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61,
+ 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x45,
+ 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x7a, 0x6f, 0x6e,
+ 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75,
+ 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62,
+ 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62,
+ 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/mesh/v1alpha1/mesh.proto b/api/mesh/v1alpha1/mesh.proto
index 9da42f8..d884efc 100644
--- a/api/mesh/v1alpha1/mesh.proto
+++ b/api/mesh/v1alpha1/mesh.proto
@@ -13,6 +13,7 @@
option (dubbo.mesh.resource).name = "MeshResource";
option (dubbo.mesh.resource).type = "Mesh";
option (dubbo.mesh.resource).package = "mesh";
+ option (dubbo.mesh.resource).global = true;
option (dubbo.mesh.resource).dds.send_to_zone = true;
option (dubbo.mesh.resource).ws.name = "mesh";
option (dubbo.mesh.resource).ws.plural = "meshes";
diff --git a/api/mesh/v1alpha1/metadata.pb.go b/api/mesh/v1alpha1/metadata.pb.go
index 3cf1a15..838b0fb 100644
--- a/api/mesh/v1alpha1/metadata.pb.go
+++ b/api/mesh/v1alpha1/metadata.pb.go
@@ -286,10 +286,11 @@
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- App string `protobuf:"bytes,1,opt,name=app,proto3" json:"app,omitempty"`
- Revision string `protobuf:"bytes,2,opt,name=revision,proto3" json:"revision,omitempty"`
+ Zone string `protobuf:"bytes,1,opt,name=zone,proto3" json:"zone,omitempty"`
+ App string `protobuf:"bytes,2,opt,name=app,proto3" json:"app,omitempty"`
+ Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"`
// key format is '{group}/{interface name}:{version}:{protocol}'
- Services map[string]*ServiceInfo `protobuf:"bytes,3,rep,name=services,proto3" json:"services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Services map[string]*ServiceInfo `protobuf:"bytes,4,rep,name=services,proto3" json:"services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *MetaData) Reset() {
@@ -324,6 +325,13 @@
return file_api_mesh_v1alpha1_metadata_proto_rawDescGZIP(), []int{4}
}
+func (x *MetaData) GetZone() string {
+ if x != nil {
+ return x.Zone
+ }
+ return ""
+}
+
func (x *MetaData) GetApp() string {
if x != nil {
return x.App
@@ -479,64 +487,67 @@
0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d,
0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x6d,
- 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x22, 0xcd, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74,
- 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73,
- 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73,
- 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18,
- 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
- 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
- 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0d,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
- 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
- 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x6b, 0xaa, 0x8c, 0x89,
- 0xa6, 0x01, 0x12, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x12, 0x08, 0x4d, 0x65, 0x74,
- 0x61, 0x44, 0x61, 0x74, 0x61, 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,
- 0x0c, 0x3a, 0x0a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89,
- 0xa6, 0x01, 0x0d, 0x3a, 0x0b, 0x12, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73,
- 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05,
- 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f,
- 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04,
- 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68,
- 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
- 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06,
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
- 0x01, 0x32, 0xeb, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65,
- 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62,
+ 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x22, 0xf3, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74,
+ 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72,
+ 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72,
+ 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62,
0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
- 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
- 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
+ 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
+ 0x1a, 0x5d, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a,
+ 0x7d, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x12, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74,
+ 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x12,
+ 0x08, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22,
+ 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x08, 0x01, 0xaa,
+ 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0c, 0x3a,
+ 0x0a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+ 0x02, 0x58, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x3a, 0x0b, 0x12, 0x09, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x22, 0x96,
+ 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12,
+ 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f,
+ 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
+ 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
+ 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b,
+ 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0xeb, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x10, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12,
+ 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e,
+ 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0c,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x28, 0x2e, 0x64,
+ 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x29, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53,
- 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42,
- 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70,
- 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72,
- 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76,
- 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f,
+ 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/mesh/v1alpha1/metadata.proto b/api/mesh/v1alpha1/metadata.proto
index ea4e298..0688317 100644
--- a/api/mesh/v1alpha1/metadata.proto
+++ b/api/mesh/v1alpha1/metadata.proto
@@ -42,15 +42,18 @@
option (dubbo.mesh.resource).name = "MetaDataResource";
option (dubbo.mesh.resource).type = "MetaData";
option (dubbo.mesh.resource).package = "mesh";
+ option (dubbo.mesh.resource).dds.send_to_global = true;
option (dubbo.mesh.resource).dds.send_to_zone = true;
option (dubbo.mesh.resource).ws.name = "metadata";
+ option (dubbo.mesh.resource).scope_namespace = true;
option (dubbo.mesh.resource).ws.plural = "metadatas";
option (dubbo.mesh.resource).allow_to_inspect = true;
- string app = 1;
- string revision = 2;
+ string zone = 1;
+ string app = 2;
+ string revision = 3;
// key format is '{group}/{interface name}:{version}:{protocol}'
- map<string, ServiceInfo> services = 3;
+ map<string, ServiceInfo> services = 4;
}
message ServiceInfo {
diff --git a/api/mesh/v1alpha1/mux.pb.go b/api/mesh/v1alpha1/mux.pb.go
deleted file mode 100644
index 965e304..0000000
--- a/api/mesh/v1alpha1/mux.pb.go
+++ /dev/null
@@ -1,260 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.28.1
-// protoc v3.20.0
-// source: api/mesh/v1alpha1/mux.proto
-
-package v1alpha1
-
-import (
- reflect "reflect"
- sync "sync"
-)
-
-import (
- v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2"
- v3 "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-type Message struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Value:
- //
- // *Message_LegacyRequest
- // *Message_LegacyResponse
- // *Message_Request
- // *Message_Response
- Value isMessage_Value `protobuf_oneof:"value"`
-}
-
-func (x *Message) Reset() {
- *x = Message{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_mux_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Message) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Message) ProtoMessage() {}
-
-func (x *Message) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_mux_proto_msgTypes[0]
- 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 Message.ProtoReflect.Descriptor instead.
-func (*Message) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_mux_proto_rawDescGZIP(), []int{0}
-}
-
-func (m *Message) GetValue() isMessage_Value {
- if m != nil {
- return m.Value
- }
- return nil
-}
-
-func (x *Message) GetLegacyRequest() *v2.DiscoveryRequest {
- if x, ok := x.GetValue().(*Message_LegacyRequest); ok {
- return x.LegacyRequest
- }
- return nil
-}
-
-func (x *Message) GetLegacyResponse() *v2.DiscoveryResponse {
- if x, ok := x.GetValue().(*Message_LegacyResponse); ok {
- return x.LegacyResponse
- }
- return nil
-}
-
-func (x *Message) GetRequest() *v3.DiscoveryRequest {
- if x, ok := x.GetValue().(*Message_Request); ok {
- return x.Request
- }
- return nil
-}
-
-func (x *Message) GetResponse() *v3.DiscoveryResponse {
- if x, ok := x.GetValue().(*Message_Response); ok {
- return x.Response
- }
- return nil
-}
-
-type isMessage_Value interface {
- isMessage_Value()
-}
-
-type Message_LegacyRequest struct {
- LegacyRequest *v2.DiscoveryRequest `protobuf:"bytes,1,opt,name=legacy_request,json=legacyRequest,proto3,oneof"`
-}
-
-type Message_LegacyResponse struct {
- LegacyResponse *v2.DiscoveryResponse `protobuf:"bytes,2,opt,name=legacy_response,json=legacyResponse,proto3,oneof"`
-}
-
-type Message_Request struct {
- Request *v3.DiscoveryRequest `protobuf:"bytes,3,opt,name=request,proto3,oneof"`
-}
-
-type Message_Response struct {
- Response *v3.DiscoveryResponse `protobuf:"bytes,4,opt,name=response,proto3,oneof"`
-}
-
-func (*Message_LegacyRequest) isMessage_Value() {}
-
-func (*Message_LegacyResponse) isMessage_Value() {}
-
-func (*Message_Request) isMessage_Value() {}
-
-func (*Message_Response) isMessage_Value() {}
-
-var File_api_mesh_v1alpha1_mux_proto protoreflect.FileDescriptor
-
-var file_api_mesh_v1alpha1_mux_proto_rawDesc = []byte{
- 0x0a, 0x1b, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x75, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x64,
- 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
- 0x61, 0x31, 0x1a, 0x1c, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32,
- 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x1a, 0x2a, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f,
- 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x33, 0x2f, 0x64, 0x69, 0x73,
- 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbe, 0x02, 0x0a,
- 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x6c, 0x65, 0x67, 0x61,
- 0x63, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1e, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
- 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x4a, 0x0a, 0x0f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6e, 0x76,
- 0x6f, 0x79, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76,
- 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x6c,
- 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a,
- 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c,
- 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64,
- 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x69, 0x73, 0x63,
- 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07,
- 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
- 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76,
- 0x65, 0x72, 0x79, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x63, 0x0a,
- 0x10, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
- 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x12, 0x1c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
- 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x1a, 0x1c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01,
- 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
- 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75,
- 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73,
- 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x33,
-}
-
-var (
- file_api_mesh_v1alpha1_mux_proto_rawDescOnce sync.Once
- file_api_mesh_v1alpha1_mux_proto_rawDescData = file_api_mesh_v1alpha1_mux_proto_rawDesc
-)
-
-func file_api_mesh_v1alpha1_mux_proto_rawDescGZIP() []byte {
- file_api_mesh_v1alpha1_mux_proto_rawDescOnce.Do(func() {
- file_api_mesh_v1alpha1_mux_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_mesh_v1alpha1_mux_proto_rawDescData)
- })
- return file_api_mesh_v1alpha1_mux_proto_rawDescData
-}
-
-var file_api_mesh_v1alpha1_mux_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_api_mesh_v1alpha1_mux_proto_goTypes = []interface{}{
- (*Message)(nil), // 0: dubbo.mesh.v1alpha1.Message
- (*v2.DiscoveryRequest)(nil), // 1: envoy.api.v2.DiscoveryRequest
- (*v2.DiscoveryResponse)(nil), // 2: envoy.api.v2.DiscoveryResponse
- (*v3.DiscoveryRequest)(nil), // 3: envoy.service.discovery.v3.DiscoveryRequest
- (*v3.DiscoveryResponse)(nil), // 4: envoy.service.discovery.v3.DiscoveryResponse
-}
-var file_api_mesh_v1alpha1_mux_proto_depIdxs = []int32{
- 1, // 0: dubbo.mesh.v1alpha1.Message.legacy_request:type_name -> envoy.api.v2.DiscoveryRequest
- 2, // 1: dubbo.mesh.v1alpha1.Message.legacy_response:type_name -> envoy.api.v2.DiscoveryResponse
- 3, // 2: dubbo.mesh.v1alpha1.Message.request:type_name -> envoy.service.discovery.v3.DiscoveryRequest
- 4, // 3: dubbo.mesh.v1alpha1.Message.response:type_name -> envoy.service.discovery.v3.DiscoveryResponse
- 0, // 4: dubbo.mesh.v1alpha1.MultiplexService.StreamMessage:input_type -> dubbo.mesh.v1alpha1.Message
- 0, // 5: dubbo.mesh.v1alpha1.MultiplexService.StreamMessage:output_type -> dubbo.mesh.v1alpha1.Message
- 5, // [5:6] is the sub-list for method output_type
- 4, // [4:5] is the sub-list for method input_type
- 4, // [4:4] is the sub-list for extension type_name
- 4, // [4:4] is the sub-list for extension extendee
- 0, // [0:4] is the sub-list for field type_name
-}
-
-func init() { file_api_mesh_v1alpha1_mux_proto_init() }
-func file_api_mesh_v1alpha1_mux_proto_init() {
- if File_api_mesh_v1alpha1_mux_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_api_mesh_v1alpha1_mux_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Message); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- file_api_mesh_v1alpha1_mux_proto_msgTypes[0].OneofWrappers = []interface{}{
- (*Message_LegacyRequest)(nil),
- (*Message_LegacyResponse)(nil),
- (*Message_Request)(nil),
- (*Message_Response)(nil),
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_api_mesh_v1alpha1_mux_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 1,
- },
- GoTypes: file_api_mesh_v1alpha1_mux_proto_goTypes,
- DependencyIndexes: file_api_mesh_v1alpha1_mux_proto_depIdxs,
- MessageInfos: file_api_mesh_v1alpha1_mux_proto_msgTypes,
- }.Build()
- File_api_mesh_v1alpha1_mux_proto = out.File
- file_api_mesh_v1alpha1_mux_proto_rawDesc = nil
- file_api_mesh_v1alpha1_mux_proto_goTypes = nil
- file_api_mesh_v1alpha1_mux_proto_depIdxs = nil
-}
diff --git a/api/mesh/v1alpha1/mux.proto b/api/mesh/v1alpha1/mux.proto
deleted file mode 100644
index f7cccf1..0000000
--- a/api/mesh/v1alpha1/mux.proto
+++ /dev/null
@@ -1,21 +0,0 @@
-syntax = "proto3";
-
-package dubbo.mesh.v1alpha1;
-
-option go_package = "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1";
-
-import "envoy/api/v2/discovery.proto";
-import "envoy/service/discovery/v3/discovery.proto";
-
-service MultiplexService {
- rpc StreamMessage(stream Message) returns (stream Message);
-}
-
-message Message {
- oneof value {
- envoy.api.v2.DiscoveryRequest legacy_request = 1;
- envoy.api.v2.DiscoveryResponse legacy_response = 2;
- envoy.service.discovery.v3.DiscoveryRequest request = 3;
- envoy.service.discovery.v3.DiscoveryResponse response = 4;
- }
-}
diff --git a/api/mesh/v1alpha1/mux_grpc.pb.go b/api/mesh/v1alpha1/mux_grpc.pb.go
deleted file mode 100644
index 00fa751..0000000
--- a/api/mesh/v1alpha1/mux_grpc.pb.go
+++ /dev/null
@@ -1,136 +0,0 @@
-// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-
-package v1alpha1
-
-import (
- context "context"
-)
-
-import (
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
-)
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-// Requires gRPC-Go v1.32.0 or later.
-const _ = grpc.SupportPackageIsVersion7
-
-// MultiplexServiceClient is the client API for MultiplexService service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
-type MultiplexServiceClient interface {
- StreamMessage(ctx context.Context, opts ...grpc.CallOption) (MultiplexService_StreamMessageClient, error)
-}
-
-type multiplexServiceClient struct {
- cc grpc.ClientConnInterface
-}
-
-func NewMultiplexServiceClient(cc grpc.ClientConnInterface) MultiplexServiceClient {
- return &multiplexServiceClient{cc}
-}
-
-func (c *multiplexServiceClient) StreamMessage(ctx context.Context, opts ...grpc.CallOption) (MultiplexService_StreamMessageClient, error) {
- stream, err := c.cc.NewStream(ctx, &MultiplexService_ServiceDesc.Streams[0], "/dubbo.mesh.v1alpha1.MultiplexService/StreamMessage", opts...)
- if err != nil {
- return nil, err
- }
- x := &multiplexServiceStreamMessageClient{stream}
- return x, nil
-}
-
-type MultiplexService_StreamMessageClient interface {
- Send(*Message) error
- Recv() (*Message, error)
- grpc.ClientStream
-}
-
-type multiplexServiceStreamMessageClient struct {
- grpc.ClientStream
-}
-
-func (x *multiplexServiceStreamMessageClient) Send(m *Message) error {
- return x.ClientStream.SendMsg(m)
-}
-
-func (x *multiplexServiceStreamMessageClient) Recv() (*Message, error) {
- m := new(Message)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-// MultiplexServiceServer is the server API for MultiplexService service.
-// All implementations must embed UnimplementedMultiplexServiceServer
-// for forward compatibility
-type MultiplexServiceServer interface {
- StreamMessage(MultiplexService_StreamMessageServer) error
- mustEmbedUnimplementedMultiplexServiceServer()
-}
-
-// UnimplementedMultiplexServiceServer must be embedded to have forward compatible implementations.
-type UnimplementedMultiplexServiceServer struct {
-}
-
-func (UnimplementedMultiplexServiceServer) StreamMessage(MultiplexService_StreamMessageServer) error {
- return status.Errorf(codes.Unimplemented, "method StreamMessage not implemented")
-}
-func (UnimplementedMultiplexServiceServer) mustEmbedUnimplementedMultiplexServiceServer() {}
-
-// UnsafeMultiplexServiceServer may be embedded to opt out of forward compatibility for this service.
-// Use of this interface is not recommended, as added methods to MultiplexServiceServer will
-// result in compilation errors.
-type UnsafeMultiplexServiceServer interface {
- mustEmbedUnimplementedMultiplexServiceServer()
-}
-
-func RegisterMultiplexServiceServer(s grpc.ServiceRegistrar, srv MultiplexServiceServer) {
- s.RegisterService(&MultiplexService_ServiceDesc, srv)
-}
-
-func _MultiplexService_StreamMessage_Handler(srv interface{}, stream grpc.ServerStream) error {
- return srv.(MultiplexServiceServer).StreamMessage(&multiplexServiceStreamMessageServer{stream})
-}
-
-type MultiplexService_StreamMessageServer interface {
- Send(*Message) error
- Recv() (*Message, error)
- grpc.ServerStream
-}
-
-type multiplexServiceStreamMessageServer struct {
- grpc.ServerStream
-}
-
-func (x *multiplexServiceStreamMessageServer) Send(m *Message) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func (x *multiplexServiceStreamMessageServer) Recv() (*Message, error) {
- m := new(Message)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-// MultiplexService_ServiceDesc is the grpc.ServiceDesc for MultiplexService service.
-// It's only intended for direct use with grpc.RegisterService,
-// and not to be introspected or modified (even as a copy)
-var MultiplexService_ServiceDesc = grpc.ServiceDesc{
- ServiceName: "dubbo.mesh.v1alpha1.MultiplexService",
- HandlerType: (*MultiplexServiceServer)(nil),
- Methods: []grpc.MethodDesc{},
- Streams: []grpc.StreamDesc{
- {
- StreamName: "StreamMessage",
- Handler: _MultiplexService_StreamMessage_Handler,
- ServerStreams: true,
- ClientStreams: true,
- },
- },
- Metadata: "api/mesh/v1alpha1/mux.proto",
-}
diff --git a/api/mesh/v1alpha1/selector.pb.go b/api/mesh/v1alpha1/selector.pb.go
deleted file mode 100644
index 6f0521a..0000000
--- a/api/mesh/v1alpha1/selector.pb.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.28.1
-// protoc v3.20.0
-// source: api/mesh/v1alpha1/selector.proto
-
-package v1alpha1
-
-import (
- reflect "reflect"
- sync "sync"
-)
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// Selector defines structure for selecting tags for given dataplane
-type Selector struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Tags to match, can be used for both source and destinations
- Match map[string]string `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-}
-
-func (x *Selector) Reset() {
- *x = Selector{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_selector_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Selector) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Selector) ProtoMessage() {}
-
-func (x *Selector) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_selector_proto_msgTypes[0]
- 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 Selector.ProtoReflect.Descriptor instead.
-func (*Selector) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_selector_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Selector) GetMatch() map[string]string {
- if x != nil {
- return x.Match
- }
- return nil
-}
-
-var File_api_mesh_v1alpha1_selector_proto protoreflect.FileDescriptor
-
-var file_api_mesh_v1alpha1_selector_proto_rawDesc = []byte{
- 0x0a, 0x20, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x12, 0x13, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
- 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x22, 0x84, 0x01, 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x6f, 0x72, 0x12, 0x3e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68,
- 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x6f, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6d,
- 0x61, 0x74, 0x63, 0x68, 0x1a, 0x38, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x36,
- 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61,
- 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e,
- 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31,
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_api_mesh_v1alpha1_selector_proto_rawDescOnce sync.Once
- file_api_mesh_v1alpha1_selector_proto_rawDescData = file_api_mesh_v1alpha1_selector_proto_rawDesc
-)
-
-func file_api_mesh_v1alpha1_selector_proto_rawDescGZIP() []byte {
- file_api_mesh_v1alpha1_selector_proto_rawDescOnce.Do(func() {
- file_api_mesh_v1alpha1_selector_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_mesh_v1alpha1_selector_proto_rawDescData)
- })
- return file_api_mesh_v1alpha1_selector_proto_rawDescData
-}
-
-var file_api_mesh_v1alpha1_selector_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_api_mesh_v1alpha1_selector_proto_goTypes = []interface{}{
- (*Selector)(nil), // 0: dubbo.mesh.v1alpha1.Selector
- nil, // 1: dubbo.mesh.v1alpha1.Selector.MatchEntry
-}
-var file_api_mesh_v1alpha1_selector_proto_depIdxs = []int32{
- 1, // 0: dubbo.mesh.v1alpha1.Selector.match:type_name -> dubbo.mesh.v1alpha1.Selector.MatchEntry
- 1, // [1:1] is the sub-list for method output_type
- 1, // [1:1] is the sub-list for method input_type
- 1, // [1:1] is the sub-list for extension type_name
- 1, // [1:1] is the sub-list for extension extendee
- 0, // [0:1] is the sub-list for field type_name
-}
-
-func init() { file_api_mesh_v1alpha1_selector_proto_init() }
-func file_api_mesh_v1alpha1_selector_proto_init() {
- if File_api_mesh_v1alpha1_selector_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_api_mesh_v1alpha1_selector_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Selector); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_api_mesh_v1alpha1_selector_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 2,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_api_mesh_v1alpha1_selector_proto_goTypes,
- DependencyIndexes: file_api_mesh_v1alpha1_selector_proto_depIdxs,
- MessageInfos: file_api_mesh_v1alpha1_selector_proto_msgTypes,
- }.Build()
- File_api_mesh_v1alpha1_selector_proto = out.File
- file_api_mesh_v1alpha1_selector_proto_rawDesc = nil
- file_api_mesh_v1alpha1_selector_proto_goTypes = nil
- file_api_mesh_v1alpha1_selector_proto_depIdxs = nil
-}
diff --git a/api/mesh/v1alpha1/selector.proto b/api/mesh/v1alpha1/selector.proto
deleted file mode 100644
index d370c14..0000000
--- a/api/mesh/v1alpha1/selector.proto
+++ /dev/null
@@ -1,11 +0,0 @@
-syntax = "proto3";
-
-package dubbo.mesh.v1alpha1;
-
-option go_package = "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1";
-
-// Selector defines structure for selecting tags for given dataplane
-message Selector {
- // Tags to match, can be used for both source and destinations
- map<string, string> match = 1;
-}
diff --git a/api/mesh/v1alpha1/zone_ingress.pb.go b/api/mesh/v1alpha1/zone_ingress.pb.go
index 51f4c1c..0c649ce 100644
--- a/api/mesh/v1alpha1/zone_ingress.pb.go
+++ b/api/mesh/v1alpha1/zone_ingress.pb.go
@@ -247,7 +247,7 @@
0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31,
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x61, 0x64, 0x6d,
- 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xed, 0x05, 0x0a, 0x0b, 0x5a, 0x6f, 0x6e,
+ 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xff, 0x05, 0x0a, 0x0b, 0x5a, 0x6f, 0x6e,
0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x4b, 0x0a, 0x0a,
0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
@@ -286,19 +286,20 @@
0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x80, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x15, 0x0a, 0x13,
+ 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x92, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x15, 0x0a, 0x13,
0x5a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x12, 0x0b, 0x5a, 0x6f, 0x6e, 0x65, 0x49,
0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 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, 0x0f, 0x3a, 0x0d, 0x0a, 0x0b, 0x7a, 0x6f, 0x6e, 0x65, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73,
- 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11, 0x3a, 0x0f, 0x12, 0x0d, 0x7a, 0x6f, 0x6e, 0x65, 0x69,
- 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01,
- 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x58, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68,
- 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75,
- 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x18, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04,
+ 0x52, 0x02, 0x08, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c,
+ 0x89, 0xa6, 0x01, 0x0f, 0x3a, 0x0d, 0x0a, 0x0b, 0x7a, 0x6f, 0x6e, 0x65, 0x69, 0x6e, 0x67, 0x72,
+ 0x65, 0x73, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11, 0x3a, 0x0f, 0x12, 0x0d, 0x7a, 0x6f, 0x6e,
+ 0x65, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02,
+ 0x68, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x58, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69,
+ 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f,
+ 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/mesh/v1alpha1/zone_ingress.proto b/api/mesh/v1alpha1/zone_ingress.proto
index c91437d..43b3cf7 100644
--- a/api/mesh/v1alpha1/zone_ingress.proto
+++ b/api/mesh/v1alpha1/zone_ingress.proto
@@ -14,6 +14,8 @@
option (dubbo.mesh.resource).name = "ZoneIngressResource";
option (dubbo.mesh.resource).type = "ZoneIngress";
option (dubbo.mesh.resource).package = "mesh";
+ option (dubbo.mesh.resource).global = true;
+ option (dubbo.mesh.resource).dds.send_to_global = true;
option (dubbo.mesh.resource).dds.send_to_zone = true;
option (dubbo.mesh.resource).ws.name = "zoneingress";
option (dubbo.mesh.resource).ws.plural = "zoneingresses";
diff --git a/api/mesh/v1alpha1/zoneegress.pb.go b/api/mesh/v1alpha1/zoneegress.pb.go
index b12e1ff..4ccbf23 100644
--- a/api/mesh/v1alpha1/zoneegress.pb.go
+++ b/api/mesh/v1alpha1/zoneegress.pb.go
@@ -34,7 +34,7 @@
unknownFields protoimpl.UnknownFields
// Zone field contains Zone name where egress is serving, field will be
- // automatically set by Global Kuma CP
+ // automatically set by Global Dubbo CP
Zone string `protobuf:"bytes,1,opt,name=zone,proto3" json:"zone,omitempty"`
// Networking defines the address and port of the Egress to listen on.
Networking *ZoneEgress_Networking `protobuf:"bytes,2,opt,name=networking,proto3" json:"networking,omitempty"`
@@ -162,7 +162,7 @@
0x65, 0x73, 0x68, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x1a, 0x23, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c,
0x70, 0x68, 0x61, 0x31, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x02, 0x0a, 0x0a, 0x5a, 0x6f, 0x6e, 0x65, 0x45,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf0, 0x02, 0x0a, 0x0a, 0x5a, 0x6f, 0x6e, 0x65, 0x45,
0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
@@ -176,19 +176,20 @@
0x74, 0x12, 0x35, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1f, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x41, 0x64, 0x6d, 0x69,
- 0x6e, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x3a, 0x7c, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x14,
- 0x0a, 0x12, 0x5a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0c, 0x12, 0x0a, 0x5a, 0x6f, 0x6e, 0x65,
- 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 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, 0x0e, 0x3a, 0x0c, 0x0a, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73,
- 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x10, 0x3a, 0x0e, 0x12, 0x0c, 0x7a, 0x6f, 0x6e, 0x65, 0x65, 0x67,
- 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0xaa, 0x8c,
- 0x89, 0xa6, 0x01, 0x02, 0x58, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
- 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62,
- 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69,
- 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x6e, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x3a, 0x8e, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+ 0x14, 0x0a, 0x12, 0x5a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0c, 0x12, 0x0a, 0x5a, 0x6f, 0x6e,
+ 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 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, 0x0e, 0x3a, 0x0c, 0x0a, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x65, 0x67, 0x72, 0x65, 0x73,
+ 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x10, 0x3a, 0x0e, 0x12, 0x0c, 0x7a, 0x6f, 0x6e, 0x65, 0x65,
+ 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x18, 0x01, 0xaa,
+ 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x08, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68,
+ 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x58, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74,
+ 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64,
+ 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f,
+ 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+ 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/mesh/v1alpha1/zoneegress.proto b/api/mesh/v1alpha1/zoneegress.proto
index 14150db..0bf3fe0 100644
--- a/api/mesh/v1alpha1/zoneegress.proto
+++ b/api/mesh/v1alpha1/zoneegress.proto
@@ -14,11 +14,13 @@
option (dubbo.mesh.resource).dds.send_to_zone = true;
option (dubbo.mesh.resource).ws.name = "zoneegress";
option (dubbo.mesh.resource).ws.plural = "zoneegresses";
+ option (dubbo.mesh.resource).global = true;
+ option (dubbo.mesh.resource).dds.send_to_global = true;
option (dubbo.mesh.resource).allow_to_inspect = true;
option (dubbo.mesh.resource).scope_namespace = true;
// Zone field contains Zone name where egress is serving, field will be
- // automatically set by Global Kuma CP
+ // automatically set by Global Dubbo CP
string zone = 1;
message Networking {
diff --git a/api/mesh/v1alpha1/zoneegressoverview.pb.go b/api/mesh/v1alpha1/zoneegressoverview.pb.go
deleted file mode 100644
index a69c0ef..0000000
--- a/api/mesh/v1alpha1/zoneegressoverview.pb.go
+++ /dev/null
@@ -1,191 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.28.1
-// protoc v3.20.0
-// source: api/mesh/v1alpha1/zoneegressoverview.proto
-
-package v1alpha1
-
-import (
- reflect "reflect"
- sync "sync"
-)
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-import (
- _ "github.com/apache/dubbo-kubernetes/api/mesh"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// ZoneEgressOverview defines the projected state of a ZoneEgress.
-type ZoneEgressOverview struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ZoneEgress *ZoneEgress `protobuf:"bytes,1,opt,name=zoneEgress,proto3" json:"zoneEgress,omitempty"`
- ZoneEgressInsight *ZoneEgressInsight `protobuf:"bytes,2,opt,name=zoneEgressInsight,proto3" json:"zoneEgressInsight,omitempty"`
-}
-
-func (x *ZoneEgressOverview) Reset() {
- *x = ZoneEgressOverview{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_zoneegressoverview_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ZoneEgressOverview) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ZoneEgressOverview) ProtoMessage() {}
-
-func (x *ZoneEgressOverview) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_zoneegressoverview_proto_msgTypes[0]
- 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 ZoneEgressOverview.ProtoReflect.Descriptor instead.
-func (*ZoneEgressOverview) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *ZoneEgressOverview) GetZoneEgress() *ZoneEgress {
- if x != nil {
- return x.ZoneEgress
- }
- return nil
-}
-
-func (x *ZoneEgressOverview) GetZoneEgressInsight() *ZoneEgressInsight {
- if x != nil {
- return x.ZoneEgressInsight
- }
- return nil
-}
-
-var File_api_mesh_v1alpha1_zoneegressoverview_proto protoreflect.FileDescriptor
-
-var file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDesc = []byte{
- 0x0a, 0x2a, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2f, 0x7a, 0x6f, 0x6e, 0x65, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x76,
- 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x64, 0x75,
- 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
- 0x31, 0x1a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x61, 0x70, 0x69, 0x2f, 0x6d,
- 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x7a, 0x6f, 0x6e,
- 0x65, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x61,
- 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x2f, 0x7a, 0x6f, 0x6e, 0x65, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x73, 0x69, 0x67,
- 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, 0x02, 0x0a, 0x12, 0x5a, 0x6f, 0x6e,
- 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12,
- 0x3f, 0x0a, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68,
- 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x45, 0x67,
- 0x72, 0x65, 0x73, 0x73, 0x52, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73,
- 0x12, 0x54, 0x0a, 0x11, 0x7a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e,
- 0x73, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x75,
- 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
- 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x73, 0x69,
- 0x67, 0x68, 0x74, 0x52, 0x11, 0x7a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49,
- 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x60, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x1c, 0x0a, 0x1a,
- 0x5a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69,
- 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x14,
- 0x12, 0x12, 0x5a, 0x6f, 0x6e, 0x65, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4f, 0x76, 0x65, 0x72,
- 0x76, 0x69, 0x65, 0x77, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x18, 0x01, 0xaa, 0x8c, 0x89, 0xa6,
- 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x30, 0x01,
- 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x60, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68,
- 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75,
- 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescOnce sync.Once
- file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescData = file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDesc
-)
-
-func file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescGZIP() []byte {
- file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescOnce.Do(func() {
- file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescData)
- })
- return file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDescData
-}
-
-var file_api_mesh_v1alpha1_zoneegressoverview_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_api_mesh_v1alpha1_zoneegressoverview_proto_goTypes = []interface{}{
- (*ZoneEgressOverview)(nil), // 0: dubbo.mesh.v1alpha1.ZoneEgressOverview
- (*ZoneEgress)(nil), // 1: dubbo.mesh.v1alpha1.ZoneEgress
- (*ZoneEgressInsight)(nil), // 2: dubbo.mesh.v1alpha1.ZoneEgressInsight
-}
-var file_api_mesh_v1alpha1_zoneegressoverview_proto_depIdxs = []int32{
- 1, // 0: dubbo.mesh.v1alpha1.ZoneEgressOverview.zoneEgress:type_name -> dubbo.mesh.v1alpha1.ZoneEgress
- 2, // 1: dubbo.mesh.v1alpha1.ZoneEgressOverview.zoneEgressInsight:type_name -> dubbo.mesh.v1alpha1.ZoneEgressInsight
- 2, // [2:2] is the sub-list for method output_type
- 2, // [2:2] is the sub-list for method input_type
- 2, // [2:2] is the sub-list for extension type_name
- 2, // [2:2] is the sub-list for extension extendee
- 0, // [0:2] is the sub-list for field type_name
-}
-
-func init() { file_api_mesh_v1alpha1_zoneegressoverview_proto_init() }
-func file_api_mesh_v1alpha1_zoneegressoverview_proto_init() {
- if File_api_mesh_v1alpha1_zoneegressoverview_proto != nil {
- return
- }
- file_api_mesh_v1alpha1_zoneegress_proto_init()
- file_api_mesh_v1alpha1_zoneegressinsight_proto_init()
- if !protoimpl.UnsafeEnabled {
- file_api_mesh_v1alpha1_zoneegressoverview_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ZoneEgressOverview); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_api_mesh_v1alpha1_zoneegressoverview_proto_goTypes,
- DependencyIndexes: file_api_mesh_v1alpha1_zoneegressoverview_proto_depIdxs,
- MessageInfos: file_api_mesh_v1alpha1_zoneegressoverview_proto_msgTypes,
- }.Build()
- File_api_mesh_v1alpha1_zoneegressoverview_proto = out.File
- file_api_mesh_v1alpha1_zoneegressoverview_proto_rawDesc = nil
- file_api_mesh_v1alpha1_zoneegressoverview_proto_goTypes = nil
- file_api_mesh_v1alpha1_zoneegressoverview_proto_depIdxs = nil
-}
diff --git a/api/mesh/v1alpha1/zoneegressoverview.proto b/api/mesh/v1alpha1/zoneegressoverview.proto
deleted file mode 100644
index ea059f0..0000000
--- a/api/mesh/v1alpha1/zoneegressoverview.proto
+++ /dev/null
@@ -1,24 +0,0 @@
-syntax = "proto3";
-
-package dubbo.mesh.v1alpha1;
-
-option go_package = "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1";
-
-import "api/mesh/options.proto";
-import "api/mesh/v1alpha1/zoneegress.proto";
-import "api/mesh/v1alpha1/zoneegressinsight.proto";
-
-// ZoneEgressOverview defines the projected state of a ZoneEgress.
-message ZoneEgressOverview {
-
- option (dubbo.mesh.resource).name = "ZoneEgressOverviewResource";
- option (dubbo.mesh.resource).type = "ZoneEgressOverview";
- option (dubbo.mesh.resource).global = true;
- option (dubbo.mesh.resource).package = "mesh";
- option (dubbo.mesh.resource).skip_registration = true;
- option (dubbo.mesh.resource).skip_kubernetes_wrappers = true;
-
- ZoneEgress zoneEgress = 1;
-
- ZoneEgressInsight zoneEgressInsight = 2;
-}
diff --git a/api/mesh/v1alpha1/zoneingress_overview.pb.go b/api/mesh/v1alpha1/zoneingress_overview.pb.go
deleted file mode 100644
index 12e2e6f..0000000
--- a/api/mesh/v1alpha1/zoneingress_overview.pb.go
+++ /dev/null
@@ -1,192 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.28.1
-// protoc v3.20.0
-// source: api/mesh/v1alpha1/zoneingress_overview.proto
-
-package v1alpha1
-
-import (
- reflect "reflect"
- sync "sync"
-)
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-import (
- _ "github.com/apache/dubbo-kubernetes/api/mesh"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// ZoneIngressOverview defines the projected state of a ZoneIngress.
-type ZoneIngressOverview struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ZoneIngress *ZoneIngress `protobuf:"bytes,1,opt,name=zone_ingress,json=zoneIngress,proto3" json:"zone_ingress,omitempty"`
- ZoneIngressInsight *ZoneIngressInsight `protobuf:"bytes,2,opt,name=zone_ingress_insight,json=zoneIngressInsight,proto3" json:"zone_ingress_insight,omitempty"`
-}
-
-func (x *ZoneIngressOverview) Reset() {
- *x = ZoneIngressOverview{}
- if protoimpl.UnsafeEnabled {
- mi := &file_api_mesh_v1alpha1_zoneingress_overview_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ZoneIngressOverview) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ZoneIngressOverview) ProtoMessage() {}
-
-func (x *ZoneIngressOverview) ProtoReflect() protoreflect.Message {
- mi := &file_api_mesh_v1alpha1_zoneingress_overview_proto_msgTypes[0]
- 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 ZoneIngressOverview.ProtoReflect.Descriptor instead.
-func (*ZoneIngressOverview) Descriptor() ([]byte, []int) {
- return file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *ZoneIngressOverview) GetZoneIngress() *ZoneIngress {
- if x != nil {
- return x.ZoneIngress
- }
- return nil
-}
-
-func (x *ZoneIngressOverview) GetZoneIngressInsight() *ZoneIngressInsight {
- if x != nil {
- return x.ZoneIngressInsight
- }
- return nil
-}
-
-var File_api_mesh_v1alpha1_zoneingress_overview_proto protoreflect.FileDescriptor
-
-var file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDesc = []byte{
- 0x0a, 0x2c, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2f, 0x7a, 0x6f, 0x6e, 0x65, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f,
- 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13,
- 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x1a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x6f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x61, 0x70, 0x69,
- 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x7a,
- 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x1a, 0x2c, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c,
- 0x70, 0x68, 0x61, 0x31, 0x2f, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73,
- 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
- 0x99, 0x02, 0x0a, 0x13, 0x5a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4f,
- 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x43, 0x0a, 0x0c, 0x7a, 0x6f, 0x6e, 0x65, 0x5f,
- 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e,
- 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52,
- 0x0b, 0x7a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x14,
- 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x73,
- 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x64, 0x75, 0x62,
- 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
- 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x73, 0x69,
- 0x67, 0x68, 0x74, 0x52, 0x12, 0x7a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73,
- 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x1d, 0x0a,
- 0x1b, 0x5a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4f, 0x76, 0x65, 0x72,
- 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6,
- 0x01, 0x15, 0x12, 0x13, 0x5a, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4f,
- 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x18, 0x01, 0xaa,
- 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
- 0x02, 0x30, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x60, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67,
- 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
- 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65,
- 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescOnce sync.Once
- file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescData = file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDesc
-)
-
-func file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescGZIP() []byte {
- file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescOnce.Do(func() {
- file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescData)
- })
- return file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDescData
-}
-
-var file_api_mesh_v1alpha1_zoneingress_overview_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_api_mesh_v1alpha1_zoneingress_overview_proto_goTypes = []interface{}{
- (*ZoneIngressOverview)(nil), // 0: dubbo.mesh.v1alpha1.ZoneIngressOverview
- (*ZoneIngress)(nil), // 1: dubbo.mesh.v1alpha1.ZoneIngress
- (*ZoneIngressInsight)(nil), // 2: dubbo.mesh.v1alpha1.ZoneIngressInsight
-}
-var file_api_mesh_v1alpha1_zoneingress_overview_proto_depIdxs = []int32{
- 1, // 0: dubbo.mesh.v1alpha1.ZoneIngressOverview.zone_ingress:type_name -> dubbo.mesh.v1alpha1.ZoneIngress
- 2, // 1: dubbo.mesh.v1alpha1.ZoneIngressOverview.zone_ingress_insight:type_name -> dubbo.mesh.v1alpha1.ZoneIngressInsight
- 2, // [2:2] is the sub-list for method output_type
- 2, // [2:2] is the sub-list for method input_type
- 2, // [2:2] is the sub-list for extension type_name
- 2, // [2:2] is the sub-list for extension extendee
- 0, // [0:2] is the sub-list for field type_name
-}
-
-func init() { file_api_mesh_v1alpha1_zoneingress_overview_proto_init() }
-func file_api_mesh_v1alpha1_zoneingress_overview_proto_init() {
- if File_api_mesh_v1alpha1_zoneingress_overview_proto != nil {
- return
- }
- file_api_mesh_v1alpha1_zone_ingress_proto_init()
- file_api_mesh_v1alpha1_zone_ingress_insight_proto_init()
- if !protoimpl.UnsafeEnabled {
- file_api_mesh_v1alpha1_zoneingress_overview_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ZoneIngressOverview); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_api_mesh_v1alpha1_zoneingress_overview_proto_goTypes,
- DependencyIndexes: file_api_mesh_v1alpha1_zoneingress_overview_proto_depIdxs,
- MessageInfos: file_api_mesh_v1alpha1_zoneingress_overview_proto_msgTypes,
- }.Build()
- File_api_mesh_v1alpha1_zoneingress_overview_proto = out.File
- file_api_mesh_v1alpha1_zoneingress_overview_proto_rawDesc = nil
- file_api_mesh_v1alpha1_zoneingress_overview_proto_goTypes = nil
- file_api_mesh_v1alpha1_zoneingress_overview_proto_depIdxs = nil
-}
diff --git a/api/mesh/v1alpha1/zoneingress_overview.proto b/api/mesh/v1alpha1/zoneingress_overview.proto
deleted file mode 100644
index 8afc614..0000000
--- a/api/mesh/v1alpha1/zoneingress_overview.proto
+++ /dev/null
@@ -1,23 +0,0 @@
-syntax = "proto3";
-
-package dubbo.mesh.v1alpha1;
-
-option go_package = "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1";
-import "api/mesh/options.proto";
-import "api/mesh/v1alpha1/zone_ingress.proto";
-import "api/mesh/v1alpha1/zone_ingress_insight.proto";
-
-// ZoneIngressOverview defines the projected state of a ZoneIngress.
-message ZoneIngressOverview {
-
- option (dubbo.mesh.resource).name = "ZoneIngressOverviewResource";
- option (dubbo.mesh.resource).type = "ZoneIngressOverview";
- option (dubbo.mesh.resource).global = true;
- option (dubbo.mesh.resource).package = "mesh";
- option (dubbo.mesh.resource).skip_registration = true;
- option (dubbo.mesh.resource).skip_kubernetes_wrappers = true;
-
- ZoneIngress zone_ingress = 1;
-
- ZoneIngressInsight zone_ingress_insight = 2;
-}
diff --git a/api/system/v1alpha1/zone_insight.pb.go b/api/system/v1alpha1/zone_insight.pb.go
index 84b61a8..0f98ab5 100644
--- a/api/system/v1alpha1/zone_insight.pb.go
+++ b/api/system/v1alpha1/zone_insight.pb.go
@@ -161,7 +161,7 @@
return ""
}
-// KDSSubscription describes a single KDS subscription
+// DDSSubscription describes a single DDS subscription
// created by a Zone to the Global.
// Ideally, there should be only one such subscription per Zone lifecycle.
// Presence of multiple subscriptions might indicate one of the following
@@ -184,12 +184,12 @@
ConnectTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=connect_time,json=connectTime,proto3" json:"connect_time,omitempty"`
// Time when a given Zone disconnected from the Global.
DisconnectTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=disconnect_time,json=disconnectTime,proto3" json:"disconnect_time,omitempty"`
- // Status of the KDS subscription.
+ // Status of the DDS subscription.
Status *DDSSubscriptionStatus `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
// Generation is an integer number which is periodically increased by the
// status sink
Generation uint32 `protobuf:"varint,7,opt,name=generation,proto3" json:"generation,omitempty"`
- // Config of Zone Kuma CP
+ // Config of Zone Dubbo CP
Config string `protobuf:"bytes,8,opt,name=config,proto3" json:"config,omitempty"`
// Indicates if subscription provided auth token
AuthTokenProvided bool `protobuf:"varint,9,opt,name=auth_token_provided,json=authTokenProvided,proto3" json:"auth_token_provided,omitempty"`
@@ -299,9 +299,9 @@
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Time when status of a given KDS subscription was most recently updated.
+ // Time when status of a given DDS subscription was most recently updated.
LastUpdateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_update_time,json=lastUpdateTime,proto3" json:"last_update_time,omitempty"`
- // Total defines an aggregate over individual KDS stats.
+ // Total defines an aggregate over individual DDS stats.
Total *DDSServiceStats `protobuf:"bytes,2,opt,name=total,proto3" json:"total,omitempty"`
Stat map[string]*DDSServiceStats `protobuf:"bytes,3,rep,name=stat,proto3" json:"stat,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
diff --git a/api/system/v1alpha1/zone_insight.proto b/api/system/v1alpha1/zone_insight.proto
index 5d6ecf0..2927548 100644
--- a/api/system/v1alpha1/zone_insight.proto
+++ b/api/system/v1alpha1/zone_insight.proto
@@ -34,7 +34,7 @@
string clusters_global_instance_id = 3;
}
-// KDSSubscription describes a single KDS subscription
+// DDSSubscription describes a single DDS subscription
// created by a Zone to the Global.
// Ideally, there should be only one such subscription per Zone lifecycle.
// Presence of multiple subscriptions might indicate one of the following
@@ -58,14 +58,14 @@
// Time when a given Zone disconnected from the Global.
google.protobuf.Timestamp disconnect_time = 4;
- // Status of the KDS subscription.
+ // Status of the DDS subscription.
DDSSubscriptionStatus status = 5;
// Generation is an integer number which is periodically increased by the
// status sink
uint32 generation = 7;
- // Config of Zone Kuma CP
+ // Config of Zone Dubbo CP
string config = 8;
// Indicates if subscription provided auth token
@@ -79,10 +79,10 @@
// DDSSubscriptionStatus defines status of an DDS subscription.
message DDSSubscriptionStatus {
- // Time when status of a given KDS subscription was most recently updated.
+ // Time when status of a given DDS subscription was most recently updated.
google.protobuf.Timestamp last_update_time = 1;
- // Total defines an aggregate over individual KDS stats.
+ // Total defines an aggregate over individual DDS stats.
DDSServiceStats total = 2;
map<string, DDSServiceStats> stat = 3;
diff --git a/app/dubbo-cp/cmd/run.go b/app/dubbo-cp/cmd/run.go
index 9b5c275..71b8389 100644
--- a/app/dubbo-cp/cmd/run.go
+++ b/app/dubbo-cp/cmd/run.go
@@ -41,7 +41,6 @@
dp_server "github.com/apache/dubbo-kubernetes/pkg/dp-server"
"github.com/apache/dubbo-kubernetes/pkg/dubbo"
"github.com/apache/dubbo-kubernetes/pkg/hds"
- "github.com/apache/dubbo-kubernetes/pkg/intercp"
"github.com/apache/dubbo-kubernetes/pkg/test"
"github.com/apache/dubbo-kubernetes/pkg/util/os"
dubbo_version "github.com/apache/dubbo-kubernetes/pkg/version"
@@ -139,10 +138,6 @@
runLog.Error(err, "unable to set up Diagnostics server")
return err
}
- if err := intercp.Setup(rt); err != nil {
- runLog.Error(err, "unable to set up Control Plane Intercommunication")
- return err
- }
if rt.GetMode() == core.Test {
if err := test.Setup(rt); err != nil {
diff --git a/app/dubboctl/cmd/proxy.go b/app/dubboctl/cmd/proxy.go
index 5689dd5..f901ee1 100644
--- a/app/dubboctl/cmd/proxy.go
+++ b/app/dubboctl/cmd/proxy.go
@@ -20,27 +20,40 @@
import (
"context"
"fmt"
+<<<<<<< HEAD
"github.com/apache/dubbo-kubernetes/pkg/core"
"github.com/apache/dubbo-kubernetes/pkg/core/logger"
"github.com/apache/dubbo-kubernetes/pkg/util/proto"
"github.com/pkg/errors"
"go.uber.org/zap/zapcore"
+=======
+>>>>>>> b165c47df48705310408955be94d62e3675c974b
"io"
"os"
"path/filepath"
"strings"
+)
+
+import (
+ "github.com/pkg/errors"
"github.com/spf13/cobra"
+ "go.uber.org/zap/zapcore"
+)
+
+import (
mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
"github.com/apache/dubbo-kubernetes/app/dubboctl/internal/envoy"
"github.com/apache/dubbo-kubernetes/pkg/config/app/dubboctl"
+ "github.com/apache/dubbo-kubernetes/pkg/core"
dubbo_cmd "github.com/apache/dubbo-kubernetes/pkg/core/cmd"
"github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
"github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
"github.com/apache/dubbo-kubernetes/pkg/core/resources/model/rest"
core_xds "github.com/apache/dubbo-kubernetes/pkg/core/xds"
dubbo_log "github.com/apache/dubbo-kubernetes/pkg/log"
+ "github.com/apache/dubbo-kubernetes/pkg/util/proto"
"github.com/apache/dubbo-kubernetes/pkg/util/template"
)
@@ -123,7 +136,7 @@
return err
}
- fmt.Printf("%s: logs will be stored in %q\n", "kuma-dp", output)
+ fmt.Printf("%s: logs will be stored in %q\n", "dubbo-dp", output)
core.SetLogger(core.NewLoggerWithRotation(level, output, arg.maxSize, arg.maxBackups, arg.maxAge))
} else {
core.SetLogger(core.NewLogger(level))
@@ -201,7 +214,7 @@
envoyComponent, err := envoy.New(opts)
err = envoyComponent.Start(stopComponents)
if err != nil {
- runLog.Error(err, "error while running Kuma DP")
+ runLog.Error(err, "error while running Dubbo DP")
return err
}
runLog.Info("stopping Dubbo proxy")
@@ -211,7 +224,7 @@
// root flags
cmd.PersistentFlags().StringVar(&arg.logLevel, "log-level", dubbo_log.InfoLevel.String(), UsageOptions("log level", dubbo_log.OffLevel, dubbo_log.InfoLevel, dubbo_log.DebugLevel))
- cmd.PersistentFlags().StringVar(&arg.outputPath, "log-output-path", arg.outputPath, "path to the file that will be filled with logs. Example: if we set it to /tmp/kuma.log then after the file is rotated we will have /tmp/kuma-2021-06-07T09-15-18.265.log")
+ cmd.PersistentFlags().StringVar(&arg.outputPath, "log-output-path", arg.outputPath, "path to the file that will be filled with logs. Example: if we set it to /tmp/dubbo.log then after the file is rotated we will have /tmp/dubbo-2021-06-07T09-15-18.265.log")
cmd.PersistentFlags().IntVar(&arg.maxBackups, "log-max-retained-files", 1000, "maximum number of the old log files to retain")
cmd.PersistentFlags().IntVar(&arg.maxSize, "log-max-size", 100, "maximum size in megabytes of a log file before it gets rotated")
cmd.PersistentFlags().IntVar(&arg.maxAge, "log-max-age", 30, "maximum number of days to retain old log files based on the timestamp encoded in their filename")
@@ -222,6 +235,7 @@
proxyCmd.PersistentFlags().StringVar(&cfg.DataplaneRuntime.ResourcePath, "dataplane-file", "Path to Ingress and Egress template to apply (YAML or JSON)", "data-plane-file")
cmd.AddCommand(proxyCmd)
}
+
func UsageOptions(desc string, options ...interface{}) string {
values := make([]string, 0, len(options))
for _, option := range options {
diff --git a/app/dubboctl/cmd/proxy_context.go b/app/dubboctl/cmd/proxy_context.go
index 33cbaff..47e3ac3 100644
--- a/app/dubboctl/cmd/proxy_context.go
+++ b/app/dubboctl/cmd/proxy_context.go
@@ -18,7 +18,6 @@
package cmd
import (
- "github.com/apache/dubbo-kubernetes/pkg/log"
"os"
"path/filepath"
"runtime"
@@ -38,6 +37,7 @@
"github.com/apache/dubbo-kubernetes/pkg/config/app/dubboctl"
"github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
core_xds "github.com/apache/dubbo-kubernetes/pkg/core/xds"
+ "github.com/apache/dubbo-kubernetes/pkg/log"
leader_memory "github.com/apache/dubbo-kubernetes/pkg/plugins/leader/memory"
util_files "github.com/apache/dubbo-kubernetes/pkg/util/files"
)
diff --git a/app/dubboctl/cmd/proxy_test.go b/app/dubboctl/cmd/proxy_test.go
index ecb6552..a5d7eb1 100644
--- a/app/dubboctl/cmd/proxy_test.go
+++ b/app/dubboctl/cmd/proxy_test.go
@@ -6,10 +6,6 @@
import (
"context"
"fmt"
- dubbo_cmd "github.com/apache/dubbo-kubernetes/pkg/core/cmd"
- "github.com/apache/dubbo-kubernetes/pkg/test"
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
"io"
"os"
"path/filepath"
@@ -19,6 +15,17 @@
"testing"
)
+import (
+ . "github.com/onsi/ginkgo/v2"
+
+ . "github.com/onsi/gomega"
+)
+
+import (
+ dubbo_cmd "github.com/apache/dubbo-kubernetes/pkg/core/cmd"
+ "github.com/apache/dubbo-kubernetes/pkg/test"
+)
+
func TestCmd(t *testing.T) {
test.RunSpecs(t, "cmd Suite")
}
diff --git a/app/dubboctl/internal/envoy/envoy.go b/app/dubboctl/internal/envoy/envoy.go
index fe4ef7d..61d7262 100644
--- a/app/dubboctl/internal/envoy/envoy.go
+++ b/app/dubboctl/internal/envoy/envoy.go
@@ -67,9 +67,9 @@
}
type EnvoyVersion struct {
- Build string
- Version string
- KumaDpCompatible bool
+ Build string
+ Version string
+ DubboDpCompatible bool
}
type Opts struct {
diff --git a/app/dubboctl/internal/envoy/remote_bootstrap.go b/app/dubboctl/internal/envoy/remote_bootstrap.go
index a963f12..f658768 100644
--- a/app/dubboctl/internal/envoy/remote_bootstrap.go
+++ b/app/dubboctl/internal/envoy/remote_bootstrap.go
@@ -36,7 +36,6 @@
"github.com/pkg/errors"
- _ "github.com/apache/dubbo-kubernetes/pkg/xds/envoy"
"github.com/sethvargo/go-retry"
)
@@ -46,11 +45,12 @@
util_proto "github.com/apache/dubbo-kubernetes/pkg/util/proto"
dubbo_version "github.com/apache/dubbo-kubernetes/pkg/version"
"github.com/apache/dubbo-kubernetes/pkg/xds/bootstrap/types"
+ _ "github.com/apache/dubbo-kubernetes/pkg/xds/envoy"
)
var (
log = core.Log.WithName("dataplane")
- DpNotFoundErr = errors.New("Dataplane entity not found. If you are running on Universal please create a Dataplane entity on kuma-cp before starting kuma-dp or pass it to kuma-dp run --dataplane-file=/file. If you are running on Kubernetes, please check the kuma-cp logs to determine why the Dataplane entity could not be created by the automatic sidecar injection.")
+ DpNotFoundErr = errors.New("Dataplane entity not found. If you are running on Universal please create a Dataplane entity on dubbo-cp before starting dubbo-dp or pass it to dubbo-dp run --dataplane-file=/file. If you are running on Kubernetes, please check the dubbo-cp logs to determine why the Dataplane entity could not be created by the automatic sidecar injection.")
)
type remoteBootstrap struct {
@@ -199,7 +199,7 @@
Envoy: types.EnvoyVersion{
Version: params.EnvoyVersion.Version,
Build: params.EnvoyVersion.Build,
- DubboDpCompatible: params.EnvoyVersion.KumaDpCompatible,
+ DubboDpCompatible: params.EnvoyVersion.DubboDpCompatible,
},
},
DynamicMetadata: params.DynamicMetadata,
diff --git a/deploy/charts/admin/crds/dubbo.io_mappings.yaml b/deploy/charts/admin/crds/dubbo.io_mappings.yaml
index b2dcd43..8a9c7dd 100644
--- a/deploy/charts/admin/crds/dubbo.io_mappings.yaml
+++ b/deploy/charts/admin/crds/dubbo.io_mappings.yaml
@@ -14,7 +14,7 @@
listKind: MappingList
plural: mappings
singular: mapping
- scope: Cluster
+ scope: Namespaced
versions:
- name: v1alpha1
schema:
diff --git a/deploy/charts/admin/crds/dubbo.io_metadata.yaml b/deploy/charts/admin/crds/dubbo.io_metadata.yaml
index 8ed6f08..039953a 100644
--- a/deploy/charts/admin/crds/dubbo.io_metadata.yaml
+++ b/deploy/charts/admin/crds/dubbo.io_metadata.yaml
@@ -14,7 +14,7 @@
listKind: MetaDataList
plural: metadata
singular: metadata
- scope: Cluster
+ scope: Namespaced
versions:
- name: v1alpha1
schema:
diff --git a/docs/multicluster/design.md b/docs/multicluster/design.md
new file mode 100644
index 0000000..cd57254
--- /dev/null
+++ b/docs/multicluster/design.md
@@ -0,0 +1 @@
+https://www.yuque.com/jiuan-c16st/ofzcvf/vownxi5dy4nzvmm5
diff --git a/mk/run.mk b/mk/run.mk
index a4a4854..20a4055 100644
--- a/mk/run.mk
+++ b/mk/run.mk
@@ -1,7 +1,7 @@
NUM_OF_DATAPLANES ?= 100
NUM_OF_SERVICES ?= 80
DISTRIBUTION_TARGET_NAME ?= $(PROJECT_NAME)
-DUBBO_CP_ADDRESS ?= grpcs://localhost:5678
+DUBBO_CP_ADDRESS ?= grpc://localhost:5678
DISTRIBUTION_FOLDER=build/distributions/$(GOOS)-$(GOARCH)/$(DISTRIBUTION_TARGET_NAME)
CP_STORE = memory
diff --git a/pkg/config/app/dubbo-cp/config.go b/pkg/config/app/dubbo-cp/config.go
index f42d02f..fdc3b9b 100644
--- a/pkg/config/app/dubbo-cp/config.go
+++ b/pkg/config/app/dubbo-cp/config.go
@@ -116,11 +116,11 @@
type DDSEventBasedWatchdog struct {
// How often we flush changes when experimental event based watchdog is used.
- FlushInterval config_types.Duration `json:"flushInterval" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_FLUSH_INTERVAL"`
- // How often we schedule full KDS resync when experimental event based watchdog is used.
- FullResyncInterval config_types.Duration `json:"fullResyncInterval" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_FULL_RESYNC_INTERVAL"`
+ FlushInterval config_types.Duration `json:"flushInterval" envconfig:"DUBBO_EXPERIMENTAL_DDS_EVENT_BASED_WATCHDOG_FLUSH_INTERVAL"`
+ // How often we schedule full DDS resync when experimental event based watchdog is used.
+ FullResyncInterval config_types.Duration `json:"fullResyncInterval" envconfig:"DUBBO_EXPERIMENTAL_DDS_EVENT_BASED_WATCHDOG_FULL_RESYNC_INTERVAL"`
// If true, then initial full resync is going to be delayed by 0 to FullResyncInterval.
- DelayFullResync bool `json:"delayFullResync" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_DELAY_FULL_RESYNC"`
+ DelayFullResync bool `json:"delayFullResync" envconfig:"DUBBO_EXPERIMENTAL_DDS_EVENT_BASED_WATCHDOG_DELAY_FULL_RESYNC"`
}
func DefaultEventBasedWatchdog() DDSEventBasedWatchdog {
diff --git a/pkg/config/app/dubboctl/proxy_config.go b/pkg/config/app/dubboctl/proxy_config.go
index 2d9d219..14024a8 100644
--- a/pkg/config/app/dubboctl/proxy_config.go
+++ b/pkg/config/app/dubboctl/proxy_config.go
@@ -18,11 +18,11 @@
package dubboctl
import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
"time"
)
import (
+ mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
"github.com/apache/dubbo-kubernetes/pkg/config"
config_types "github.com/apache/dubbo-kubernetes/pkg/config/types"
)
diff --git a/pkg/config/dp-server/config.go b/pkg/config/dp-server/config.go
index 08addc9..e0d1688 100644
--- a/pkg/config/dp-server/config.go
+++ b/pkg/config/dp-server/config.go
@@ -72,37 +72,37 @@
// Configuration for zone proxy authentication.
ZoneProxy ZoneProxyAuthnConfig `json:"zoneProxy"`
// If true then Envoy uses Google gRPC instead of Envoy gRPC which lets a proxy reload the auth data (service account token, dp token etc.) from path without proxy restart.
- EnableReloadableTokens bool `json:"enableReloadableTokens" envconfig:"kuma_dp_server_authn_enable_reloadable_tokens"`
+ EnableReloadableTokens bool `json:"enableReloadableTokens" envconfig:"dubbo_dp_server_authn_enable_reloadable_tokens"`
}
type DpProxyAuthnConfig struct {
// Type of authentication. Available values: "serviceAccountToken", "dpToken", "none".
// If empty, autoconfigured based on the environment - "serviceAccountToken" on Kubernetes, "dpToken" on Universal.
- Type string `json:"type" envconfig:"kuma_dp_server_authn_dp_proxy_type"`
+ Type string `json:"type" envconfig:"dubbo_dp_server_authn_dp_proxy_type"`
// Configuration of dpToken authentication method
DpToken DpTokenAuthnConfig `json:"dpToken"`
}
type ZoneProxyAuthnConfig struct {
// Type of authentication. Available values: "serviceAccountToken", "zoneToken", "none".
// If empty, autoconfigured based on the environment - "serviceAccountToken" on Kubernetes, "zoneToken" on Universal.
- Type string `json:"type" envconfig:"kuma_dp_server_authn_zone_proxy_type"`
+ Type string `json:"type" envconfig:"dubbo_dp_server_authn_zone_proxy_type"`
// Configuration for zoneToken authentication method.
ZoneToken ZoneTokenAuthnConfig `json:"zoneToken"`
}
type DpTokenAuthnConfig struct {
// If true the control plane token issuer is enabled. It's recommended to set it to false when all the tokens are issued offline.
- EnableIssuer bool `json:"enableIssuer" envconfig:"kuma_dp_server_authn_dp_proxy_dp_token_enable_issuer"`
+ EnableIssuer bool `json:"enableIssuer" envconfig:"dubbo_dp_server_authn_dp_proxy_dp_token_enable_issuer"`
// DP Token validator configuration
Validator DpTokenValidatorConfig `json:"validator"`
}
type ZoneTokenAuthnConfig struct {
// If true the control plane token issuer is enabled. It's recommended to set it to false when all the tokens are issued offline.
- EnableIssuer bool `json:"enableIssuer" envconfig:"kuma_dp_server_authn_zone_proxy_zone_token_enable_issuer"`
+ EnableIssuer bool `json:"enableIssuer" envconfig:"dubbo_dp_server_authn_zone_proxy_zone_token_enable_issuer"`
// Zone Token validator configuration
Validator ZoneTokenValidatorConfig `json:"validator"`
}
type DpTokenValidatorConfig struct {
- // If true then Kuma secrets with prefix "dataplane-token-signing-key-{mesh}" are considered as signing keys.
- UseSecrets bool `json:"useSecrets" envconfig:"kuma_dp_server_authn_dp_proxy_dp_token_validator_use_secrets"`
+ // If true then Dubbo secrets with prefix "dataplane-token-signing-key-{mesh}" are considered as signing keys.
+ UseSecrets bool `json:"useSecrets" envconfig:"dubbo_dp_server_authn_dp_proxy_dp_token_validator_use_secrets"`
// List of public keys used to validate the token
PublicKeys []config_types.MeshedPublicKey `json:"publicKeys"`
}
@@ -117,8 +117,8 @@
}
type ZoneTokenValidatorConfig struct {
- // If true then Kuma secrets with prefix "zone-token-signing-key" are considered as signing keys.
- UseSecrets bool `json:"useSecrets" envconfig:"kuma_dp_server_authn_zone_proxy_zone_token_validator_use_secrets"`
+ // If true then Dubbo secrets with prefix "zone-token-signing-key" are considered as signing keys.
+ UseSecrets bool `json:"useSecrets" envconfig:"dubbo_dp_server_authn_zone_proxy_zone_token_validator_use_secrets"`
// List of public keys used to validate the token
PublicKeys []config_types.PublicKey `json:"publicKeys"`
}
diff --git a/pkg/config/eventbus/config.go b/pkg/config/eventbus/config.go
index 0591005..b3099d1 100644
--- a/pkg/config/eventbus/config.go
+++ b/pkg/config/eventbus/config.go
@@ -19,7 +19,7 @@
type Config struct {
// BufferSize controls the buffer for every single event listener.
- // If we go over buffer, additional delay may happen to various operation like insight recomputation or KDS.
+ // If we go over buffer, additional delay may happen to various operation like insight recomputation or DDS.
BufferSize uint `json:"bufferSize" envconfig:"dubbo_event_bus_buffer_size"`
}
diff --git a/pkg/config/multizone/dds.go b/pkg/config/multizone/dds.go
index bc8ae0b..89b9eba 100644
--- a/pkg/config/multizone/dds.go
+++ b/pkg/config/multizone/dds.go
@@ -32,36 +32,36 @@
config.BaseConfig
// Port of a gRPC server that serves Dubbo Discovery Service (DDS).
- GrpcPort uint32 `json:"grpcPort" envconfig:"dubbo_multizone_global_kds_grpc_port"`
+ GrpcPort uint32 `json:"grpcPort" envconfig:"dubbo_multizone_global_dds_grpc_port"`
// Interval for refreshing state of the world
- RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"dubbo_multizone_global_kds_refresh_interval"`
+ RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"dubbo_multizone_global_dds_refresh_interval"`
// Interval for flushing Zone Insights (stats of multi-zone communication)
- ZoneInsightFlushInterval config_types.Duration `json:"zoneInsightFlushInterval" envconfig:"dubbo_multizone_global_kds_zone_insight_flush_interval"`
- // TlsEnabled turns on TLS for KDS
- TlsEnabled bool `json:"tlsEnabled" envconfig:"dubbo_multizone_global_kds_tls_enabled"`
+ ZoneInsightFlushInterval config_types.Duration `json:"zoneInsightFlushInterval" envconfig:"dubbo_multizone_global_dds_zone_insight_flush_interval"`
+ // TlsEnabled turns on TLS for DDS
+ TlsEnabled bool `json:"tlsEnabled" envconfig:"dubbo_multizone_global_dds_tls_enabled"`
// TlsCertFile defines a path to a file with PEM-encoded TLS cert.
- TlsCertFile string `json:"tlsCertFile" envconfig:"dubbo_multizone_global_kds_tls_cert_file"`
+ TlsCertFile string `json:"tlsCertFile" envconfig:"dubbo_multizone_global_dds_tls_cert_file"`
// TlsKeyFile defines a path to a file with PEM-encoded TLS key.
- TlsKeyFile string `json:"tlsKeyFile" envconfig:"dubbo_multizone_global_kds_tls_key_file"`
+ TlsKeyFile string `json:"tlsKeyFile" envconfig:"dubbo_multizone_global_dds_tls_key_file"`
// TlsMinVersion defines the minimum TLS version to be used
- TlsMinVersion string `json:"tlsMinVersion" envconfig:"dubbo_multizone_global_kds_tls_min_version"`
+ TlsMinVersion string `json:"tlsMinVersion" envconfig:"dubbo_multizone_global_dds_tls_min_version"`
// TlsMaxVersion defines the maximum TLS version to be used
- TlsMaxVersion string `json:"tlsMaxVersion" envconfig:"dubbo_multizone_global_kds_tls_max_version"`
+ TlsMaxVersion string `json:"tlsMaxVersion" envconfig:"dubbo_multizone_global_dds_tls_max_version"`
// TlsCipherSuites defines the list of ciphers to use
- TlsCipherSuites []string `json:"tlsCipherSuites" envconfig:"dubbo_multizone_global_kds_tls_cipher_suites"`
- // MaxMsgSize defines a maximum size of the message that is exchanged using KDS.
+ TlsCipherSuites []string `json:"tlsCipherSuites" envconfig:"dubbo_multizone_global_dds_tls_cipher_suites"`
+ // MaxMsgSize defines a maximum size of the message that is exchanged using DDS.
// In practice this means a limit on full list of one resource type.
- MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"dubbo_multizone_global_kds_max_msg_size"`
- // MsgSendTimeout defines a timeout on sending a single KDS message.
- // KDS stream between control planes is terminated if the control plane hits this timeout.
- MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"dubbo_multizone_global_kds_msg_send_timeout"`
+ MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"dubbo_multizone_global_dds_max_msg_size"`
+ // MsgSendTimeout defines a timeout on sending a single DDS message.
+ // DDS stream between control planes is terminated if the control plane hits this timeout.
+ MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"dubbo_multizone_global_dds_msg_send_timeout"`
// Backoff that is executed when the global control plane is sending the response that was previously rejected by zone control plane.
- NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"dubbo_multizone_global_kds_nack_backoff"`
- // DisableSOTW if true doesn't expose SOTW version of KDS. Default: false
- DisableSOTW bool `json:"disableSOTW" envconfig:"dubbo_multizone_global_kds_disable_sotw"`
+ NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"dubbo_multizone_global_dds_nack_backoff"`
+ // DisableSOTW if true doesn't expose SOTW version of DDS. Default: false
+ DisableSOTW bool `json:"disableSOTW" envconfig:"dubbo_multizone_global_dds_disable_sotw"`
// ResponseBackoff is a time Global CP waits before sending ACK/NACK.
// This is a way to slow down Zone CP from sending resources too often.
- ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"dubbo_multizone_global_kds_response_backoff"`
+ ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"dubbo_multizone_global_dds_response_backoff"`
// ZoneHealthCheck holds config for ensuring zones are online
ZoneHealthCheck ZoneHealthCheckConfig `json:"zoneHealthCheck"`
}
@@ -108,22 +108,22 @@
config.BaseConfig
// Interval for refreshing state of the world
- RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"kuma_multizone_zone_kds_refresh_interval"`
+ RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"dubbo_multizone_zone_dds_refresh_interval"`
// If true, TLS connection to the server won't be verified.
- TlsSkipVerify bool `json:"tlsSkipVerify" envconfig:"kuma_multizone_zone_kds_tls_skip_verify"`
+ TlsSkipVerify bool `json:"tlsSkipVerify" envconfig:"dubbo_multizone_zone_dds_tls_skip_verify"`
// RootCAFile defines a path to a file with PEM-encoded Root CA. Client will verify the server by using it.
- RootCAFile string `json:"rootCaFile" envconfig:"kuma_multizone_zone_kds_root_ca_file"`
- // MaxMsgSize defines a maximum size of the message that is exchanged using KDS.
+ RootCAFile string `json:"rootCaFile" envconfig:"dubbo_multizone_zone_dds_root_ca_file"`
+ // MaxMsgSize defines a maximum size of the message that is exchanged using DDS.
// In practice this means a limit on full list of one resource type.
- MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"kuma_multizone_zone_kds_max_msg_size"`
- // MsgSendTimeout defines a timeout on sending a single KDS message.
- // KDS stream between control planes is terminated if the control plane hits this timeout.
- MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"kuma_multizone_zone_kds_msg_send_timeout"`
+ MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"dubbo_multizone_zone_dds_max_msg_size"`
+ // MsgSendTimeout defines a timeout on sending a single DDS message.
+ // DDS stream between control planes is terminated if the control plane hits this timeout.
+ MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"dubbo_multizone_zone_dds_msg_send_timeout"`
// Backoff that is executed when the zone control plane is sending the response that was previously rejected by global control plane.
- NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"kuma_multizone_zone_kds_nack_backoff"`
+ NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"dubbo_multizone_zone_dds_nack_backoff"`
// ResponseBackoff is a time Zone CP waits before sending ACK/NACK.
// This is a way to slow down Global CP from sending resources too often.
- ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"kuma_multizone_zone_kds_response_backoff"`
+ ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"dubbo_multizone_zone_dds_response_backoff"`
}
var _ config.Config = &DdsClientConfig{}
@@ -135,10 +135,10 @@
// PollInterval is the interval between the global CP checking ZoneInsight for
// health check pings and interval between zone CP sending health check pings
- PollInterval config_types.Duration `json:"pollInterval" envconfig:"kuma_multizone_global_kds_zone_health_check_poll_interval"`
+ PollInterval config_types.Duration `json:"pollInterval" envconfig:"dubbo_multizone_global_dds_zone_health_check_poll_interval"`
// Timeout is the time after the last health check that a zone counts as
// no longer online
- Timeout config_types.Duration `json:"timeout" envconfig:"kuma_multizone_global_kds_zone_health_check_timeout"`
+ Timeout config_types.Duration `json:"timeout" envconfig:"dubbo_multizone_global_dds_zone_health_check_timeout"`
}
func (c ZoneHealthCheckConfig) Validate() error {
diff --git a/pkg/config/plugins/runtime/k8s/config.go b/pkg/config/plugins/runtime/k8s/config.go
index c0aea14..ecf7f76 100644
--- a/pkg/config/plugins/runtime/k8s/config.go
+++ b/pkg/config/plugins/runtime/k8s/config.go
@@ -149,7 +149,7 @@
return errs
}
-// DataplaneContainer defines the configuration of a Kuma dataplane proxy container.
+// DataplaneContainer defines the configuration of a Dubbo dataplane proxy container.
type DataplaneContainer struct {
// Deprecated: Use DUBBO_BOOTSTRAP_SERVER_PARAMS_ADMIN_PORT instead.
AdminPort uint32 `json:"adminPort,omitempty" envconfig:"dubbo_runtime_kubernetes_injector_sidecar_container_admin_port"`
@@ -159,7 +159,7 @@
ReadinessProbe SidecarReadinessProbe `json:"readinessProbe,omitempty"`
// Liveness probe.
LivenessProbe SidecarLivenessProbe `json:"livenessProbe,omitempty"`
- // EnvVars are additional environment variables that can be placed on Kuma DP sidecar
+ // EnvVars are additional environment variables that can be placed on Dubbo DP sidecar
EnvVars map[string]string `json:"envVars" envconfig:"dubbo_runtime_kubernetes_injector_sidecar_container_env_vars"`
}
diff --git a/pkg/config/xds/config.go b/pkg/config/xds/config.go
index cb9a72c..ba2cd0b 100644
--- a/pkg/config/xds/config.go
+++ b/pkg/config/xds/config.go
@@ -66,7 +66,7 @@
}
type Gateway struct {
- GlobalDownstreamMaxConnections uint64 `json:"globalDownstreamMaxConnections" envconfig:"kuma_proxy_gateway_global_downstream_max_connections"`
+ GlobalDownstreamMaxConnections uint64 `json:"globalDownstreamMaxConnections" envconfig:"dubbo_proxy_gateway_global_downstream_max_connections"`
}
func DefaultXdsServerConfig() *XdsServerConfig {
diff --git a/pkg/core/admin/client.go b/pkg/core/admin/client.go
deleted file mode 100644
index 5bcbf39..0000000
--- a/pkg/core/admin/client.go
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package admin
-
-import (
- "context"
- "crypto/tls"
- "crypto/x509"
- "fmt"
- "io"
- "net"
- "net/http"
- "net/url"
- "time"
-)
-
-import (
- envoy_admin_v3 "github.com/envoyproxy/go-control-plane/envoy/admin/v3"
-
- "github.com/pkg/errors"
-)
-
-import (
- core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
- core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- util_proto "github.com/apache/dubbo-kubernetes/pkg/util/proto"
-)
-
-type EnvoyAdminClient interface {
- PostQuit(ctx context.Context, dataplane *core_mesh.DataplaneResource) error
-
- Stats(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error)
- Clusters(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error)
- ConfigDump(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error)
-}
-
-type envoyAdminClient struct {
- rm manager.ResourceManager
- defaultAdminPort uint32
-
- caCertPool *x509.CertPool
- clientCert *tls.Certificate
-}
-
-func NewEnvoyAdminClient(rm manager.ResourceManager, adminPort uint32) EnvoyAdminClient {
- client := &envoyAdminClient{
- rm: rm,
- defaultAdminPort: adminPort,
- }
- return client
-}
-
-func (a *envoyAdminClient) buildHTTPClient(ctx context.Context) (*http.Client, error) {
- c := &http.Client{
- Transport: &http.Transport{
- DialContext: (&net.Dialer{
- Timeout: 3 * time.Second,
- }).DialContext,
- },
- Timeout: 5 * time.Second,
- }
- return c, nil
-}
-
-const (
- quitquitquit = "quitquitquit"
-)
-
-func (a *envoyAdminClient) PostQuit(ctx context.Context, dataplane *core_mesh.DataplaneResource) error {
- httpClient, err := a.buildHTTPClient(ctx)
- if err != nil {
- return err
- }
-
- url := fmt.Sprintf("https://%s/%s", dataplane.AdminAddress(a.defaultAdminPort), quitquitquit)
- request, err := http.NewRequestWithContext(ctx, "POST", url, nil)
- if err != nil {
- return err
- }
-
- // Envoy will not send back any response, so do we not check the response
- response, err := httpClient.Do(request)
- if errors.Is(err, io.EOF) {
- return nil // Envoy may not respond correctly for this request because it already started the shut-down process.
- }
- if err != nil {
- return errors.Wrapf(err, "unable to send POST to %s", quitquitquit)
- }
- defer response.Body.Close()
-
- if response.StatusCode != http.StatusOK {
- return errors.Errorf("envoy response [%d %s] [%s]", response.StatusCode, response.Status, response.Body)
- }
-
- return nil
-}
-
-func (a *envoyAdminClient) Stats(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- return a.executeRequest(ctx, proxy, "stats")
-}
-
-func (a *envoyAdminClient) Clusters(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- return a.executeRequest(ctx, proxy, "clusters")
-}
-
-func (a *envoyAdminClient) ConfigDump(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- configDump, err := a.executeRequest(ctx, proxy, "config_dump")
- if err != nil {
- return nil, err
- }
-
- cd := &envoy_admin_v3.ConfigDump{}
- if err := util_proto.FromJSON(configDump, cd); err != nil {
- return nil, err
- }
-
- if err := Sanitize(cd); err != nil {
- return nil, err
- }
-
- return util_proto.ToJSONIndent(cd, " ")
-}
-
-func (a *envoyAdminClient) executeRequest(ctx context.Context, proxy core_model.ResourceWithAddress, path string) ([]byte, error) {
- var httpClient *http.Client
- var err error
- u := &url.URL{}
-
- switch proxy.(type) {
- case *core_mesh.DataplaneResource:
- httpClient, err = a.buildHTTPClient(ctx)
- if err != nil {
- return nil, err
- }
- u.Scheme = "https"
- case *core_mesh.ZoneIngressResource, *core_mesh.ZoneEgressResource:
- httpClient, err = a.buildHTTPClient(ctx)
- if err != nil {
- return nil, err
- }
- u.Scheme = "https"
- default:
- return nil, errors.New("unsupported proxy type")
- }
-
- if host, _, err := net.SplitHostPort(proxy.AdminAddress(a.defaultAdminPort)); err == nil && host == "127.0.0.1" {
- httpClient = &http.Client{
- Timeout: 5 * time.Second,
- }
- u.Scheme = "http"
- }
-
- u.Host = proxy.AdminAddress(a.defaultAdminPort)
- u.Path = path
- request, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil)
- if err != nil {
- return nil, err
- }
-
- response, err := httpClient.Do(request)
- if err != nil {
- return nil, errors.Wrapf(err, "unable to send GET to %s", "config_dump")
- }
- defer response.Body.Close()
-
- if response.StatusCode != http.StatusOK {
- return nil, errors.Errorf("envoy response [%d %s] [%s]", response.StatusCode, response.Status, response.Body)
- }
-
- resp, err := io.ReadAll(response.Body)
- if err != nil {
- return nil, err
- }
- return resp, nil
-}
diff --git a/pkg/core/admin/dds_client.go b/pkg/core/admin/dds_client.go
deleted file mode 100644
index 474b180..0000000
--- a/pkg/core/admin/dds_client.go
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package admin
-
-import (
- "context"
- "fmt"
- "reflect"
-)
-
-import (
- "github.com/pkg/errors"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
- core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- "github.com/apache/dubbo-kubernetes/pkg/dds/service"
- util_grpc "github.com/apache/dubbo-kubernetes/pkg/util/grpc"
- "github.com/apache/dubbo-kubernetes/pkg/util/k8s"
-)
-
-type ddsEnvoyAdminClient struct {
- rpcs service.EnvoyAdminRPCs
- k8sStore bool
-}
-
-func NewDDSEnvoyAdminClient(rpcs service.EnvoyAdminRPCs, k8sStore bool) EnvoyAdminClient {
- return &ddsEnvoyAdminClient{
- rpcs: rpcs,
- k8sStore: k8sStore,
- }
-}
-
-var _ EnvoyAdminClient = &ddsEnvoyAdminClient{}
-
-func (k *ddsEnvoyAdminClient) PostQuit(context.Context, *core_mesh.DataplaneResource) error {
- panic("not implemented")
-}
-
-func (k *ddsEnvoyAdminClient) ConfigDump(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- zone := core_model.ZoneOfResource(proxy)
- nameInZone := resNameInZone(proxy)
- reqId := core.NewUUID()
- tenantZoneID := service.ZoneClientIDFromCtx(ctx, zone)
-
- err := k.rpcs.XDSConfigDump.Send(tenantZoneID.String(), &mesh_proto.XDSConfigRequest{
- RequestId: reqId,
- ResourceType: string(proxy.Descriptor().Name),
- ResourceName: nameInZone, // send the name which without the added prefix
- ResourceMesh: proxy.GetMeta().GetMesh(), // should be empty for ZoneIngress/ZoneEgress
- })
- if err != nil {
- return nil, &DDSTransportError{requestType: "XDSConfigRequest", reason: err.Error()}
- }
-
- defer k.rpcs.XDSConfigDump.DeleteWatch(tenantZoneID.String(), reqId)
- ch := make(chan util_grpc.ReverseUnaryMessage)
- if err := k.rpcs.XDSConfigDump.WatchResponse(tenantZoneID.String(), reqId, ch); err != nil {
- return nil, errors.Wrapf(err, "could not watch the response")
- }
-
- select {
- case <-ctx.Done():
- return nil, ctx.Err()
- case resp := <-ch:
- configResp, ok := resp.(*mesh_proto.XDSConfigResponse)
- if !ok {
- return nil, errors.New("invalid request type")
- }
- if configResp.GetError() != "" {
- return nil, &DDSTransportError{requestType: "XDSConfigRequest", reason: configResp.GetError()}
- }
- return configResp.GetConfig(), nil
- }
-}
-
-func (k *ddsEnvoyAdminClient) Stats(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- zone := core_model.ZoneOfResource(proxy)
- nameInZone := resNameInZone(proxy)
- reqId := core.NewUUID()
- tenantZoneId := service.ZoneClientIDFromCtx(ctx, zone)
-
- err := k.rpcs.Stats.Send(tenantZoneId.String(), &mesh_proto.StatsRequest{
- RequestId: reqId,
- ResourceType: string(proxy.Descriptor().Name),
- ResourceName: nameInZone, // send the name which without the added prefix
- ResourceMesh: proxy.GetMeta().GetMesh(), // should be empty for ZoneIngress/ZoneEgress
- })
- if err != nil {
- return nil, &DDSTransportError{requestType: "StatsRequest", reason: err.Error()}
- }
-
- defer k.rpcs.Stats.DeleteWatch(tenantZoneId.String(), reqId)
- ch := make(chan util_grpc.ReverseUnaryMessage)
- if err := k.rpcs.Stats.WatchResponse(tenantZoneId.String(), reqId, ch); err != nil {
- return nil, errors.Wrapf(err, "could not watch the response")
- }
-
- select {
- case <-ctx.Done():
- return nil, ctx.Err()
- case resp := <-ch:
- statsResp, ok := resp.(*mesh_proto.StatsResponse)
- if !ok {
- return nil, errors.New("invalid request type")
- }
- if statsResp.GetError() != "" {
- return nil, &DDSTransportError{requestType: "StatsRequest", reason: statsResp.GetError()}
- }
- return statsResp.GetStats(), nil
- }
-}
-
-func (k *ddsEnvoyAdminClient) Clusters(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- zone := core_model.ZoneOfResource(proxy)
- nameInZone := resNameInZone(proxy)
- reqId := core.NewUUID()
- tenantZoneID := service.ZoneClientIDFromCtx(ctx, zone)
-
- err := k.rpcs.Clusters.Send(tenantZoneID.String(), &mesh_proto.ClustersRequest{
- RequestId: reqId,
- ResourceType: string(proxy.Descriptor().Name),
- ResourceName: nameInZone, // send the name which without the added prefix
- ResourceMesh: proxy.GetMeta().GetMesh(), // should be empty for ZoneIngress/ZoneEgress
- })
- if err != nil {
- return nil, &DDSTransportError{requestType: "ClustersRequest", reason: err.Error()}
- }
-
- defer k.rpcs.Clusters.DeleteWatch(tenantZoneID.String(), reqId)
- ch := make(chan util_grpc.ReverseUnaryMessage)
- if err := k.rpcs.Clusters.WatchResponse(tenantZoneID.String(), reqId, ch); err != nil {
- return nil, errors.Wrapf(err, "could not watch the response")
- }
-
- select {
- case <-ctx.Done():
- return nil, ctx.Err()
- case resp := <-ch:
- clustersResp, ok := resp.(*mesh_proto.ClustersResponse)
- if !ok {
- return nil, errors.New("invalid request type")
- }
- if clustersResp.GetError() != "" {
- return nil, &DDSTransportError{requestType: "ClustersRequest", reason: clustersResp.GetError()}
- }
- return clustersResp.GetClusters(), nil
- }
-}
-
-func resNameInZone(r core_model.Resource) string {
- name := core_model.GetDisplayName(r)
- if ns := r.GetMeta().GetLabels()[mesh_proto.KubeNamespaceTag]; ns != "" {
- name = k8s.K8sNamespacedNameToCoreName(name, ns)
- }
- return name
-}
-
-type DDSTransportError struct {
- requestType string
- reason string
-}
-
-func (e *DDSTransportError) Error() string {
- if e.reason == "" {
- return fmt.Sprintf("could not send %s", e.requestType)
- } else {
- return fmt.Sprintf("could not send %s: %s", e.requestType, e.reason)
- }
-}
-
-func (e *DDSTransportError) Is(err error) bool {
- return reflect.TypeOf(e) == reflect.TypeOf(err)
-}
diff --git a/pkg/core/admin/sanitize.go b/pkg/core/admin/sanitize.go
deleted file mode 100644
index 3b9b8d8..0000000
--- a/pkg/core/admin/sanitize.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package admin
-
-import (
- envoy_admin_v3 "github.com/envoyproxy/go-control-plane/envoy/admin/v3"
-)
-
-func Sanitize(configDump *envoy_admin_v3.ConfigDump) error {
- for _, config := range configDump.Configs {
- if config.MessageIs(&envoy_admin_v3.BootstrapConfigDump{}) {
- bootstrapConfigDump := &envoy_admin_v3.BootstrapConfigDump{}
- if err := config.UnmarshalTo(bootstrapConfigDump); err != nil {
- return err
- }
-
- for _, grpcService := range bootstrapConfigDump.GetBootstrap().GetDynamicResources().GetAdsConfig().GetGrpcServices() {
- for i, initMeta := range grpcService.InitialMetadata {
- if initMeta.Key == "authorization" {
- grpcService.InitialMetadata[i].Value = "[redacted]"
- }
- }
- }
-
- for _, grpcService := range bootstrapConfigDump.GetBootstrap().GetHdsConfig().GetGrpcServices() {
- for i, initMeta := range grpcService.InitialMetadata {
- if initMeta.Key == "authorization" {
- grpcService.InitialMetadata[i].Value = "[redacted]"
- }
- }
- }
-
- if err := config.MarshalFrom(bootstrapConfigDump); err != nil {
- return err
- }
- }
- }
- return nil
-}
diff --git a/pkg/core/bootstrap/bootstrap.go b/pkg/core/bootstrap/bootstrap.go
index 36e8805..8d5591a 100644
--- a/pkg/core/bootstrap/bootstrap.go
+++ b/pkg/core/bootstrap/bootstrap.go
@@ -41,7 +41,6 @@
config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
"github.com/apache/dubbo-kubernetes/pkg/config/core/resources/store"
"github.com/apache/dubbo-kubernetes/pkg/core"
- admin2 "github.com/apache/dubbo-kubernetes/pkg/core/admin"
config_manager "github.com/apache/dubbo-kubernetes/pkg/core/config/manager"
"github.com/apache/dubbo-kubernetes/pkg/core/consts"
"github.com/apache/dubbo-kubernetes/pkg/core/datasource"
@@ -68,9 +67,6 @@
dds_context "github.com/apache/dubbo-kubernetes/pkg/dds/context"
"github.com/apache/dubbo-kubernetes/pkg/dp-server/server"
"github.com/apache/dubbo-kubernetes/pkg/events"
- "github.com/apache/dubbo-kubernetes/pkg/intercp"
- "github.com/apache/dubbo-kubernetes/pkg/intercp/catalog"
- "github.com/apache/dubbo-kubernetes/pkg/intercp/envoyadmin"
k8s_extensions "github.com/apache/dubbo-kubernetes/pkg/plugins/extensions/k8s"
mesh_cache "github.com/apache/dubbo-kubernetes/pkg/xds/cache/mesh"
xds_context "github.com/apache/dubbo-kubernetes/pkg/xds/context"
@@ -126,28 +122,8 @@
}))
resourceManager := builder.ResourceManager()
- kdsContext := dds_context.DefaultContext(appCtx, resourceManager, cfg)
- builder.WithDDSContext(kdsContext)
-
- if cfg.Mode == config_core.Global {
- kdsEnvoyAdminClient := admin2.NewDDSEnvoyAdminClient(
- builder.DDSContext().EnvoyAdminRPCs,
- cfg.Store.Type == store.KubernetesStore,
- )
- forwardingClient := envoyadmin.NewForwardingEnvoyAdminClient(
- builder.ReadOnlyResourceManager(),
- catalog.NewConfigCatalog(resourceManager),
- builder.GetInstanceId(),
- intercp.PooledEnvoyAdminClientFn(builder.InterCPClientPool()),
- kdsEnvoyAdminClient,
- )
- builder.WithEnvoyAdminClient(forwardingClient)
- } else {
- builder.WithEnvoyAdminClient(admin2.NewEnvoyAdminClient(
- resourceManager,
- builder.Config().GetEnvoyAdminPort(),
- ))
- }
+ ddsContext := dds_context.DefaultContext(appCtx, resourceManager, cfg)
+ builder.WithDDSContext(ddsContext)
if err := initializeMeshCache(builder); err != nil {
return nil, err
diff --git a/pkg/core/managers/apis/dataplane/dataplane_manager.go b/pkg/core/managers/apis/dataplane/dataplane_manager.go
index f3feb71..8fc7adf 100644
--- a/pkg/core/managers/apis/dataplane/dataplane_manager.go
+++ b/pkg/core/managers/apis/dataplane/dataplane_manager.go
@@ -135,7 +135,7 @@
for _, inbound := range dp.Spec.Networking.Inbound {
if inbound.ServiceProbe != nil {
inbound.State = mesh_proto.Dataplane_Networking_Inbound_NotReady
- // write health for backwards compatibility with Kuma 2.5 and older
+ // write health for backwards compatibility with Dubbo
inbound.Health = &mesh_proto.Dataplane_Networking_Inbound_Health{
Ready: false,
}
@@ -147,5 +147,4 @@
if m.zone == "" || dp.Spec.Networking == nil {
return
}
-
}
diff --git a/pkg/plugins/common/zookeeper/listener.go b/pkg/core/resources/apis/mesh/metadata_helpers.go
similarity index 74%
rename from pkg/plugins/common/zookeeper/listener.go
rename to pkg/core/resources/apis/mesh/metadata_helpers.go
index fae637d..ca644ab 100644
--- a/pkg/plugins/common/zookeeper/listener.go
+++ b/pkg/core/resources/apis/mesh/metadata_helpers.go
@@ -15,16 +15,11 @@
* limitations under the License.
*/
-package zookeeper
+package mesh
-type Listener interface {
- Notify() chan *Notification
- Error() <-chan error
- Close() error
-}
-
-// Notification represents a single notification from the database.
-type Notification struct {
- // Payload, or the empty string if unspecified.
- Payload string
+func (t *MetaDataResource) IsRemotingMetadata(localZone string) bool {
+ if t.Spec.GetZone() == "" || t.Spec.GetZone() == localZone {
+ return false
+ }
+ return true
}
diff --git a/pkg/core/resources/apis/mesh/zz_generated.resources.go b/pkg/core/resources/apis/mesh/zz_generated.resources.go
index 88d5b74..d7b8765 100644
--- a/pkg/core/resources/apis/mesh/zz_generated.resources.go
+++ b/pkg/core/resources/apis/mesh/zz_generated.resources.go
@@ -5,7 +5,6 @@
package mesh
import (
- "errors"
"fmt"
)
@@ -218,7 +217,7 @@
ReadOnly: false,
AdminOnly: false,
Scope: model.ScopeMesh,
- DDSFlags: model.GlobalToAllZonesFlag,
+ DDSFlags: model.ZoneToGlobalFlag | model.GlobalToAllButOriginalZoneFlag,
WsPath: "dataplanes",
DubboctlArg: "dataplane",
DubboctlListArg: "dataplanes",
@@ -545,7 +544,7 @@
ReadOnly: false,
AdminOnly: false,
Scope: model.ScopeMesh,
- DDSFlags: model.GlobalToAllZonesFlag,
+ DDSFlags: model.ZoneToGlobalFlag | model.GlobalToAllButOriginalZoneFlag,
WsPath: "mappings",
DubboctlArg: "mapping",
DubboctlListArg: "mappings",
@@ -653,13 +652,13 @@
ResourceList: &MeshResourceList{},
ReadOnly: false,
AdminOnly: false,
- Scope: model.ScopeMesh,
+ Scope: model.ScopeGlobal,
DDSFlags: model.GlobalToAllZonesFlag,
WsPath: "meshes",
DubboctlArg: "mesh",
DubboctlListArg: "meshes",
AllowToInspect: true,
- IsPolicy: true,
+ IsPolicy: false,
SingularDisplayName: "Mesh",
PluralDisplayName: "Meshes",
IsExperimental: false,
@@ -871,7 +870,7 @@
ReadOnly: false,
AdminOnly: false,
Scope: model.ScopeMesh,
- DDSFlags: model.GlobalToAllZonesFlag,
+ DDSFlags: model.ZoneToGlobalFlag | model.GlobalToAllButOriginalZoneFlag,
WsPath: "metadatas",
DubboctlArg: "metadata",
DubboctlListArg: "metadatas",
@@ -1088,13 +1087,13 @@
ResourceList: &ZoneEgressResourceList{},
ReadOnly: false,
AdminOnly: false,
- Scope: model.ScopeMesh,
- DDSFlags: model.GlobalToAllZonesFlag,
+ Scope: model.ScopeGlobal,
+ DDSFlags: model.ZoneToGlobalFlag | model.GlobalToAllButOriginalZoneFlag,
WsPath: "zoneegresses",
DubboctlArg: "zoneegress",
DubboctlListArg: "zoneegresses",
AllowToInspect: true,
- IsPolicy: true,
+ IsPolicy: false,
SingularDisplayName: "Zone Egress",
PluralDisplayName: "Zone Egresses",
IsExperimental: false,
@@ -1214,125 +1213,6 @@
}
const (
- ZoneEgressOverviewType model.ResourceType = "ZoneEgressOverview"
-)
-
-var _ model.Resource = &ZoneEgressOverviewResource{}
-
-type ZoneEgressOverviewResource struct {
- Meta model.ResourceMeta
- Spec *mesh_proto.ZoneEgressOverview
-}
-
-func NewZoneEgressOverviewResource() *ZoneEgressOverviewResource {
- return &ZoneEgressOverviewResource{
- Spec: &mesh_proto.ZoneEgressOverview{},
- }
-}
-
-func (t *ZoneEgressOverviewResource) GetMeta() model.ResourceMeta {
- return t.Meta
-}
-
-func (t *ZoneEgressOverviewResource) SetMeta(m model.ResourceMeta) {
- t.Meta = m
-}
-
-func (t *ZoneEgressOverviewResource) GetSpec() model.ResourceSpec {
- return t.Spec
-}
-
-func (t *ZoneEgressOverviewResource) SetSpec(spec model.ResourceSpec) error {
- protoType, ok := spec.(*mesh_proto.ZoneEgressOverview)
- if !ok {
- return fmt.Errorf("invalid type %T for Spec", spec)
- } else {
- if protoType == nil {
- t.Spec = &mesh_proto.ZoneEgressOverview{}
- } else {
- t.Spec = protoType
- }
- return nil
- }
-}
-
-func (t *ZoneEgressOverviewResource) Descriptor() model.ResourceTypeDescriptor {
- return ZoneEgressOverviewResourceTypeDescriptor
-}
-
-func (t *ZoneEgressOverviewResource) SetOverviewSpec(resource model.Resource, insight model.Resource) error {
- t.SetMeta(resource.GetMeta())
- overview := &mesh_proto.ZoneEgressOverview{
- ZoneEgress: resource.GetSpec().(*mesh_proto.ZoneEgress),
- }
- if insight != nil {
- ins, ok := insight.GetSpec().(*mesh_proto.ZoneEgressInsight)
- if !ok {
- return errors.New("failed to convert to insight type 'ZoneEgressInsight'")
- }
- overview.ZoneEgressInsight = ins
- }
- return t.SetSpec(overview)
-}
-
-var _ model.ResourceList = &ZoneEgressOverviewResourceList{}
-
-type ZoneEgressOverviewResourceList struct {
- Items []*ZoneEgressOverviewResource
- Pagination model.Pagination
-}
-
-func (l *ZoneEgressOverviewResourceList) GetItems() []model.Resource {
- res := make([]model.Resource, len(l.Items))
- for i, elem := range l.Items {
- res[i] = elem
- }
- return res
-}
-
-func (l *ZoneEgressOverviewResourceList) GetItemType() model.ResourceType {
- return ZoneEgressOverviewType
-}
-
-func (l *ZoneEgressOverviewResourceList) NewItem() model.Resource {
- return NewZoneEgressOverviewResource()
-}
-
-func (l *ZoneEgressOverviewResourceList) AddItem(r model.Resource) error {
- if trr, ok := r.(*ZoneEgressOverviewResource); ok {
- l.Items = append(l.Items, trr)
- return nil
- } else {
- return model.ErrorInvalidItemType((*ZoneEgressOverviewResource)(nil), r)
- }
-}
-
-func (l *ZoneEgressOverviewResourceList) GetPagination() *model.Pagination {
- return &l.Pagination
-}
-
-func (l *ZoneEgressOverviewResourceList) SetPagination(p model.Pagination) {
- l.Pagination = p
-}
-
-var ZoneEgressOverviewResourceTypeDescriptor = model.ResourceTypeDescriptor{
- Name: ZoneEgressOverviewType,
- Resource: NewZoneEgressOverviewResource(),
- ResourceList: &ZoneEgressOverviewResourceList{},
- ReadOnly: false,
- AdminOnly: false,
- Scope: model.ScopeGlobal,
- WsPath: "",
- DubboctlArg: "",
- DubboctlListArg: "",
- AllowToInspect: false,
- IsPolicy: false,
- SingularDisplayName: "Zone Egress Overview",
- PluralDisplayName: "Zone Egress Overviews",
- IsExperimental: false,
-}
-
-const (
ZoneIngressType model.ResourceType = "ZoneIngress"
)
@@ -1425,13 +1305,13 @@
ResourceList: &ZoneIngressResourceList{},
ReadOnly: false,
AdminOnly: false,
- Scope: model.ScopeMesh,
- DDSFlags: model.GlobalToAllZonesFlag,
+ Scope: model.ScopeGlobal,
+ DDSFlags: model.ZoneToGlobalFlag | model.GlobalToAllButOriginalZoneFlag,
WsPath: "zoneingresses",
DubboctlArg: "zoneingress",
DubboctlListArg: "zoneingresses",
AllowToInspect: true,
- IsPolicy: true,
+ IsPolicy: false,
SingularDisplayName: "Zone Ingress",
PluralDisplayName: "Zone Ingresses",
IsExperimental: false,
@@ -1549,122 +1429,3 @@
func init() {
registry.RegisterType(ZoneIngressInsightResourceTypeDescriptor)
}
-
-const (
- ZoneIngressOverviewType model.ResourceType = "ZoneIngressOverview"
-)
-
-var _ model.Resource = &ZoneIngressOverviewResource{}
-
-type ZoneIngressOverviewResource struct {
- Meta model.ResourceMeta
- Spec *mesh_proto.ZoneIngressOverview
-}
-
-func NewZoneIngressOverviewResource() *ZoneIngressOverviewResource {
- return &ZoneIngressOverviewResource{
- Spec: &mesh_proto.ZoneIngressOverview{},
- }
-}
-
-func (t *ZoneIngressOverviewResource) GetMeta() model.ResourceMeta {
- return t.Meta
-}
-
-func (t *ZoneIngressOverviewResource) SetMeta(m model.ResourceMeta) {
- t.Meta = m
-}
-
-func (t *ZoneIngressOverviewResource) GetSpec() model.ResourceSpec {
- return t.Spec
-}
-
-func (t *ZoneIngressOverviewResource) SetSpec(spec model.ResourceSpec) error {
- protoType, ok := spec.(*mesh_proto.ZoneIngressOverview)
- if !ok {
- return fmt.Errorf("invalid type %T for Spec", spec)
- } else {
- if protoType == nil {
- t.Spec = &mesh_proto.ZoneIngressOverview{}
- } else {
- t.Spec = protoType
- }
- return nil
- }
-}
-
-func (t *ZoneIngressOverviewResource) Descriptor() model.ResourceTypeDescriptor {
- return ZoneIngressOverviewResourceTypeDescriptor
-}
-
-func (t *ZoneIngressOverviewResource) SetOverviewSpec(resource model.Resource, insight model.Resource) error {
- t.SetMeta(resource.GetMeta())
- overview := &mesh_proto.ZoneIngressOverview{
- ZoneIngress: resource.GetSpec().(*mesh_proto.ZoneIngress),
- }
- if insight != nil {
- ins, ok := insight.GetSpec().(*mesh_proto.ZoneIngressInsight)
- if !ok {
- return errors.New("failed to convert to insight type 'ZoneIngressInsight'")
- }
- overview.ZoneIngressInsight = ins
- }
- return t.SetSpec(overview)
-}
-
-var _ model.ResourceList = &ZoneIngressOverviewResourceList{}
-
-type ZoneIngressOverviewResourceList struct {
- Items []*ZoneIngressOverviewResource
- Pagination model.Pagination
-}
-
-func (l *ZoneIngressOverviewResourceList) GetItems() []model.Resource {
- res := make([]model.Resource, len(l.Items))
- for i, elem := range l.Items {
- res[i] = elem
- }
- return res
-}
-
-func (l *ZoneIngressOverviewResourceList) GetItemType() model.ResourceType {
- return ZoneIngressOverviewType
-}
-
-func (l *ZoneIngressOverviewResourceList) NewItem() model.Resource {
- return NewZoneIngressOverviewResource()
-}
-
-func (l *ZoneIngressOverviewResourceList) AddItem(r model.Resource) error {
- if trr, ok := r.(*ZoneIngressOverviewResource); ok {
- l.Items = append(l.Items, trr)
- return nil
- } else {
- return model.ErrorInvalidItemType((*ZoneIngressOverviewResource)(nil), r)
- }
-}
-
-func (l *ZoneIngressOverviewResourceList) GetPagination() *model.Pagination {
- return &l.Pagination
-}
-
-func (l *ZoneIngressOverviewResourceList) SetPagination(p model.Pagination) {
- l.Pagination = p
-}
-
-var ZoneIngressOverviewResourceTypeDescriptor = model.ResourceTypeDescriptor{
- Name: ZoneIngressOverviewType,
- Resource: NewZoneIngressOverviewResource(),
- ResourceList: &ZoneIngressOverviewResourceList{},
- ReadOnly: false,
- AdminOnly: false,
- Scope: model.ScopeGlobal,
- WsPath: "",
- DubboctlArg: "",
- DubboctlListArg: "",
- AllowToInspect: false,
- IsPolicy: false,
- SingularDisplayName: "Zone Ingress Overview",
- PluralDisplayName: "Zone Ingress Overviews",
- IsExperimental: false,
-}
diff --git a/pkg/core/runtime/builder.go b/pkg/core/runtime/builder.go
index 35e0521..55122a4 100644
--- a/pkg/core/runtime/builder.go
+++ b/pkg/core/runtime/builder.go
@@ -36,7 +36,6 @@
import (
dubbo_cp "github.com/apache/dubbo-kubernetes/pkg/config/app/dubbo-cp"
"github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/admin"
config_manager "github.com/apache/dubbo-kubernetes/pkg/core/config/manager"
"github.com/apache/dubbo-kubernetes/pkg/core/datasource"
"github.com/apache/dubbo-kubernetes/pkg/core/dns/lookup"
@@ -49,7 +48,6 @@
dds_context "github.com/apache/dubbo-kubernetes/pkg/dds/context"
dp_server "github.com/apache/dubbo-kubernetes/pkg/dp-server/server"
"github.com/apache/dubbo-kubernetes/pkg/events"
- "github.com/apache/dubbo-kubernetes/pkg/intercp/client"
"github.com/apache/dubbo-kubernetes/pkg/xds/cache/mesh"
)
@@ -74,7 +72,6 @@
EventBus() events.EventBus
DpServer() *dp_server.DpServer
DataplaneCache() *sync.Map
- InterCPClientPool() *client.Pool
DDSContext() *dds_context.Context
ResourceValidators() ResourceValidators
}
@@ -90,7 +87,6 @@
txs core_store.Transactions
rm core_manager.CustomizableResourceManager
rom core_manager.ReadOnlyResourceManager
- eac admin.EnvoyAdminClient
ext context.Context
meshCache *mesh.Cache
lif lookup.LookupIPFunc
@@ -98,7 +94,6 @@
leadInfo component.LeaderInfo
erf events.EventBus
dsl datasource.Loader
- interCpPool *client.Pool
dps *dp_server.DpServer
registryCenter dubboRegistry.Registry
metadataReportCenter report.MetadataReport
@@ -213,11 +208,6 @@
return b
}
-func (b *Builder) WithEnvoyAdminClient(eac admin.EnvoyAdminClient) *Builder {
- b.eac = eac
- return b
-}
-
func (b *Builder) WithDDSContext(ddsctx *dds_context.Context) *Builder {
b.ddsctx = ddsctx
return b
@@ -311,7 +301,6 @@
erf: b.erf,
dCache: b.dCache,
dps: b.dps,
- eac: b.eac,
serviceDiscovery: b.serviceDiscover,
rv: b.rv,
appCtx: b.appCtx,
@@ -377,10 +366,6 @@
return b.rom
}
-func (b *Builder) InterCPClientPool() *client.Pool {
- return b.interCpPool
-}
-
func (b *Builder) LookupIP() lookup.LookupIPFunc {
return b.lif
}
diff --git a/pkg/core/runtime/runtime.go b/pkg/core/runtime/runtime.go
index 902e331..e2e6496 100644
--- a/pkg/core/runtime/runtime.go
+++ b/pkg/core/runtime/runtime.go
@@ -32,7 +32,6 @@
import (
dubbo_cp "github.com/apache/dubbo-kubernetes/pkg/config/app/dubbo-cp"
"github.com/apache/dubbo-kubernetes/pkg/config/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/admin"
config_manager "github.com/apache/dubbo-kubernetes/pkg/core/config/manager"
"github.com/apache/dubbo-kubernetes/pkg/core/governance"
managers_dataplane "github.com/apache/dubbo-kubernetes/pkg/core/managers/apis/dataplane"
@@ -71,7 +70,6 @@
ReadOnlyResourceManager() core_manager.ReadOnlyResourceManager
ConfigStore() core_store.ResourceStore
Extensions() context.Context
- EnvoyAdminClient() admin.EnvoyAdminClient
ConfigManager() config_manager.ConfigManager
LeaderInfo() component.LeaderInfo
EventBus() events.EventBus
@@ -155,7 +153,6 @@
cs core_store.ResourceStore
rom core_manager.ReadOnlyResourceManager
ext context.Context
- eac admin.EnvoyAdminClient
configm config_manager.ConfigManager
xds xds_runtime.XDSRuntimeContext
leadInfo component.LeaderInfo
@@ -206,10 +203,6 @@
return b.metadataReportCenter
}
-func (rc *runtimeContext) EnvoyAdminClient() admin.EnvoyAdminClient {
- return rc.eac
-}
-
func (rc *runtimeContext) DDSContext() *dds_context.Context {
return rc.ddsctx
}
diff --git a/pkg/core/xds/sockets.go b/pkg/core/xds/sockets.go
index 32f11a9..089be44 100644
--- a/pkg/core/xds/sockets.go
+++ b/pkg/core/xds/sockets.go
@@ -7,12 +7,12 @@
// AccessLogSocketName generates a socket path that will fit the Unix socket path limitation of 104 chars
func AccessLogSocketName(tmpDir, name, mesh string) string {
- return socketName(filepath.Join(tmpDir, fmt.Sprintf("kuma-al-%s-%s", name, mesh)))
+ return socketName(filepath.Join(tmpDir, fmt.Sprintf("dubbo-al-%s-%s", name, mesh)))
}
// MetricsHijackerSocketName generates a socket path that will fit the Unix socket path limitation of 104 chars
func MetricsHijackerSocketName(tmpDir, name, mesh string) string {
- return socketName(filepath.Join(tmpDir, fmt.Sprintf("kuma-mh-%s-%s", name, mesh)))
+ return socketName(filepath.Join(tmpDir, fmt.Sprintf("dubbo-mh-%s-%s", name, mesh)))
}
func socketName(s string) string {
diff --git a/pkg/dds/context/context.go b/pkg/dds/context/context.go
index 1ae593d..9a9da71 100644
--- a/pkg/dds/context/context.go
+++ b/pkg/dds/context/context.go
@@ -46,7 +46,6 @@
"github.com/apache/dubbo-kubernetes/pkg/dds/hash"
"github.com/apache/dubbo-kubernetes/pkg/dds/mux"
"github.com/apache/dubbo-kubernetes/pkg/dds/reconcile"
- "github.com/apache/dubbo-kubernetes/pkg/dds/service"
"github.com/apache/dubbo-kubernetes/pkg/dds/util"
)
@@ -63,7 +62,6 @@
GlobalResourceMapper reconcile.ResourceMapper
ZoneResourceMapper reconcile.ResourceMapper
- EnvoyAdminRPCs service.EnvoyAdminRPCs
ServerStreamInterceptors []grpc.StreamServerInterceptor
ServerUnaryInterceptor []grpc.UnaryServerInterceptor
}
@@ -111,7 +109,6 @@
Configs: configs,
GlobalResourceMapper: CompositeResourceMapper(globalMappers...),
ZoneResourceMapper: CompositeResourceMapper(zoneMappers...),
- EnvoyAdminRPCs: service.NewEnvoyAdminRPCs(),
}
}
@@ -174,10 +171,10 @@
}
}
-// HashSuffixMapper returns mapper that adds a hash suffix to the name during KDS sync
-func HashSuffixMapper(checkKDSFeature bool, labelsToUse ...string) reconcile.ResourceMapper {
+// HashSuffixMapper returns mapper that adds a hash suffix to the name during DDS sync
+func HashSuffixMapper(checkDDSFeature bool, labelsToUse ...string) reconcile.ResourceMapper {
return func(features dds.Features, r core_model.Resource) (core_model.Resource, error) {
- if checkKDSFeature && !features.HasFeature(dds.FeatureHashSuffix) {
+ if checkDDSFeature && !features.HasFeature(dds.FeatureHashSuffix) {
return r, nil
}
diff --git a/pkg/dds/features.go b/pkg/dds/features.go
index 94326f9..4ac624e 100644
--- a/pkg/dds/features.go
+++ b/pkg/dds/features.go
@@ -45,8 +45,6 @@
// global control plane to indicate it's still running.
const FeatureZonePingHealth string = "zone-ping-health"
-// FeatureHashSuffix means that the zone control plane has a fix for the MeshGateway renaming
-// issue https://github.com/kumahq/kuma/pull/8450 and can handle the hash suffix in the resource name.
const FeatureHashSuffix string = "hash-suffix"
func ContextHasFeature(ctx context.Context, feature string) bool {
diff --git a/pkg/dds/global/components.go b/pkg/dds/global/components.go
index d568e4b..941d8e2 100644
--- a/pkg/dds/global/components.go
+++ b/pkg/dds/global/components.go
@@ -104,19 +104,19 @@
}
log := ddsDeltaGlobalLog.WithValues("peer-id", zoneID)
log = dubbo_log.AddFieldsFromCtx(log, stream.Context(), rt.Extensions())
- kdsStream := dds_client.NewDeltaDDSStream(stream, zoneID, rt, "")
+ ddsStream := dds_client.NewDeltaDDSStream(stream, zoneID, rt, "")
sink := dds_client.NewDDSSyncClient(
log,
reg.ObjectTypes(model.HasDDSFlag(model.ZoneToGlobalFlag)),
- kdsStream,
+ ddsStream,
dds_sync_store.GlobalSyncCallback(stream.Context(), resourceSyncer, rt.Config().Store.Type == store_config.KubernetesStore, kubeFactory, rt.Config().Store.Kubernetes.SystemNamespace),
rt.Config().Multizone.Global.DDS.ResponseBackoff.Duration,
)
go func() {
if err := sink.Receive(); err != nil {
- errChan <- errors.Wrap(err, "KDSSyncClient finished with an error")
+ errChan <- errors.Wrap(err, "DDSSyncClient finished with an error")
} else {
- log.V(1).Info("KDSSyncClient finished gracefully")
+ log.V(1).Info("DDSSyncClient finished gracefully")
}
}()
})
@@ -149,7 +149,6 @@
*rt.Config().Multizone.Global.DDS,
service.NewGlobalDDSServiceServer(
rt.AppContext(),
- rt.DDSContext().EnvoyAdminRPCs,
rt.ResourceManager(),
rt.GetInstanceId(),
streamInterceptors,
diff --git a/pkg/dds/mux/client.go b/pkg/dds/mux/client.go
index 4723ce5..c070e37 100644
--- a/pkg/dds/mux/client.go
+++ b/pkg/dds/mux/client.go
@@ -46,31 +46,40 @@
"github.com/apache/dubbo-kubernetes/pkg/core"
"github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
"github.com/apache/dubbo-kubernetes/pkg/dds"
- "github.com/apache/dubbo-kubernetes/pkg/dds/service"
"github.com/apache/dubbo-kubernetes/pkg/version"
)
+const (
+ DDSVersionHeaderKey = "dds-version"
+ DDSVersionV3 = "v3"
+)
+
var muxClientLog = core.Log.WithName("dds-mux-client")
type client struct {
- globalToZoneCb OnGlobalToZoneSyncStartedFunc
- zoneToGlobalCb OnZoneToGlobalSyncStartedFunc
- globalURL string
- clientID string
- config multizone.DdsClientConfig
- ctx context.Context
- envoyAdminProcessor service.EnvoyAdminProcessor
+ globalToZoneCb OnGlobalToZoneSyncStartedFunc
+ zoneToGlobalCb OnZoneToGlobalSyncStartedFunc
+ globalURL string
+ clientID string
+ config multizone.DdsClientConfig
+ ctx context.Context
}
-func NewClient(ctx context.Context, globalURL string, clientID string, globalToZoneCb OnGlobalToZoneSyncStartedFunc, zoneToGlobalCb OnZoneToGlobalSyncStartedFunc, config multizone.DdsClientConfig, envoyAdminProcessor service.EnvoyAdminProcessor) component.Component {
+func NewClient(
+ ctx context.Context,
+ globalURL string,
+ clientID string,
+ globalToZoneCb OnGlobalToZoneSyncStartedFunc,
+ zoneToGlobalCb OnZoneToGlobalSyncStartedFunc,
+ config multizone.DdsClientConfig,
+) component.Component {
return &client{
- ctx: ctx,
- globalToZoneCb: globalToZoneCb,
- zoneToGlobalCb: zoneToGlobalCb,
- globalURL: globalURL,
- clientID: clientID,
- config: config,
- envoyAdminProcessor: envoyAdminProcessor,
+ ctx: ctx,
+ globalToZoneCb: globalToZoneCb,
+ zoneToGlobalCb: zoneToGlobalCb,
+ globalURL: globalURL,
+ clientID: clientID,
+ config: config,
}
}
@@ -123,10 +132,6 @@
go c.startHealthCheck(withDDSCtx, log, conn, errorCh)
- go c.startXDSConfigs(withDDSCtx, log, conn, errorCh)
- go c.startStats(withDDSCtx, log, conn, errorCh)
- go c.startClusters(withDDSCtx, log, conn, errorCh)
-
go c.startGlobalToZoneSync(withDDSCtx, log, conn, errorCh)
go c.startZoneToGlobalSync(withDDSCtx, log, conn, errorCh)
@@ -141,10 +146,10 @@
}
func (c *client) startGlobalToZoneSync(ctx context.Context, log logr.Logger, conn *grpc.ClientConn, errorCh chan error) {
- kdsClient := mesh_proto.NewDDSSyncServiceClient(conn)
+ ddsClient := mesh_proto.NewDDSSyncServiceClient(conn)
log = log.WithValues("rpc", "global-to-zone")
log.Info("initializing Dubbo Discovery Service (DDS) stream for global to zone sync of resources with delta xDS")
- stream, err := kdsClient.GlobalToZoneSync(ctx)
+ stream, err := ddsClient.GlobalToZoneSync(ctx)
if err != nil {
errorCh <- err
return
@@ -155,10 +160,10 @@
}
func (c *client) startZoneToGlobalSync(ctx context.Context, log logr.Logger, conn *grpc.ClientConn, errorCh chan error) {
- kdsClient := mesh_proto.NewDDSSyncServiceClient(conn)
+ ddsClient := mesh_proto.NewDDSSyncServiceClient(conn)
log = log.WithValues("rpc", "zone-to-global")
log.Info("initializing Dubbo Discovery Service (DDS) stream for zone to global sync of resources with delta xDS")
- stream, err := kdsClient.ZoneToGlobalSync(ctx)
+ stream, err := ddsClient.ZoneToGlobalSync(ctx)
if err != nil {
errorCh <- err
return
@@ -168,66 +173,6 @@
c.handleProcessingErrors(stream, log, processingErrorsCh, errorCh)
}
-func (c *client) startXDSConfigs(
- ctx context.Context,
- log logr.Logger,
- conn *grpc.ClientConn,
- errorCh chan error,
-) {
- client := mesh_proto.NewGlobalDDSServiceClient(conn)
- log = log.WithValues("rpc", "XDS Configs")
- log.Info("initializing rpc stream for executing config dump on data plane proxies")
- stream, err := client.StreamXDSConfigs(ctx)
- if err != nil {
- errorCh <- err
- return
- }
-
- processingErrorsCh := make(chan error)
- go c.envoyAdminProcessor.StartProcessingXDSConfigs(stream, processingErrorsCh)
- c.handleProcessingErrors(stream, log, processingErrorsCh, errorCh)
-}
-
-func (c *client) startStats(
- ctx context.Context,
- log logr.Logger,
- conn *grpc.ClientConn,
- errorCh chan error,
-) {
- client := mesh_proto.NewGlobalDDSServiceClient(conn)
- log = log.WithValues("rpc", "stats")
- log.Info("initializing rpc stream for executing stats on data plane proxies")
- stream, err := client.StreamStats(ctx)
- if err != nil {
- errorCh <- err
- return
- }
-
- processingErrorsCh := make(chan error)
- go c.envoyAdminProcessor.StartProcessingStats(stream, processingErrorsCh)
- c.handleProcessingErrors(stream, log, processingErrorsCh, errorCh)
-}
-
-func (c *client) startClusters(
- ctx context.Context,
- log logr.Logger,
- conn *grpc.ClientConn,
- errorCh chan error,
-) {
- client := mesh_proto.NewGlobalDDSServiceClient(conn)
- log = log.WithValues("rpc", "clusters")
- log.Info("initializing rpc stream for executing clusters on data plane proxies")
- stream, err := client.StreamClusters(ctx)
- if err != nil {
- errorCh <- err
- return
- }
-
- processingErrorsCh := make(chan error)
- go c.envoyAdminProcessor.StartProcessingClusters(stream, processingErrorsCh)
- c.handleProcessingErrors(stream, log, processingErrorsCh, errorCh)
-}
-
func (c *client) startHealthCheck(
ctx context.Context,
log logr.Logger,
@@ -278,7 +223,7 @@
err := <-processingErrorsCh
if status.Code(err) == codes.Unimplemented {
log.Error(err, "rpc stream failed, because global CP does not implement this rpc. Upgrade remote CP.")
- // backwards compatibility. Do not rethrow error, so KDS multiplex can still operate.
+ // backwards compatibility. Do not rethrow error, so DDS multiplex can still operate.
return
}
if errors.Is(err, context.Canceled) {
diff --git a/pkg/dds/mux/clientstream.go b/pkg/dds/mux/clientstream.go
deleted file mode 100644
index 959b187..0000000
--- a/pkg/dds/mux/clientstream.go
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package mux
-
-import (
- "context"
-)
-
-import (
- envoy_sd "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
-
- "google.golang.org/grpc/metadata"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
-)
-
-type ddsClientStream struct {
- ctx context.Context
- bufferStream *bufferStream
-}
-
-func (k *ddsClientStream) Send(request *envoy_sd.DiscoveryRequest) error {
- err := k.bufferStream.Send(&mesh_proto.Message{Value: &mesh_proto.Message_Request{Request: request}})
- return err
-}
-
-func (k *ddsClientStream) Recv() (*envoy_sd.DiscoveryResponse, error) {
- res, err := k.bufferStream.Recv()
- if err != nil {
- return nil, err
- }
- return res.GetResponse(), nil
-}
-
-func (k *ddsClientStream) Header() (metadata.MD, error) {
- panic("not implemented")
-}
-
-func (k *ddsClientStream) Trailer() metadata.MD {
- panic("not implemented")
-}
-
-func (k *ddsClientStream) CloseSend() error {
- panic("not implemented")
-}
-
-func (k *ddsClientStream) Context() context.Context {
- return k.ctx
-}
-
-func (k *ddsClientStream) SendMsg(m interface{}) error {
- panic("not implemented")
-}
-
-func (k *ddsClientStream) RecvMsg(m interface{}) error {
- panic("not implemented")
-}
diff --git a/pkg/dds/mux/server.go b/pkg/dds/mux/server.go
index 65338b9..efb6137 100644
--- a/pkg/dds/mux/server.go
+++ b/pkg/dds/mux/server.go
@@ -69,7 +69,6 @@
ddsSyncServiceServer *DDSSyncServiceServer
streamInterceptors []grpc.StreamServerInterceptor
unaryInterceptors []grpc.UnaryServerInterceptor
- mesh_proto.UnimplementedMultiplexServiceServer
}
func NewServer(
@@ -130,10 +129,6 @@
)
grpcServer := grpc.NewServer(grpcOptions...)
- // register services
- if !s.config.DisableSOTW {
- mesh_proto.RegisterMultiplexServiceServer(grpcServer, s)
- }
mesh_proto.RegisterGlobalDDSServiceServer(grpcServer, s.serviceServer)
mesh_proto.RegisterDDSSyncServiceServer(grpcServer, s.ddsSyncServiceServer)
diff --git a/pkg/dds/mux/serverstream.go b/pkg/dds/mux/serverstream.go
deleted file mode 100644
index 70546dc..0000000
--- a/pkg/dds/mux/serverstream.go
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package mux
-
-import (
- "context"
-)
-
-import (
- envoy_sd "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
-
- "google.golang.org/grpc/metadata"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
-)
-
-type ddsServerStream struct {
- ctx context.Context
- bufferStream *bufferStream
-}
-
-func (k *ddsServerStream) Send(response *envoy_sd.DiscoveryResponse) error {
- err := k.bufferStream.Send(&mesh_proto.Message{Value: &mesh_proto.Message_Response{Response: response}})
- return err
-}
-
-func (k *ddsServerStream) Recv() (*envoy_sd.DiscoveryRequest, error) {
- res, err := k.bufferStream.Recv()
- if err != nil {
- return nil, err
- }
- return res.GetRequest(), nil
-}
-
-func (k *ddsServerStream) SetHeader(metadata.MD) error {
- panic("not implemented")
-}
-
-func (k *ddsServerStream) SendHeader(metadata.MD) error {
- panic("not implemented")
-}
-
-func (k *ddsServerStream) SetTrailer(metadata.MD) {
- panic("not implemented")
-}
-
-func (k *ddsServerStream) Context() context.Context {
- return k.ctx
-}
-
-func (k *ddsServerStream) SendMsg(m interface{}) error {
- panic("not implemented")
-}
-
-func (k *ddsServerStream) RecvMsg(m interface{}) error {
- panic("not implemented")
-}
diff --git a/pkg/dds/mux/session.go b/pkg/dds/mux/session.go
deleted file mode 100644
index 9ac32a5..0000000
--- a/pkg/dds/mux/session.go
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package mux
-
-import (
- "context"
- "errors"
- "io"
- "sync"
- "time"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
-)
-
-type Session interface {
- ServerStream() mesh_proto.DubboDiscoveryService_StreamDubboResourcesServer
- ClientStream() mesh_proto.DubboDiscoveryService_StreamDubboResourcesClient
- PeerID() string
- Error() <-chan error
- SetError(err error)
-}
-
-type session struct {
- peerID string
- serverStream *ddsServerStream
- clientStream *ddsClientStream
-
- err chan error
- sync.Once // protects err, so we only send the first error and close the channel
-}
-
-// handleRecv polls to receive messages from the DDSStream (the actual grpc bidi-stream).
-// Depending on the message it dispatches to either the server receive buffer or the client receive buffer.
-// It also closes both streams when an error on the recv side happens.
-// We can rely on an error on recv to end the session because we're sure an error on recv will always happen, it might be io.EOF if we're just done.
-func (s *session) handleRecv(stream MultiplexStream) {
- msg, err := stream.Recv()
- if err != nil {
- s.clientStream.bufferStream.close()
- s.serverStream.bufferStream.close()
- // Recv always finishes with either an EOF or another error
- s.SetError(err)
- return
- }
- switch v := msg.Value.(type) {
- case *mesh_proto.Message_LegacyRequest:
- msg = &mesh_proto.Message{Value: &mesh_proto.Message_Request{Request: DiscoveryRequestV3(v.LegacyRequest)}}
- case *mesh_proto.Message_LegacyResponse:
- msg = &mesh_proto.Message{Value: &mesh_proto.Message_Response{Response: DiscoveryResponseV3(v.LegacyResponse)}}
- }
- // We can safely not care about locking as we're only closing the channel from this goroutine.
- switch msg.Value.(type) {
- case *mesh_proto.Message_Request:
- s.serverStream.bufferStream.recvBuffer <- msg
- case *mesh_proto.Message_Response:
- s.clientStream.bufferStream.recvBuffer <- msg
- }
-}
-
-// handleSend polls either sendBuffer and call send on the DDSStream (the actual grpc bidi-stream).
-// This call is stopped whenever either of the sendBuffer are closed (in practice they are always closed together anyway).
-func (s *session) handleSend(stream MultiplexStream, sendTimeout time.Duration) {
- for {
- var msgToSend *mesh_proto.Message
- select {
- case msg, more := <-s.serverStream.bufferStream.sendBuffer:
- if !more {
- return
- }
- msgToSend = msg
- case msg, more := <-s.clientStream.bufferStream.sendBuffer:
- if !more {
- return
- }
- msgToSend = msg
- }
- ctx, cancel := context.WithTimeout(context.Background(), sendTimeout)
- go func() {
- <-ctx.Done()
- if ctx.Err() == context.DeadlineExceeded {
- // This is very unlikely to happen, but it was introduced as a last resort protection from a gRPC streaming deadlock.
- // gRPC streaming deadlock may happen if both peers are stuck on Send() operation without calling Recv() often enough.
- // In this case, if data is big enough, both parties may wait for WINDOW_UPDATE on HTTP/2 stream.
- // We fixed the deadlock by increasing buffer size which is larger that all possible inflight request.
- // If the connection is broken and send is stuck, it's more likely for gRPC keep alive to catch such case.
- // If you still hit the timeout without deadlock, you may increase it. However, there are two possible scenarios
- // 1) This is a malicious client reading stream byte by byte. In this case it's actually better to end the stream
- // 2) A client is such overwhelmed that it cannot even let the server know that it's ready to receive more data.
- // In this case it's recommended to scale number of instances.
- s.SetError(errors.New("timeout while sending a message to peer"))
- }
- }()
- if err := stream.Send(msgToSend); err != nil {
- s.SetError(err)
- cancel()
- return
- }
- cancel()
- }
-}
-
-type MultiplexStream interface {
- Send(message *mesh_proto.Message) error
- Recv() (*mesh_proto.Message, error)
- Context() context.Context
-}
-
-type bufferStream struct {
- sendBuffer chan *mesh_proto.Message
- recvBuffer chan *mesh_proto.Message
-
- // Protects the send-buffer against writing on a closed channel, this is needed as we don't control in which goroutine `Send` will be called.
- lock sync.Mutex
- closed bool
-}
-
-func (s *session) SetError(err error) {
- // execute this once so writers to this channel won't be stuck or trying to write to a close channel
- // We only care about the first error, because it results in broken session anyway.
- s.Once.Do(func() {
- s.err <- err
- close(s.err)
- })
-}
-
-func (s *session) ServerStream() mesh_proto.DubboDiscoveryService_StreamDubboResourcesServer {
- return s.serverStream
-}
-
-func (s *session) ClientStream() mesh_proto.DubboDiscoveryService_StreamDubboResourcesClient {
- return s.clientStream
-}
-
-func (s *session) PeerID() string {
- return s.peerID
-}
-
-func (s *session) Error() <-chan error {
- return s.err
-}
-
-func newBufferStream(bufferSize uint32) *bufferStream {
- return &bufferStream{
- sendBuffer: make(chan *mesh_proto.Message, bufferSize),
- recvBuffer: make(chan *mesh_proto.Message, bufferSize),
- }
-}
-
-func (k *bufferStream) Send(message *mesh_proto.Message) error {
- k.lock.Lock()
- defer k.lock.Unlock()
- if k.closed {
- return io.EOF
- }
- k.sendBuffer <- message
- return nil
-}
-
-func (k *bufferStream) Recv() (*mesh_proto.Message, error) {
- r, more := <-k.recvBuffer
- if !more {
- return nil, io.EOF
- }
- return r, nil
-}
-
-func (k *bufferStream) close() {
- k.lock.Lock()
- defer k.lock.Unlock()
-
- k.closed = true
- close(k.sendBuffer)
- close(k.recvBuffer)
-}
diff --git a/pkg/dds/mux/version.go b/pkg/dds/mux/version.go
deleted file mode 100644
index a331dd8..0000000
--- a/pkg/dds/mux/version.go
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package mux
-
-import (
- envoy_api_v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2"
- envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
- envoy_sd_v3 "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
-)
-
-const (
- DDSVersionHeaderKey = "dds-version"
- DDSVersionV3 = "v3"
-)
-
-func DiscoveryRequestV3(request *envoy_api_v2.DiscoveryRequest) *envoy_sd_v3.DiscoveryRequest {
- return &envoy_sd_v3.DiscoveryRequest{
- VersionInfo: request.VersionInfo,
- Node: &envoy_core_v3.Node{
- Id: request.Node.Id,
- Metadata: request.Node.Metadata,
- },
- ResourceNames: request.ResourceNames,
- TypeUrl: request.TypeUrl,
- ResponseNonce: request.ResponseNonce,
- ErrorDetail: request.ErrorDetail,
- }
-}
-
-func DiscoveryResponseV3(response *envoy_api_v2.DiscoveryResponse) *envoy_sd_v3.DiscoveryResponse {
- return &envoy_sd_v3.DiscoveryResponse{
- VersionInfo: response.VersionInfo,
- Resources: response.Resources,
- TypeUrl: response.TypeUrl,
- Nonce: response.Nonce,
- ControlPlane: &envoy_core_v3.ControlPlane{
- Identifier: response.ControlPlane.Identifier,
- },
- }
-}
diff --git a/pkg/dds/mux/zone_sync.go b/pkg/dds/mux/zone_sync.go
index c65a873..b6ef396 100644
--- a/pkg/dds/mux/zone_sync.go
+++ b/pkg/dds/mux/zone_sync.go
@@ -125,7 +125,7 @@
logger := clientLog.WithValues("clientID", zone)
for _, filter := range g.filters {
if err := filter.InterceptServerStream(stream); err != nil {
- return errors.Wrap(err, "closing KDS stream following a callback error")
+ return errors.Wrap(err, "closing DDS stream following a callback error")
}
}
diff --git a/pkg/dds/reconcile/reconciler.go b/pkg/dds/reconcile/reconciler.go
index c1fb527..9121efc 100644
--- a/pkg/dds/reconcile/reconciler.go
+++ b/pkg/dds/reconcile/reconciler.go
@@ -133,6 +133,7 @@
continue
}
+ // 如果旧版本不为空, 并且新版本和旧版本的资源是一样的, 那么以旧版本为主
if old != nil && r.equal(new.GetResources(typ), old.GetResources(typ)) {
version = old.GetVersion(typ)
}
diff --git a/pkg/dds/service/envoy_admin_processor.go b/pkg/dds/service/envoy_admin_processor.go
deleted file mode 100644
index 2d2675a..0000000
--- a/pkg/dds/service/envoy_admin_processor.go
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service
-
-import (
- "context"
- "time"
-)
-
-import (
- "github.com/pkg/errors"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
- core_manager "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
- core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/registry"
- core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
-)
-
-type EnvoyAdminProcessor interface {
- StartProcessingXDSConfigs(stream mesh_proto.GlobalDDSService_StreamXDSConfigsClient, errorCh chan error)
- StartProcessingStats(stream mesh_proto.GlobalDDSService_StreamStatsClient, errorCh chan error)
- StartProcessingClusters(stream mesh_proto.GlobalDDSService_StreamClustersClient, errorCh chan error)
-}
-
-type EnvoyAdminFn = func(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error)
-
-type envoyAdminProcessor struct {
- resManager core_manager.ReadOnlyResourceManager
-
- configDumpFn EnvoyAdminFn
- statsFn EnvoyAdminFn
- clustersFn EnvoyAdminFn
-}
-
-func (e *envoyAdminProcessor) StartProcessingXDSConfigs(stream mesh_proto.GlobalDDSService_StreamXDSConfigsClient, errorCh chan error) {
- for {
- req, err := stream.Recv()
- if err != nil {
- errorCh <- err
- return
- }
- go func() { // schedule in the background to be able to quickly process more requests
- config, err := e.executeAdminFn(stream.Context(), req.ResourceType, req.ResourceName, req.ResourceMesh, e.configDumpFn)
-
- resp := &mesh_proto.XDSConfigResponse{
- RequestId: req.RequestId,
- }
- if len(config) > 0 {
- resp.Result = &mesh_proto.XDSConfigResponse_Config{
- Config: config,
- }
- }
- if err != nil { // send the error to the client instead of terminating stream.
- resp.Result = &mesh_proto.XDSConfigResponse_Error{
- Error: err.Error(),
- }
- }
- if err := stream.Send(resp); err != nil {
- errorCh <- err
- return
- }
- }()
- }
-}
-
-func (e *envoyAdminProcessor) StartProcessingStats(stream mesh_proto.GlobalDDSService_StreamStatsClient, errorCh chan error) {
- for {
- req, err := stream.Recv()
- if err != nil {
- errorCh <- err
- return
- }
- go func() { // schedule in the background to be able to quickly process more requests
- stats, err := e.executeAdminFn(stream.Context(), req.ResourceType, req.ResourceName, req.ResourceMesh, e.statsFn)
-
- resp := &mesh_proto.StatsResponse{
- RequestId: req.RequestId,
- }
- if len(stats) > 0 {
- resp.Result = &mesh_proto.StatsResponse_Stats{
- Stats: stats,
- }
- }
- if err != nil { // send the error to the client instead of terminating stream.
- resp.Result = &mesh_proto.StatsResponse_Error{
- Error: err.Error(),
- }
- }
- if err := stream.Send(resp); err != nil {
- errorCh <- err
- return
- }
- }()
- }
-}
-
-func (e *envoyAdminProcessor) StartProcessingClusters(stream mesh_proto.GlobalDDSService_StreamClustersClient, errorCh chan error) {
- for {
- req, err := stream.Recv()
- if err != nil {
- errorCh <- err
- return
- }
- go func() { // schedule in the background to be able to quickly process more requests
- clusters, err := e.executeAdminFn(stream.Context(), req.ResourceType, req.ResourceName, req.ResourceMesh, e.clustersFn)
-
- resp := &mesh_proto.ClustersResponse{
- RequestId: req.RequestId,
- }
- if len(clusters) > 0 {
- resp.Result = &mesh_proto.ClustersResponse_Clusters{
- Clusters: clusters,
- }
- }
- if err != nil { // send the error to the client instead of terminating stream.
- resp.Result = &mesh_proto.ClustersResponse_Error{
- Error: err.Error(),
- }
- }
- if err := stream.Send(resp); err != nil {
- errorCh <- err
- return
- }
- }()
- }
-}
-
-func (s *envoyAdminProcessor) executeAdminFn(
- ctx context.Context,
- resType string,
- resName string,
- resMesh string,
- adminFn EnvoyAdminFn,
-) ([]byte, error) {
- ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
- defer cancel()
-
- res, err := registry.Global().NewObject(core_model.ResourceType(resType))
- if err != nil {
- return nil, err
- }
- if err := s.resManager.Get(ctx, res, core_store.GetByKey(resName, resMesh)); err != nil {
- return nil, err
- }
-
- resWithAddr, ok := res.(core_model.ResourceWithAddress)
- if !ok {
- return nil, errors.Errorf("invalid type %T", resWithAddr)
- }
-
- return adminFn(ctx, resWithAddr)
-}
-
-var _ EnvoyAdminProcessor = &envoyAdminProcessor{}
-
-func NewEnvoyAdminProcessor(
- resManager core_manager.ReadOnlyResourceManager,
- configDumpFn EnvoyAdminFn,
- statsFn EnvoyAdminFn,
- clustersFn EnvoyAdminFn,
-) EnvoyAdminProcessor {
- return &envoyAdminProcessor{
- resManager: resManager,
- configDumpFn: configDumpFn,
- statsFn: statsFn,
- clustersFn: clustersFn,
- }
-}
diff --git a/pkg/dds/service/envoy_admin_rpcs.go b/pkg/dds/service/envoy_admin_rpcs.go
deleted file mode 100644
index a2a74ff..0000000
--- a/pkg/dds/service/envoy_admin_rpcs.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service
-
-import (
- util_grpc "github.com/apache/dubbo-kubernetes/pkg/util/grpc"
-)
-
-const (
- ConfigDumpRPC = "XDS Config Dump"
- StatsRPC = "Stats"
- ClustersRPC = "Clusters"
-)
-
-type EnvoyAdminRPCs struct {
- XDSConfigDump util_grpc.ReverseUnaryRPCs
- Stats util_grpc.ReverseUnaryRPCs
- Clusters util_grpc.ReverseUnaryRPCs
-}
-
-func NewEnvoyAdminRPCs() EnvoyAdminRPCs {
- return EnvoyAdminRPCs{
- XDSConfigDump: util_grpc.NewReverseUnaryRPCs(),
- Stats: util_grpc.NewReverseUnaryRPCs(),
- Clusters: util_grpc.NewReverseUnaryRPCs(),
- }
-}
diff --git a/pkg/dds/service/server.go b/pkg/dds/service/server.go
index 92f6f7f..f960f51 100644
--- a/pkg/dds/service/server.go
+++ b/pkg/dds/service/server.go
@@ -20,21 +20,14 @@
import (
"context"
"fmt"
- "io"
- "math/rand"
"time"
)
import (
"github.com/pkg/errors"
- "github.com/sethvargo/go-retry"
-
- "golang.org/x/exp/slices"
-
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
- "google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/durationpb"
@@ -49,11 +42,8 @@
"github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/system"
"github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
"github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
- "github.com/apache/dubbo-kubernetes/pkg/dds"
"github.com/apache/dubbo-kubernetes/pkg/dds/util"
"github.com/apache/dubbo-kubernetes/pkg/events"
- util_grpc "github.com/apache/dubbo-kubernetes/pkg/util/grpc"
)
var log = core.Log.WithName("dds-service")
@@ -63,7 +53,6 @@
}
type GlobalDDSServiceServer struct {
- envoyAdminRPCs EnvoyAdminRPCs
resManager manager.ResourceManager
instanceID string
filters []StreamInterceptor
@@ -75,10 +64,17 @@
context context.Context
}
-func NewGlobalDDSServiceServer(ctx context.Context, envoyAdminRPCs EnvoyAdminRPCs, resManager manager.ResourceManager, instanceID string, filters []StreamInterceptor, extensions context.Context, upsertCfg config_store.UpsertConfig, eventBus events.EventBus, zoneHealthCheckInterval time.Duration) *GlobalDDSServiceServer {
+func NewGlobalDDSServiceServer(
+ ctx context.Context,
+ resManager manager.ResourceManager,
+ instanceID string, filters []StreamInterceptor,
+ extensions context.Context,
+ upsertCfg config_store.UpsertConfig,
+ eventBus events.EventBus,
+ zoneHealthCheckInterval time.Duration,
+) *GlobalDDSServiceServer {
return &GlobalDDSServiceServer{
context: ctx,
- envoyAdminRPCs: envoyAdminRPCs,
resManager: resManager,
instanceID: instanceID,
filters: filters,
@@ -89,24 +85,6 @@
}
}
-func (g *GlobalDDSServiceServer) StreamXDSConfigs(stream mesh_proto.GlobalDDSService_StreamXDSConfigsServer) error {
- return g.streamEnvoyAdminRPC(ConfigDumpRPC, g.envoyAdminRPCs.XDSConfigDump, stream, func() (util_grpc.ReverseUnaryMessage, error) {
- return stream.Recv()
- })
-}
-
-func (g *GlobalDDSServiceServer) StreamStats(stream mesh_proto.GlobalDDSService_StreamStatsServer) error {
- return g.streamEnvoyAdminRPC(StatsRPC, g.envoyAdminRPCs.Stats, stream, func() (util_grpc.ReverseUnaryMessage, error) {
- return stream.Recv()
- })
-}
-
-func (g *GlobalDDSServiceServer) StreamClusters(stream mesh_proto.GlobalDDSService_StreamClustersServer) error {
- return g.streamEnvoyAdminRPC(ClustersRPC, g.envoyAdminRPCs.Clusters, stream, func() (util_grpc.ReverseUnaryMessage, error) {
- return stream.Recv()
- })
-}
-
func (g *GlobalDDSServiceServer) HealthCheck(ctx context.Context, _ *mesh_proto.ZoneHealthCheckRequest) (*mesh_proto.ZoneHealthCheckResponse, error) {
zone, err := util.ClientIDFromIncomingCtx(ctx)
if err != nil {
@@ -135,93 +113,6 @@
}, nil
}
-func (g *GlobalDDSServiceServer) streamEnvoyAdminRPC(
- rpcName string,
- rpc util_grpc.ReverseUnaryRPCs,
- stream grpc.ServerStream,
- recv func() (util_grpc.ReverseUnaryMessage, error),
-) error {
- zone, err := util.ClientIDFromIncomingCtx(stream.Context())
- if err != nil {
- return status.Error(codes.InvalidArgument, err.Error())
- }
- zoneID := ZoneClientIDFromCtx(stream.Context(), zone)
-
- shouldDisconnectStream := events.NewNeverListener()
-
- md, _ := metadata.FromIncomingContext(stream.Context())
- features := md.Get(dds.FeaturesMetadataKey)
-
- if slices.Contains(features, dds.FeatureZonePingHealth) {
- shouldDisconnectStream = g.eventBus.Subscribe(func(e events.Event) bool {
- disconnectEvent, ok := e.(ZoneWentOffline)
- return ok && disconnectEvent.Zone == zone
- })
- g.eventBus.Send(ZoneOpenedStream{Zone: zone})
- }
-
- defer shouldDisconnectStream.Close()
-
- for _, filter := range g.filters {
- if err := filter.InterceptServerStream(stream); err != nil {
- switch status.Code(err) {
- case codes.InvalidArgument, codes.Unauthenticated, codes.PermissionDenied:
- log.Info("stream interceptor terminating the stream", "cause", err)
- default:
- log.Error(err, "stream interceptor terminating the stream")
- }
- return err
- }
- }
- log.Info("Envoy Admin RPC stream started")
- rpc.ClientConnected(zoneID.String(), stream)
- if err := g.storeStreamConnection(stream.Context(), zone, rpcName, g.instanceID); err != nil {
- if errors.Is(err, context.Canceled) {
- return status.Error(codes.Canceled, "stream was cancelled")
- }
- log.Error(err, "could not store stream connection")
- return status.Error(codes.Internal, "could not store stream connection")
- }
- log.Info("stored stream connection")
- streamResult := make(chan error, 1)
- go func() {
- for {
- resp, err := recv()
- if err == io.EOF {
- log.Info("stream stopped")
- streamResult <- nil
- return
- }
- if status.Code(err) == codes.Canceled {
- log.Info("stream cancelled")
- streamResult <- nil
- return
- }
- if err != nil {
- log.Error(err, "could not receive a message")
- streamResult <- status.Error(codes.Internal, "could not receive a message")
- return
- }
- log.V(1).Info("Envoy Admin RPC response received", "requestId", resp.GetRequestId())
- if err := rpc.ResponseReceived(zoneID.String(), resp); err != nil {
- log.Error(err, "could not mark the response as received")
- streamResult <- status.Error(codes.InvalidArgument, "could not mark the response as received")
- return
- }
- }
- }()
- select {
- case <-g.context.Done():
- log.Info("app context done")
- return status.Error(codes.Unavailable, "stream unavailable")
- case <-shouldDisconnectStream.Recv():
- log.Info("ending stream, zone health check failed")
- return status.Error(codes.Canceled, "stream canceled")
- case res := <-streamResult:
- return res
- }
-}
-
type ZoneWentOffline struct {
Zone string
}
@@ -230,45 +121,6 @@
Zone string
}
-func (g *GlobalDDSServiceServer) storeStreamConnection(ctx context.Context, zone string, rpcName string, instance string) error {
- key := model.ResourceKey{Name: zone}
-
- // wait for Zone to be created, only then we can create Zone Insight
- err := retry.Do(
- ctx,
- retry.WithMaxRetries(30, retry.NewConstant(1*time.Second)),
- func(ctx context.Context) error {
- return retry.RetryableError(g.resManager.Get(ctx, system.NewZoneResource(), core_store.GetBy(key)))
- },
- )
- if err != nil {
- return err
- }
-
- // Add delay for Upsert. If Global CP is behind an HTTP load balancer,
- // it might be the case that each Envoy Admin stream will land on separate instance.
- // In this case, all instances will try to update Zone Insight which will result in conflicts.
- // Since it's unusual to immediately execute envoy admin rpcs after zone is connected, 0-10s delay should be fine.
- // #nosec G404 - math rand is enough
- time.Sleep(time.Duration(rand.Int31n(10000)) * time.Millisecond)
-
- zoneInsight := system.NewZoneInsightResource()
- return manager.Upsert(ctx, g.resManager, key, zoneInsight, func(resource model.Resource) error {
- if zoneInsight.Spec.EnvoyAdminStreams == nil {
- zoneInsight.Spec.EnvoyAdminStreams = &system_proto.EnvoyAdminStreams{}
- }
- switch rpcName {
- case ConfigDumpRPC:
- zoneInsight.Spec.EnvoyAdminStreams.ConfigDumpGlobalInstanceId = instance
- case StatsRPC:
- zoneInsight.Spec.EnvoyAdminStreams.StatsGlobalInstanceId = instance
- case ClustersRPC:
- zoneInsight.Spec.EnvoyAdminStreams.ClustersGlobalInstanceId = instance
- }
- return nil
- }, manager.WithConflictRetry(g.upsertCfg.ConflictRetryBaseBackoff.Duration, g.upsertCfg.ConflictRetryMaxTimes, g.upsertCfg.ConflictRetryJitterPercent)) // we need retry because zone sink or other RPC may also update the insight.
-}
-
type ZoneClientID struct {
Zone string
}
diff --git a/pkg/dds/store/sync.go b/pkg/dds/store/sync.go
index 8abe6e2..ae1a2ea 100644
--- a/pkg/dds/store/sync.go
+++ b/pkg/dds/store/sync.go
@@ -305,11 +305,6 @@
return syncer.Sync(ctx, upstream, PrefilterBy(func(r core_model.Resource) bool {
if zi, ok := r.(*core_mesh.ZoneIngressResource); ok {
- // Old zones don't have a 'kuma.io/zone' label on ZoneIngress, when upgrading to the new 2.6 version
- // we don't want Zone CP to sync ZoneIngresses without 'kuma.io/zone' label to Global pretending
- // they're originating here. That's why upgrade from 2.5 to 2.6 (and 2.7) requires casting resource
- // to *core_mesh.ZoneIngressResource and checking its 'spec.zone' field.
- // todo: remove in 2 releases after 2.6.x
return zi.IsRemoteIngress(localZone)
}
@@ -318,6 +313,10 @@
return m.IsRemoteMapping(localZone)
}
+ if m, ok := r.(*core_mesh.MetaDataResource); ok {
+ return m.IsRemotingMetadata(localZone)
+ }
+
return !core_model.IsLocallyOriginated(config_core.Zone, r) || !isExpectedOnZoneCP(r.Descriptor())
}))
},
@@ -374,6 +373,10 @@
for _, m := range upstream.AddedResources.(*core_mesh.MappingResourceList).Items {
m.Spec.Zone = upstream.ControlPlaneId
}
+ case core_mesh.MetaDataType:
+ for _, m := range upstream.AddedResources.(*core_mesh.MetaDataResourceList).Items {
+ m.Spec.Zone = upstream.ControlPlaneId
+ }
}
return syncer.Sync(ctx, upstream, PrefilterBy(func(r model.Resource) bool {
diff --git a/pkg/dds/util/resource_test.go b/pkg/dds/util/resource_test.go
index 1b0004f..30e31e4 100644
--- a/pkg/dds/util/resource_test.go
+++ b/pkg/dds/util/resource_test.go
@@ -61,7 +61,7 @@
},
Entry(nil, testCase{name: "foo", suffix: "bar"}),
Entry(nil, testCase{name: "bar", suffix: "baz"}),
- Entry(nil, testCase{name: "baz", suffix: "kuma-system"}),
- Entry(nil, testCase{name: "faz", suffix: "daz.kuma-system"}),
+ Entry(nil, testCase{name: "baz", suffix: "dubbo-system"}),
+ Entry(nil, testCase{name: "faz", suffix: "daz.dubbo-system"}),
)
})
diff --git a/pkg/dds/zone/components.go b/pkg/dds/zone/components.go
index c52b8f0..0f4ff61 100644
--- a/pkg/dds/zone/components.go
+++ b/pkg/dds/zone/components.go
@@ -33,7 +33,6 @@
dds_client "github.com/apache/dubbo-kubernetes/pkg/dds/client"
"github.com/apache/dubbo-kubernetes/pkg/dds/mux"
dds_server "github.com/apache/dubbo-kubernetes/pkg/dds/server"
- "github.com/apache/dubbo-kubernetes/pkg/dds/service"
dds_sync_store "github.com/apache/dubbo-kubernetes/pkg/dds/store"
resources_k8s "github.com/apache/dubbo-kubernetes/pkg/plugins/resources/k8s"
)
@@ -76,7 +75,7 @@
}
onGlobalToZoneSyncStarted := mux.OnGlobalToZoneSyncStartedFunc(func(stream mesh_proto.DDSSyncService_GlobalToZoneSyncClient, errChan chan error) {
- log := ddsDeltaZoneLog.WithValues("kds-version", "v2")
+ log := ddsDeltaZoneLog.WithValues("dds-version", "v2")
syncClient := dds_client.NewDDSSyncClient(
log,
reg.ObjectTypes(model.HasDDSFlag(model.GlobalToZoneSelector)),
@@ -102,7 +101,7 @@
})
onZoneToGlobalSyncStarted := mux.OnZoneToGlobalSyncStartedFunc(func(stream mesh_proto.DDSSyncService_ZoneToGlobalSyncClient, errChan chan error) {
- log := ddsDeltaZoneLog.WithValues("kds-version", "v2", "peer-id", "global")
+ log := ddsDeltaZoneLog.WithValues("dds-version", "v2", "peer-id", "global")
log.Info("ZoneToGlobalSync new session created")
session := dds_server.NewServerStream(stream)
go func() {
@@ -121,12 +120,6 @@
onGlobalToZoneSyncStarted,
onZoneToGlobalSyncStarted,
*rt.Config().Multizone.Zone.DDS,
- service.NewEnvoyAdminProcessor(
- rt.ReadOnlyResourceManager(),
- rt.EnvoyAdminClient().ConfigDump,
- rt.EnvoyAdminClient().Stats,
- rt.EnvoyAdminClient().Clusters,
- ),
)
- return rt.Add(component.NewResilientComponent(ddsDeltaZoneLog.WithName("kds-mux-client"), muxClient))
+ return rt.Add(component.NewResilientComponent(ddsDeltaZoneLog.WithName("dds-mux-client"), muxClient))
}
diff --git a/pkg/dp-server/server/server.go b/pkg/dp-server/server/server.go
index 6d39626..ad269c0 100644
--- a/pkg/dp-server/server/server.go
+++ b/pkg/dp-server/server/server.go
@@ -18,21 +18,15 @@
package server
import (
- "context"
- "crypto/tls"
"fmt"
+ "github.com/apache/dubbo-kubernetes/pkg/core/logger"
+ "google.golang.org/grpc/reflection"
+ "net"
"net/http"
- "strings"
"time"
)
import (
- "github.com/bakito/go-log-logr-adapter/adapter"
-
- http_prometheus "github.com/slok/go-http-metrics/metrics/prometheus"
- "github.com/slok/go-http-metrics/middleware"
- "github.com/slok/go-http-metrics/middleware/std"
-
"google.golang.org/grpc"
"google.golang.org/grpc/keepalive"
)
@@ -53,11 +47,9 @@
type Filter func(writer http.ResponseWriter, request *http.Request) bool
type DpServer struct {
- config dp_server.DpServerConfig
- httpMux *http.ServeMux
- grpcServer *grpc.Server
- filter Filter
- promMiddleware middleware.Middleware
+ config dp_server.DpServerConfig
+ PlainServer *grpc.Server
+ httpMux *http.ServeMux
}
var _ component.Component = &DpServer{}
@@ -74,52 +66,40 @@
PermitWithoutStream: true,
}),
}
- grpcServer := grpc.NewServer(grpcOptions...)
- promMiddleware := middleware.New(middleware.Config{
- Recorder: http_prometheus.NewRecorder(http_prometheus.Config{
- Prefix: "dp_server",
- }),
- })
-
- return &DpServer{
- config: config,
- httpMux: http.NewServeMux(),
- grpcServer: grpcServer,
- filter: filter,
- promMiddleware: promMiddleware,
+ srv := &DpServer{
+ config: config,
+ httpMux: http.NewServeMux(),
}
+ srv.PlainServer = grpc.NewServer(grpcOptions...)
+ reflection.Register(srv.PlainServer)
+
+ return srv
}
func (d *DpServer) Start(stop <-chan struct{}) error {
- tlsConfig := &tls.Config{MinVersion: tls.VersionTLS12} // To make gosec pass this is always set after
- server := &http.Server{
- Addr: fmt.Sprintf(":%d", d.config.Port),
- Handler: http.HandlerFunc(d.handle),
- TLSConfig: tlsConfig,
- ErrorLog: adapter.ToStd(log),
+ plainLis, err := net.Listen("tcp", fmt.Sprintf(":%d", d.config.Port))
+ if err != nil {
+ return err
}
-
- errChan := make(chan error)
+ plainErrChan := make(chan error)
go func() {
- defer close(errChan)
- if err := server.ListenAndServe(); err != nil {
- if err != http.ErrServerClosed {
- log.Error(err, "terminated with an error")
- errChan <- err
- return
- }
+ defer close(plainErrChan)
+ if err = d.PlainServer.Serve(plainLis); err != nil {
+ logger.Sugar().Error(err, "[cp-server] terminated with an error")
+ plainErrChan <- err
+ } else {
+ logger.Sugar().Info("[cp-server] terminated normally")
}
- log.Info("terminated normally")
}()
- log.Info("starting", "interface", "0.0.0.0", "port", d.config.Port, "tls", true)
-
select {
case <-stop:
log.Info("stopping")
- return server.Shutdown(context.Background())
- case err := <-errChan:
+ logger.Sugar().Info("[cp-server] stopping gracefully")
+ d.PlainServer.GracefulStop()
+ return nil
+ case err := <-plainErrChan:
return err
}
}
@@ -128,28 +108,10 @@
return false
}
-func (d *DpServer) handle(writer http.ResponseWriter, request *http.Request) {
- if !d.filter(writer, request) {
- return
- }
- // add filter function that will be in runtime, and we will implement it in kong-mesh
- if request.ProtoMajor == 2 && strings.Contains(request.Header.Get("Content-Type"), "application/grpc") {
- d.grpcServer.ServeHTTP(writer, request)
- } else {
- // we only want to measure HTTP not GRPC requests because they can mess up metrics
- // for example ADS bi-directional stream counts as one really long request
- std.Handler("", d.promMiddleware, d.httpMux).ServeHTTP(writer, request)
- }
-}
-
func (d *DpServer) HTTPMux() *http.ServeMux {
return d.httpMux
}
func (d *DpServer) GrpcServer() *grpc.Server {
- return d.grpcServer
-}
-
-func (d *DpServer) SetFilter(filter Filter) {
- d.filter = filter
+ return d.PlainServer
}
diff --git a/pkg/dubbo/components.go b/pkg/dubbo/components.go
index 0fc70f9..7d39d16 100644
--- a/pkg/dubbo/components.go
+++ b/pkg/dubbo/components.go
@@ -67,6 +67,7 @@
dubboPusher,
rt.ResourceManager(),
rt.Transactions(),
+ rt.Config().Multizone.Zone.Name,
)
mesh_proto.RegisterMetadataServiceServer(rt.DpServer().GrpcServer(), metadata)
return rt.Add(dubboPusher, serviceMapping, metadata)
diff --git a/pkg/dubbo/metadata/server.go b/pkg/dubbo/metadata/server.go
index c0ef20e..60a8b4f 100644
--- a/pkg/dubbo/metadata/server.go
+++ b/pkg/dubbo/metadata/server.go
@@ -19,7 +19,6 @@
import (
"context"
- "github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
"io"
"strings"
"time"
@@ -45,6 +44,7 @@
core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
"github.com/apache/dubbo-kubernetes/pkg/dubbo/client"
"github.com/apache/dubbo-kubernetes/pkg/dubbo/pusher"
+ "github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
)
var log = core.Log.WithName("dubbo").WithName("server").WithName("metadata")
@@ -54,9 +54,10 @@
type MetadataServer struct {
mesh_proto.MetadataServiceServer
- config dubbo.DubboConfig
- queue chan *RegisterRequest
- pusher pusher.Pusher
+ localZone string
+ config dubbo.DubboConfig
+ queue chan *RegisterRequest
+ pusher pusher.Pusher
ctx context.Context
resourceManager manager.ResourceManager
@@ -80,6 +81,7 @@
pusher pusher.Pusher,
resourceManager manager.ResourceManager,
transactions core_store.Transactions,
+ localZone string,
) *MetadataServer {
return &MetadataServer{
config: config,
@@ -88,6 +90,7 @@
ctx: ctx,
resourceManager: resourceManager,
transactions: transactions,
+ localZone: localZone,
}
}
@@ -333,7 +336,6 @@
func (m *MetadataServer) tryRegister(key core_model.ResourceReq, newMetadata *mesh_proto.MetaData) error {
err := core_store.InTx(m.ctx, m.transactions, func(ctx context.Context) error {
-
// get Metadata Resource first,
// if Metadata is not found, create it,
// else update it.
@@ -350,6 +352,7 @@
if core_store.IsResourceNotFound(err) {
// create if not found
metadata.Spec = newMetadata
+ metadata.Spec.Zone = m.localZone
err = m.resourceManager.Create(m.ctx, metadata, core_store.CreateBy(core_model.ResourceKey{
Mesh: key.Mesh,
Name: key.Name,
diff --git a/pkg/dubbo/servicemapping/server.go b/pkg/dubbo/servicemapping/server.go
index a22f862..22aa31f 100644
--- a/pkg/dubbo/servicemapping/server.go
+++ b/pkg/dubbo/servicemapping/server.go
@@ -19,7 +19,6 @@
import (
"context"
- "github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
"io"
"time"
)
@@ -45,6 +44,7 @@
"github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
"github.com/apache/dubbo-kubernetes/pkg/dubbo/client"
"github.com/apache/dubbo-kubernetes/pkg/dubbo/pusher"
+ "github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
)
var log = core.Log.WithName("dubbo").WithName("server").WithName("service-name-mapping")
diff --git a/pkg/hds/server/server.go b/pkg/hds/server/server.go
index c4a507c..b997d93 100644
--- a/pkg/hds/server/server.go
+++ b/pkg/hds/server/server.go
@@ -36,7 +36,6 @@
)
import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
hds_cache "github.com/apache/dubbo-kubernetes/pkg/hds/cache"
hds_callbacks "github.com/apache/dubbo-kubernetes/pkg/hds/callbacks"
util_proto "github.com/apache/dubbo-kubernetes/pkg/util/proto"
@@ -54,7 +53,6 @@
ctx context.Context
callbacks hds_callbacks.Callbacks
cache envoy_cache.Cache
- mesh_proto.UnimplementedMultiplexServiceServer
}
func New(ctx context.Context, config envoy_cache.Cache, callbacks hds_callbacks.Callbacks) envoy_service_health.HealthDiscoveryServiceServer {
diff --git a/pkg/intercp/catalog/catalog.go b/pkg/intercp/catalog/catalog.go
deleted file mode 100644
index 6d91fc7..0000000
--- a/pkg/intercp/catalog/catalog.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package catalog
-
-import (
- "context"
- "fmt"
- "net"
- "strconv"
-)
-
-import (
- "github.com/pkg/errors"
-)
-
-type Instance struct {
- Id string `json:"id"`
- Address string `json:"address"`
- InterCpPort uint16 `json:"interCpPort"`
- Leader bool `json:"leader"`
-}
-
-func (i Instance) InterCpURL() string {
- return fmt.Sprintf("grpcs://%s", net.JoinHostPort(i.Address, strconv.Itoa(int(i.InterCpPort))))
-}
-
-type Reader interface {
- Instances(context.Context) ([]Instance, error)
-}
-
-type Catalog interface {
- Reader
- Replace(context.Context, []Instance) (bool, error)
- ReplaceLeader(context.Context, Instance) error
-}
-
-var (
- ErrNoLeader = errors.New("leader not found")
- ErrInstanceNotFound = errors.New("instance not found")
-)
-
-func Leader(ctx context.Context, catalog Catalog) (Instance, error) {
- instances, err := catalog.Instances(ctx)
- if err != nil {
- return Instance{}, err
- }
- for _, instance := range instances {
- if instance.Leader {
- return instance, nil
- }
- }
- return Instance{}, ErrNoLeader
-}
-
-func InstanceOfID(ctx context.Context, catalog Catalog, id string) (Instance, error) {
- instances, err := catalog.Instances(ctx)
- if err != nil {
- return Instance{}, err
- }
- for _, instance := range instances {
- if instance.Id == id {
- return instance, nil
- }
- }
- return Instance{}, ErrInstanceNotFound
-}
-
-type InstancesByID []Instance
-
-func (a InstancesByID) Len() int { return len(a) }
-func (a InstancesByID) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-func (a InstancesByID) Less(i, j int) bool {
- return a[i].Id < a[j].Id
-}
diff --git a/pkg/intercp/catalog/config_catalog.go b/pkg/intercp/catalog/config_catalog.go
deleted file mode 100644
index dd5f218..0000000
--- a/pkg/intercp/catalog/config_catalog.go
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package catalog
-
-import (
- "context"
- "encoding/json"
- "sort"
-)
-
-import (
- system_proto "github.com/apache/dubbo-kubernetes/api/system/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/system"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
-)
-
-type ConfigInstances struct {
- Instances []Instance `json:"instances"`
-}
-
-var CatalogKey = model.ResourceKey{
- Name: "cp-catalog",
-}
-
-type ConfigCatalog struct {
- resManager manager.ResourceManager
- ConfigCatalogReader
-}
-
-var _ Catalog = &ConfigCatalog{}
-
-func NewConfigCatalog(resManager manager.ResourceManager) Catalog {
- return &ConfigCatalog{
- resManager: resManager,
- ConfigCatalogReader: ConfigCatalogReader{
- resManager: resManager,
- },
- }
-}
-
-func (c *ConfigCatalog) Replace(ctx context.Context, instances []Instance) (bool, error) {
- sort.Stable(InstancesByID(instances))
- bytes, err := json.Marshal(ConfigInstances{
- Instances: instances,
- })
- if err != nil {
- return false, nil
- }
- newConfig := string(bytes)
- var updated bool
- err = manager.Upsert(ctx, c.resManager, CatalogKey, system.NewConfigResource(), func(resource model.Resource) error {
- if resource.(*system.ConfigResource).Spec.GetConfig() != newConfig {
- resource.(*system.ConfigResource).Spec = &system_proto.Config{
- Config: newConfig,
- }
- updated = true
- }
- return nil
- })
- return updated, err
-}
-
-func (c *ConfigCatalog) ReplaceLeader(ctx context.Context, leader Instance) error {
- return manager.Upsert(ctx, c.resManager, CatalogKey, system.NewConfigResource(), func(resource model.Resource) error {
- instances := &ConfigInstances{}
- if cfg := resource.(*system.ConfigResource).Spec.GetConfig(); cfg != "" {
- if err := json.Unmarshal([]byte(cfg), instances); err != nil {
- return err
- }
- }
- leaderFound := false
- for i, instance := range instances.Instances {
- instance.Leader = false
- if instance.Id == leader.Id {
- instance.Leader = true
- leaderFound = true
- }
- instances.Instances[i] = instance
- }
- if !leaderFound {
- instances.Instances = append(instances.Instances, leader)
- sort.Stable(InstancesByID(instances.Instances))
- }
- bytes, err := json.Marshal(instances)
- if err != nil {
- return err
- }
- resource.(*system.ConfigResource).Spec = &system_proto.Config{
- Config: string(bytes),
- }
- return nil
- })
-}
-
-type ConfigCatalogReader struct {
- resManager manager.ReadOnlyResourceManager
-}
-
-var _ Reader = &ConfigCatalogReader{}
-
-func NewConfigCatalogReader(resManager manager.ReadOnlyResourceManager) Reader {
- return &ConfigCatalogReader{
- resManager: resManager,
- }
-}
-
-func (c *ConfigCatalogReader) Instances(ctx context.Context) ([]Instance, error) {
- cfg := system.NewConfigResource()
- if err := c.resManager.Get(ctx, cfg, store.GetBy(CatalogKey)); err != nil {
- if store.IsResourceNotFound(err) {
- return []Instance{}, nil
- }
- return nil, err
- }
- var instances ConfigInstances
- if err := json.Unmarshal([]byte(cfg.Spec.Config), &instances); err != nil {
- return nil, err
- }
- return instances.Instances, nil
-}
diff --git a/pkg/intercp/catalog/heartbeat_component.go b/pkg/intercp/catalog/heartbeat_component.go
deleted file mode 100644
index b36c2f4..0000000
--- a/pkg/intercp/catalog/heartbeat_component.go
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package catalog
-
-import (
- "context"
- "time"
-)
-
-import (
- "github.com/pkg/errors"
-)
-
-import (
- system_proto "github.com/apache/dubbo-kubernetes/api/system/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
-)
-
-var heartbeatLog = core.Log.WithName("intercp").WithName("catalog").WithName("heartbeat")
-
-type heartbeatComponent struct {
- catalog Catalog
- getClientFn GetClientFn
- request *system_proto.PingRequest
- interval time.Duration
-
- leader *Instance
-}
-
-var _ component.Component = &heartbeatComponent{}
-
-type GetClientFn = func(url string) (system_proto.InterCpPingServiceClient, error)
-
-func NewHeartbeatComponent(
- catalog Catalog,
- instance Instance,
- interval time.Duration,
- newClientFn GetClientFn,
-) (component.Component, error) {
- return &heartbeatComponent{
- catalog: catalog,
- request: &system_proto.PingRequest{
- InstanceId: instance.Id,
- Address: instance.Address,
- InterCpPort: uint32(instance.InterCpPort),
- },
- getClientFn: newClientFn,
- interval: interval,
- }, nil
-}
-
-func (h *heartbeatComponent) Start(stop <-chan struct{}) error {
- heartbeatLog.Info("starting heartbeats to a leader")
- ticker := time.NewTicker(h.interval)
- ctx := context.Background()
-
- for {
- select {
- case <-ticker.C:
- if !h.heartbeat(ctx, true) {
- continue
- }
- case <-stop:
- // send final heartbeat to gracefully signal that the instance is going down
- _ = h.heartbeat(ctx, false)
- return nil
- }
- }
-}
-
-func (h *heartbeatComponent) heartbeat(ctx context.Context, ready bool) bool {
- heartbeatLog := heartbeatLog.WithValues(
- "instanceId", h.request.InstanceId,
- "ready", ready,
- )
- if h.leader == nil {
- if err := h.connectToLeader(ctx); err != nil {
- heartbeatLog.Error(err, "could not connect to leader")
- return false
- }
- }
- if h.leader.Id == h.request.InstanceId {
- heartbeatLog.V(1).Info("this instance is a leader. No need to send a heartbeat.")
- return true
- }
- heartbeatLog = heartbeatLog.WithValues(
- "leaderAddress", h.leader.Address,
- )
- heartbeatLog.V(1).Info("sending a heartbeat to a leader")
- h.request.Ready = ready
- client, err := h.getClientFn(h.leader.InterCpURL())
- if err != nil {
- heartbeatLog.Error(err, "could not get or create a client to a leader")
- h.leader = nil
- return false
- }
- resp, err := client.Ping(ctx, h.request)
- if err != nil {
- heartbeatLog.Error(err, "could not send a heartbeat to a leader")
- h.leader = nil
- return false
- }
- if !resp.Leader {
- heartbeatLog.V(1).Info("instance responded that it is no longer a leader")
- h.leader = nil
- }
- return true
-}
-
-func (h *heartbeatComponent) connectToLeader(ctx context.Context) error {
- newLeader, err := Leader(ctx, h.catalog)
- if err != nil {
- return err
- }
- h.leader = &newLeader
- if h.leader.Id == h.request.InstanceId {
- return nil
- }
- heartbeatLog.Info("leader has changed. Creating connection to the new leader.",
- "previousLeaderAddress", h.leader.Address,
- "newLeaderAddress", newLeader.Leader,
- )
- _, err = h.getClientFn(h.leader.InterCpURL())
- if err != nil {
- return errors.Wrap(err, "could not create a client to a leader")
- }
- return nil
-}
-
-func (h *heartbeatComponent) NeedLeaderElection() bool {
- return false
-}
diff --git a/pkg/intercp/catalog/heartbeats.go b/pkg/intercp/catalog/heartbeats.go
deleted file mode 100644
index df65376..0000000
--- a/pkg/intercp/catalog/heartbeats.go
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package catalog
-
-import (
- "sync"
-)
-
-type Heartbeats struct {
- instances map[Instance]struct{}
- sync.Mutex
-}
-
-func NewHeartbeats() *Heartbeats {
- return &Heartbeats{
- instances: map[Instance]struct{}{},
- }
-}
-
-func (h *Heartbeats) ResetAndCollect() []Instance {
- h.Lock()
- currentInstances := h.instances
- h.instances = map[Instance]struct{}{}
- h.Unlock()
- var instances []Instance
- for k := range currentInstances {
- instances = append(instances, k)
- }
- return instances
-}
-
-func (h *Heartbeats) Add(instance Instance) {
- h.Lock()
- h.instances[instance] = struct{}{}
- h.Unlock()
-}
-
-func (h *Heartbeats) Remove(instance Instance) {
- h.Lock()
- delete(h.instances, instance)
- h.Unlock()
-}
diff --git a/pkg/intercp/catalog/server.go b/pkg/intercp/catalog/server.go
deleted file mode 100644
index db76ddc..0000000
--- a/pkg/intercp/catalog/server.go
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package catalog
-
-import (
- "context"
-)
-
-import (
- system_proto "github.com/apache/dubbo-kubernetes/api/system/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
-)
-
-var serverLog = core.Log.WithName("intercp").WithName("catalog").WithName("server")
-
-type server struct {
- heartbeats *Heartbeats
- leaderInfo component.LeaderInfo
-
- system_proto.UnimplementedInterCpPingServiceServer
-}
-
-var _ system_proto.InterCpPingServiceServer = &server{}
-
-func NewServer(heartbeats *Heartbeats, leaderInfo component.LeaderInfo) system_proto.InterCpPingServiceServer {
- return &server{
- heartbeats: heartbeats,
- leaderInfo: leaderInfo,
- }
-}
-
-func (s *server) Ping(_ context.Context, request *system_proto.PingRequest) (*system_proto.PingResponse, error) {
- serverLog.V(1).Info("received ping", "instanceID", request.InstanceId, "address", request.Address, "ready", request.Ready)
- instance := Instance{
- Id: request.InstanceId,
- Address: request.Address,
- InterCpPort: uint16(request.InterCpPort),
- Leader: false,
- }
- if request.Ready {
- s.heartbeats.Add(instance)
- } else {
- s.heartbeats.Remove(instance)
- }
- return &system_proto.PingResponse{
- Leader: s.leaderInfo.IsLeader(),
- }, nil
-}
diff --git a/pkg/intercp/catalog/writer.go b/pkg/intercp/catalog/writer.go
deleted file mode 100644
index 4861b83..0000000
--- a/pkg/intercp/catalog/writer.go
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package catalog
-
-import (
- "context"
- "time"
-)
-
-import (
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
-)
-
-var writerLog = core.Log.WithName("intercp").WithName("catalog").WithName("writer")
-
-type catalogWriter struct {
- catalog Catalog
- heartbeats *Heartbeats
- instance Instance
- interval time.Duration
-}
-
-var _ component.Component = &catalogWriter{}
-
-func NewWriter(
- catalog Catalog,
- heartbeats *Heartbeats,
- instance Instance,
- interval time.Duration,
-) (component.Component, error) {
- leaderInstance := instance
- leaderInstance.Leader = true
- return &catalogWriter{
- catalog: catalog,
- heartbeats: heartbeats,
- instance: leaderInstance,
- interval: interval,
- }, nil
-}
-
-func (r *catalogWriter) Start(stop <-chan struct{}) error {
- heartbeatLog.Info("starting catalog writer")
- ctx := context.Background()
- writerLog.Info("replacing a leader in the catalog")
- if err := r.catalog.ReplaceLeader(ctx, r.instance); err != nil {
- writerLog.Error(err, "could not replace leader") // continue, it will be replaced in ticker anyways
- }
- ticker := time.NewTicker(r.interval)
- for {
- select {
- case <-ticker.C:
- instances := r.heartbeats.ResetAndCollect()
- instances = append(instances, r.instance)
- updated, err := r.catalog.Replace(ctx, instances)
- if err != nil {
- writerLog.Error(err, "could not update catalog")
- continue
- }
- if updated {
- writerLog.Info("instances catalog updated", "instances", instances)
- } else {
- writerLog.V(1).Info("no need to update instances, because the catalog is the same", "instances", instances)
- }
- case <-stop:
- return nil
- }
- }
-}
-
-func (r *catalogWriter) NeedLeaderElection() bool {
- return true
-}
diff --git a/pkg/intercp/client/client.go b/pkg/intercp/client/client.go
deleted file mode 100644
index 7f3cbf5..0000000
--- a/pkg/intercp/client/client.go
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package client
-
-import (
- "crypto/tls"
- "crypto/x509"
- "io"
- "net/url"
-)
-
-import (
- "github.com/pkg/errors"
-
- "google.golang.org/grpc"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/credentials/insecure"
-)
-
-type TLSConfig struct {
- CaCert x509.Certificate
- ClientCert tls.Certificate
-}
-
-type Conn interface {
- grpc.ClientConnInterface
- io.Closer
- GetState() connectivity.State
-}
-
-func New(serverURL string, tlsCfg *TLSConfig) (Conn, error) {
- url, err := url.Parse(serverURL)
- if err != nil {
- return nil, err
- }
- var dialOpts []grpc.DialOption
- switch url.Scheme {
- case "grpc": // not used in production
- dialOpts = append(dialOpts, grpc.WithTransportCredentials(insecure.NewCredentials()))
- case "grpcs":
- tlsConfig := &tls.Config{MinVersion: tls.VersionTLS12}
- if tlsCfg != nil {
- cp := x509.NewCertPool()
- cp.AddCert(&tlsCfg.CaCert)
- tlsConfig.RootCAs = cp
- tlsConfig.Certificates = []tls.Certificate{tlsCfg.ClientCert}
- } else {
- tlsConfig.InsecureSkipVerify = true
- }
- dialOpts = append(dialOpts, grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)))
- default:
- return nil, errors.Errorf("unsupported scheme %q. Use one of %s", url.Scheme, []string{"grpc", "grpcs"})
- }
- return grpc.Dial(url.Host, dialOpts...)
-}
diff --git a/pkg/intercp/client/pool.go b/pkg/intercp/client/pool.go
deleted file mode 100644
index ed4486f..0000000
--- a/pkg/intercp/client/pool.go
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package client
-
-import (
- "context"
- "sync"
- "time"
-)
-
-import (
- "github.com/pkg/errors"
-
- "google.golang.org/grpc/connectivity"
-)
-
-import (
- "github.com/apache/dubbo-kubernetes/pkg/core"
-)
-
-var poolLog = core.Log.WithName("intercp").WithName("client").WithName("pool")
-
-type accessedConn struct {
- conn Conn
- url string
- lastAccessTime time.Time
-}
-
-// Pool keeps the list of clients to inter-cp servers.
-// Because the list of inter-cp servers changes in runtime, we need to properly manage the connections to them (initialize, share, close etc.)
-// Pool helps us to not reimplement this for every inter-cp service (catalog, envoyadmin, etc.)
-type Pool struct {
- newConn func(string, *TLSConfig) (Conn, error)
- idleDeadline time.Duration // the time after which we close the connection if it was not fetched from the pool
- now func() time.Time
- connections map[string]*accessedConn
- mut sync.Mutex
-
- tlsCfg *TLSConfig
-}
-
-var TLSNotConfigured = errors.New("tls config is not yet set")
-
-func NewPool(
- newConn func(string, *TLSConfig) (Conn, error),
- idleDeadline time.Duration,
- now func() time.Time,
-) *Pool {
- return &Pool{
- newConn: newConn,
- idleDeadline: idleDeadline,
- now: now,
- connections: map[string]*accessedConn{},
- mut: sync.Mutex{},
- }
-}
-
-func (c *Pool) Client(serverURL string) (Conn, error) {
- c.mut.Lock()
- defer c.mut.Unlock()
- if c.tlsCfg == nil {
- return nil, TLSNotConfigured
- }
- ac, ok := c.connections[serverURL]
- createNewConnection := !ok
- if ok && ac.conn.GetState() == connectivity.TransientFailure {
- createNewConnection = true
- poolLog.Info("closing broken connection", "url", serverURL)
- if err := ac.conn.Close(); err != nil {
- poolLog.Error(err, "cannot close the connection", "url", serverURL)
- }
- }
- if createNewConnection {
- poolLog.Info("creating new connection", "url", serverURL)
- conn, err := c.newConn(serverURL, c.tlsCfg)
- if err != nil {
- return nil, err
- }
- ac = &accessedConn{
- conn: conn,
- url: serverURL,
- }
- }
- ac.lastAccessTime = c.now()
- c.connections[serverURL] = ac
- return ac.conn, nil
-}
-
-// SetTLSConfig can configure TLS in runtime.
-// Because CA of the inter-cp server is managed by the CP in the runtime we cannot configure it when we create the pool.
-func (c *Pool) SetTLSConfig(tlsCfg *TLSConfig) {
- c.mut.Lock()
- c.tlsCfg = tlsCfg
- c.mut.Unlock()
-}
-
-func (c *Pool) StartCleanup(ctx context.Context, ticker *time.Ticker) {
- for {
- select {
- case now := <-ticker.C:
- c.cleanup(now)
- case <-ctx.Done():
- return
- }
- }
-}
-
-func (c *Pool) cleanup(now time.Time) {
- c.mut.Lock()
- defer c.mut.Unlock()
- for url, accessedConn := range c.connections {
- if now.Sub(accessedConn.lastAccessTime) > c.idleDeadline {
- poolLog.Info("closing connection due to lack of activity", "url", accessedConn.url)
- if err := accessedConn.conn.Close(); err != nil {
- poolLog.Error(err, "cannot close the connection", "url", accessedConn.url)
- }
- delete(c.connections, url)
- }
- }
-}
diff --git a/pkg/intercp/components.go b/pkg/intercp/components.go
deleted file mode 100644
index 4d55ec9..0000000
--- a/pkg/intercp/components.go
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package intercp
-
-import (
- "time"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/runtime"
- "github.com/apache/dubbo-kubernetes/pkg/intercp/client"
- "github.com/apache/dubbo-kubernetes/pkg/intercp/envoyadmin"
-)
-
-var log = core.Log.WithName("inter-cp")
-
-func Setup(rt runtime.Runtime) error {
- return nil
-}
-
-func DefaultClientPool() *client.Pool {
- return client.NewPool(client.New, 5*time.Minute, core.Now)
-}
-
-func PooledEnvoyAdminClientFn(pool *client.Pool) envoyadmin.NewClientFn {
- return func(url string) (mesh_proto.InterCPEnvoyAdminForwardServiceClient, error) {
- conn, err := pool.Client(url)
- if err != nil {
- return nil, err
- }
- return mesh_proto.NewInterCPEnvoyAdminForwardServiceClient(conn), nil
- }
-}
diff --git a/pkg/intercp/envoyadmin/forwarding_dds_client.go b/pkg/intercp/envoyadmin/forwarding_dds_client.go
deleted file mode 100644
index 604cddb..0000000
--- a/pkg/intercp/envoyadmin/forwarding_dds_client.go
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package envoyadmin
-
-import (
- "context"
- "fmt"
- "reflect"
-)
-
-import (
- "github.com/pkg/errors"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/admin"
- core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
- core_system "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/system"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
- core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
- "github.com/apache/dubbo-kubernetes/pkg/dds/service"
- "github.com/apache/dubbo-kubernetes/pkg/intercp/catalog"
-)
-
-var clientLog = core.Log.WithName("intercp").WithName("envoyadmin").WithName("client")
-
-type NewClientFn = func(url string) (mesh_proto.InterCPEnvoyAdminForwardServiceClient, error)
-
-type forwardingKdsEnvoyAdminClient struct {
- resManager manager.ReadOnlyResourceManager
- cat catalog.Catalog
- instanceID string
- newClientFn NewClientFn
- fallbackClient admin.EnvoyAdminClient
-}
-
-// NewForwardingEnvoyAdminClient returns EnvoyAdminClient which is only used on Global CP in multizone environment.
-// It forwards the request to an instance of the Global CP to which Zone CP of given DPP is connected.
-//
-// For example:
-// We have 2 instances of Global CP (ins-1, ins-2). Dataplane "backend" is in zone "east".
-// The leader CP of zone "east" is connected to ins-1.
-// If we execute config dump for "backend" on ins-1, we follow the regular flow of pkg/envoy/admin/kds_client.go
-// If we execute config dump for "backend" on ins-2, we forward the request to ins-1 and then execute the regular flow.
-func NewForwardingEnvoyAdminClient(
- resManager manager.ReadOnlyResourceManager,
- cat catalog.Catalog,
- instanceID string,
- newClientFn NewClientFn,
- fallbackClient admin.EnvoyAdminClient,
-) admin.EnvoyAdminClient {
- return &forwardingKdsEnvoyAdminClient{
- resManager: resManager,
- cat: cat,
- instanceID: instanceID,
- newClientFn: newClientFn,
- fallbackClient: fallbackClient,
- }
-}
-
-var _ admin.EnvoyAdminClient = &forwardingKdsEnvoyAdminClient{}
-
-func (f *forwardingKdsEnvoyAdminClient) PostQuit(context.Context, *core_mesh.DataplaneResource) error {
- panic("not implemented")
-}
-
-func (f *forwardingKdsEnvoyAdminClient) ConfigDump(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- instanceID, err := f.globalInstanceID(ctx, core_model.ZoneOfResource(proxy), service.ConfigDumpRPC)
- if err != nil {
- return nil, err
- }
- f.logIntendedAction(proxy, instanceID)
- if instanceID == f.instanceID {
- return f.fallbackClient.ConfigDump(ctx, proxy)
- }
- client, err := f.clientForInstanceID(ctx, instanceID)
- if err != nil {
- return nil, err
- }
- req := &mesh_proto.XDSConfigRequest{
- ResourceType: string(proxy.Descriptor().Name),
- ResourceName: proxy.GetMeta().GetName(),
- ResourceMesh: proxy.GetMeta().GetMesh(),
- }
- resp, err := client.XDSConfig(ctx, req)
- if err != nil {
- return nil, err
- }
- return resp.GetConfig(), nil
-}
-
-func (f *forwardingKdsEnvoyAdminClient) Stats(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- instanceID, err := f.globalInstanceID(ctx, core_model.ZoneOfResource(proxy), service.StatsRPC)
- if err != nil {
- return nil, err
- }
- f.logIntendedAction(proxy, instanceID)
- if instanceID == f.instanceID {
- return f.fallbackClient.Stats(ctx, proxy)
- }
- client, err := f.clientForInstanceID(ctx, instanceID)
- if err != nil {
- return nil, err
- }
- req := &mesh_proto.StatsRequest{
- ResourceType: string(proxy.Descriptor().Name),
- ResourceName: proxy.GetMeta().GetName(),
- ResourceMesh: proxy.GetMeta().GetMesh(),
- }
- resp, err := client.Stats(ctx, req)
- if err != nil {
- return nil, err
- }
- return resp.GetStats(), nil
-}
-
-func (f *forwardingKdsEnvoyAdminClient) Clusters(ctx context.Context, proxy core_model.ResourceWithAddress) ([]byte, error) {
- instanceID, err := f.globalInstanceID(ctx, core_model.ZoneOfResource(proxy), service.ClustersRPC)
- if err != nil {
- return nil, err
- }
- f.logIntendedAction(proxy, instanceID)
- if instanceID == f.instanceID {
- return f.fallbackClient.Clusters(ctx, proxy)
- }
- client, err := f.clientForInstanceID(ctx, instanceID)
- if err != nil {
- return nil, err
- }
- req := &mesh_proto.ClustersRequest{
- ResourceType: string(proxy.Descriptor().Name),
- ResourceName: proxy.GetMeta().GetName(),
- ResourceMesh: proxy.GetMeta().GetMesh(),
- }
- resp, err := client.Clusters(ctx, req)
- if err != nil {
- return nil, err
- }
- return resp.GetClusters(), nil
-}
-
-func (f *forwardingKdsEnvoyAdminClient) logIntendedAction(proxy core_model.ResourceWithAddress, instanceID string) {
- log := clientLog.WithValues(
- "name", proxy.GetMeta().GetName(),
- "mesh", proxy.GetMeta().GetMesh(),
- "type", proxy.Descriptor().Name,
- "instanceID", instanceID,
- )
- if instanceID == f.instanceID {
- log.V(1).Info("zone CP of the resource is connected to this Global CP instance. Executing operation")
- } else {
- log.V(1).Info("zone CP of the resource is connected to other Global CP instance. Forwarding the request")
- }
-}
-
-func (f *forwardingKdsEnvoyAdminClient) globalInstanceID(ctx context.Context, zone string, rpcName string) (string, error) {
- zoneInsightRes := core_system.NewZoneInsightResource()
- if err := f.resManager.Get(ctx, zoneInsightRes, core_store.GetByKey(zone, core_model.NoMesh)); err != nil {
- return "", err
- }
- streams := zoneInsightRes.Spec.GetEnvoyAdminStreams()
- var globalInstanceID string
- switch rpcName {
- case service.ConfigDumpRPC:
- globalInstanceID = streams.GetConfigDumpGlobalInstanceId()
- case service.StatsRPC:
- globalInstanceID = streams.GetStatsGlobalInstanceId()
- case service.ClustersRPC:
- globalInstanceID = streams.GetClustersGlobalInstanceId()
- default:
- return "", errors.Errorf("invalid operation %s", rpcName)
- }
- if globalInstanceID == "" {
- return "", &StreamNotConnectedError{rpcName: rpcName}
- }
- return globalInstanceID, nil
-}
-
-func (f *forwardingKdsEnvoyAdminClient) clientForInstanceID(ctx context.Context, instanceID string) (mesh_proto.InterCPEnvoyAdminForwardServiceClient, error) {
- instance, err := catalog.InstanceOfID(ctx, f.cat, instanceID)
- if err != nil {
- return nil, err
- }
- return f.newClientFn(instance.InterCpURL())
-}
-
-type StreamNotConnectedError struct {
- rpcName string
-}
-
-func (e *StreamNotConnectedError) Error() string {
- return fmt.Sprintf("stream to execute %s operations is not yet connected", e.rpcName)
-}
-
-func (e *StreamNotConnectedError) Is(err error) bool {
- return reflect.TypeOf(e) == reflect.TypeOf(err)
-}
diff --git a/pkg/intercp/envoyadmin/server.go b/pkg/intercp/envoyadmin/server.go
deleted file mode 100644
index b1096e6..0000000
--- a/pkg/intercp/envoyadmin/server.go
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package envoyadmin
-
-import (
- "context"
- "errors"
-)
-
-import (
- mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/admin"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
- "github.com/apache/dubbo-kubernetes/pkg/core/resources/registry"
- core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
-)
-
-var serverLog = core.Log.WithName("intercp").WithName("catalog").WithName("server")
-
-type server struct {
- adminClient admin.EnvoyAdminClient
- resManager manager.ReadOnlyResourceManager
- mesh_proto.UnimplementedInterCPEnvoyAdminForwardServiceServer
-}
-
-var _ mesh_proto.InterCPEnvoyAdminForwardServiceServer = &server{}
-
-func NewServer(adminClient admin.EnvoyAdminClient, resManager manager.ReadOnlyResourceManager) mesh_proto.InterCPEnvoyAdminForwardServiceServer {
- return &server{
- adminClient: adminClient,
- resManager: resManager,
- }
-}
-
-func (s *server) XDSConfig(ctx context.Context, req *mesh_proto.XDSConfigRequest) (*mesh_proto.XDSConfigResponse, error) {
- serverLog.V(1).Info("received forwarded request", "operation", "XDSConfig", "request", req)
- resWithAddr, err := s.resWithAddress(ctx, req.ResourceType, req.ResourceName, req.ResourceMesh)
- if err != nil {
- return nil, err
- }
- configDump, err := s.adminClient.ConfigDump(ctx, resWithAddr)
- if err != nil {
- return nil, err
- }
- return &mesh_proto.XDSConfigResponse{
- Result: &mesh_proto.XDSConfigResponse_Config{
- Config: configDump,
- },
- }, nil
-}
-
-func (s *server) Stats(ctx context.Context, req *mesh_proto.StatsRequest) (*mesh_proto.StatsResponse, error) {
- serverLog.V(1).Info("received forwarded request", "operation", "Stats", "request", req)
- resWithAddr, err := s.resWithAddress(ctx, req.ResourceType, req.ResourceName, req.ResourceMesh)
- if err != nil {
- return nil, err
- }
- stats, err := s.adminClient.Stats(ctx, resWithAddr)
- if err != nil {
- return nil, err
- }
- return &mesh_proto.StatsResponse{
- Result: &mesh_proto.StatsResponse_Stats{
- Stats: stats,
- },
- }, nil
-}
-
-func (s *server) Clusters(ctx context.Context, req *mesh_proto.ClustersRequest) (*mesh_proto.ClustersResponse, error) {
- serverLog.V(1).Info("received forwarded request", "operation", "Clusters", "request", req)
- resWithAddr, err := s.resWithAddress(ctx, req.ResourceType, req.ResourceName, req.ResourceMesh)
- if err != nil {
- return nil, err
- }
- clusters, err := s.adminClient.Clusters(ctx, resWithAddr)
- if err != nil {
- return nil, err
- }
- return &mesh_proto.ClustersResponse{
- Result: &mesh_proto.ClustersResponse_Clusters{
- Clusters: clusters,
- },
- }, nil
-}
-
-func (s *server) resWithAddress(ctx context.Context, typ, name, mesh string) (model.ResourceWithAddress, error) {
- obj, err := registry.Global().NewObject(model.ResourceType(typ))
- if err != nil {
- return nil, err
- }
- if err := s.resManager.Get(ctx, obj, core_store.GetByKey(name, mesh)); err != nil {
- return nil, err
- }
- resourceWithAddr, ok := obj.(model.ResourceWithAddress)
- if !ok {
- return nil, errors.New("invalid resource type")
- }
- return resourceWithAddr, nil
-}
diff --git a/pkg/intercp/server/server.go b/pkg/intercp/server/server.go
deleted file mode 100644
index 59f7356..0000000
--- a/pkg/intercp/server/server.go
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package server
-
-import (
- "fmt"
- "net"
- "net/http"
- "time"
-)
-
-import (
- "google.golang.org/grpc"
- "google.golang.org/grpc/keepalive"
-)
-
-import (
- "github.com/apache/dubbo-kubernetes/pkg/config/intercp"
- "github.com/apache/dubbo-kubernetes/pkg/core"
- "github.com/apache/dubbo-kubernetes/pkg/core/runtime/component"
-)
-
-var log = core.Log.WithName("intercp-server")
-
-const (
- grpcMaxConcurrentStreams = 1000000
- grpcKeepAliveTime = 15 * time.Second
-)
-
-type InterCpServer struct {
- config intercp.InterCpServerConfig
- grpcServer *grpc.Server
- instanceId string
-}
-
-var _ component.Component = &InterCpServer{}
-
-func New(
- config intercp.InterCpServerConfig,
- instanceId string,
-) (*InterCpServer, error) {
- grpcOptions := []grpc.ServerOption{
- grpc.MaxConcurrentStreams(grpcMaxConcurrentStreams),
- grpc.KeepaliveParams(keepalive.ServerParameters{
- Time: grpcKeepAliveTime,
- Timeout: grpcKeepAliveTime,
- }),
- grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
- MinTime: grpcKeepAliveTime,
- PermitWithoutStream: true,
- }),
- }
-
- grpcOptions = append(grpcOptions)
- grpcServer := grpc.NewServer(grpcOptions...)
-
- return &InterCpServer{
- config: config,
- grpcServer: grpcServer,
- instanceId: instanceId,
- }, nil
-}
-
-func (d *InterCpServer) Start(stop <-chan struct{}) error {
- lis, err := net.Listen("tcp", fmt.Sprintf(":%d", d.config.Port))
- if err != nil {
- return err
- }
- log := log.WithValues(
- "instanceId",
- d.instanceId,
- )
-
- errChan := make(chan error)
- go func() {
- defer close(errChan)
- if err := d.grpcServer.Serve(lis); err != nil {
- if err != http.ErrServerClosed {
- log.Error(err, "terminated with an error")
- errChan <- err
- return
- }
- }
- log.Info("terminated normally")
- }()
- log.Info("starting", "interface", "0.0.0.0", "port", d.config.Port, "tls", true)
-
- select {
- case <-stop:
- log.Info("stopping gracefully")
- d.grpcServer.GracefulStop()
- log.Info("stopped")
- return nil
- case err := <-errChan:
- return err
- }
-}
-
-func (d *InterCpServer) NeedLeaderElection() bool {
- return false
-}
-
-func (d *InterCpServer) GrpcServer() *grpc.Server {
- return d.grpcServer
-}
diff --git a/pkg/plugins/common/zookeeper/connection.go b/pkg/plugins/common/zookeeper/connection.go
deleted file mode 100644
index af4cc0c..0000000
--- a/pkg/plugins/common/zookeeper/connection.go
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package zookeeper
-
-import (
- gxzookeeper "github.com/dubbogo/gost/database/kv/zk"
-)
-
-import (
- config "github.com/apache/dubbo-kubernetes/pkg/config/plugins/resources/zookeeper"
-)
-
-func ConnectToZK(cfg config.ZookeeperStoreConfig) (*gxzookeeper.ZookeeperClient, error) {
- client, err := gxzookeeper.NewZookeeperClient("default", cfg.Servers, true)
- if err != nil {
- return nil, err
- }
- return client, nil
-}
diff --git a/pkg/plugins/common/zookeeper/zk_listener.go b/pkg/plugins/common/zookeeper/zk_listener.go
deleted file mode 100644
index 70cc299..0000000
--- a/pkg/plugins/common/zookeeper/zk_listener.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package zookeeper
-
-import (
- "sync"
-)
-
-import (
- gxzookeeper "github.com/dubbogo/gost/database/kv/zk"
-
- "github.com/go-logr/logr"
-
- "go.uber.org/atomic"
-)
-
-import (
- "github.com/apache/dubbo-kubernetes/pkg/config/plugins/resources/zookeeper"
-)
-
-type zkListener struct {
- Client *gxzookeeper.ZookeeperClient
- pathMapLock sync.Mutex
- pathMap map[string]*atomic.Int32
- wg sync.WaitGroup
- err chan error
- notifications chan *Notification
- stop chan struct{}
-}
-
-func NewListener(cfg zookeeper.ZookeeperStoreConfig, log logr.Logger) (Listener, error) {
- return nil, nil
-}
-
-func (z *zkListener) Error() <-chan error {
- return z.err
-}
-
-func (z *zkListener) Notify() chan *Notification {
- return z.notifications
-}
-
-func (z *zkListener) Close() error {
- close(z.stop)
- z.wg.Wait()
- return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.mesh.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.mesh.go
index 8a65fcf..58300a7 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.mesh.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.mesh.go
@@ -411,7 +411,7 @@
}
// +kubebuilder:object:root=true
-// +kubebuilder:resource:categories=dubbo,scope=Cluster
+// +kubebuilder:resource:categories=dubbo,scope=Namespaced
type Mapping struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -427,7 +427,7 @@
}
// +kubebuilder:object:root=true
-// +kubebuilder:resource:scope=Namespaced
+// +kubebuilder:resource:scope=Cluster
type MappingList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
@@ -481,7 +481,7 @@
}
func (cb *Mapping) Scope() model.Scope {
- return model.ScopeCluster
+ return model.ScopeNamespace
}
func (l *MappingList) GetItems() []model.KubernetesObject {
@@ -702,7 +702,7 @@
}
// +kubebuilder:object:root=true
-// +kubebuilder:resource:categories=dubbo,scope=Cluster
+// +kubebuilder:resource:categories=dubbo,scope=Namespaced
type MetaData struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -718,7 +718,7 @@
}
// +kubebuilder:object:root=true
-// +kubebuilder:resource:scope=Namespaced
+// +kubebuilder:resource:scope=Cluster
type MetaDataList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
@@ -772,7 +772,7 @@
}
func (cb *MetaData) Scope() model.Scope {
- return model.ScopeCluster
+ return model.ScopeNamespace
}
func (l *MetaDataList) GetItems() []model.KubernetesObject {
diff --git a/pkg/plugins/resources/traditional/store.go b/pkg/plugins/resources/traditional/store.go
index 97b83f0..9825ff5 100644
--- a/pkg/plugins/resources/traditional/store.go
+++ b/pkg/plugins/resources/traditional/store.go
@@ -20,7 +20,6 @@
import (
"context"
"fmt"
- util_k8s "github.com/apache/dubbo-kubernetes/pkg/util/k8s"
"sync"
)
@@ -50,6 +49,7 @@
core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
"github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
"github.com/apache/dubbo-kubernetes/pkg/events"
+ util_k8s "github.com/apache/dubbo-kubernetes/pkg/util/k8s"
)
const (
diff --git a/pkg/plugins/runtime/k8s/controllers/inbound_converter.go b/pkg/plugins/runtime/k8s/controllers/inbound_converter.go
index c3df9ec..24f9064 100644
--- a/pkg/plugins/runtime/k8s/controllers/inbound_converter.go
+++ b/pkg/plugins/runtime/k8s/controllers/inbound_converter.go
@@ -77,7 +77,7 @@
Port: uint32(containerPort),
Tags: tags,
State: state,
- Health: &health, // write health for backwards compatibility with Kuma 2.5 and older
+ Health: &health, // write health for backwards compatibility with Dubbo
})
}
@@ -105,7 +105,7 @@
Port: mesh_proto.TCPPortReserved,
Tags: tags,
State: state,
- Health: &health, // write health for backwards compatibility with Kuma 2.5 and older
+ Health: &health, // write health for backwards compatibility with Dubbo
}
}
@@ -175,7 +175,7 @@
// ProtocolTagFor infers service protocol from a `<port>.service.dubbo.io/protocol` annotation or `appProtocol`.
func ProtocolTagFor(svc *kube_core.Service, svcPort *kube_core.ServicePort) string {
var protocolValue string
- protocolAnnotation := fmt.Sprintf("%d.service.kuma.io/protocol", svcPort.Port)
+ protocolAnnotation := fmt.Sprintf("%d.service.dubbo.io/protocol", svcPort.Port)
if svcPort.AppProtocol != nil {
protocolValue = *svcPort.AppProtocol
@@ -186,8 +186,8 @@
}
}
- if explicitKumaProtocol, ok := svc.Annotations[protocolAnnotation]; ok && protocolValue == "" {
- protocolValue = explicitKumaProtocol
+ if explicitDubboProtocol, ok := svc.Annotations[protocolAnnotation]; ok && protocolValue == "" {
+ protocolValue = explicitDubboProtocol
}
if protocolValue == "" {
diff --git a/pkg/plugins/runtime/k8s/controllers/pod_controller.go b/pkg/plugins/runtime/k8s/controllers/pod_controller.go
index a838de1..2b52018 100644
--- a/pkg/plugins/runtime/k8s/controllers/pod_controller.go
+++ b/pkg/plugins/runtime/k8s/controllers/pod_controller.go
@@ -287,7 +287,7 @@
if err != nil {
if !errors.Is(err, context.Canceled) {
log.Error(err, "unable to create/update Dataplane", "operationResult", operationResult)
- r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Kuma Dataplane: %s", err.Error())
+ r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Dubbo Dataplane: %s", err.Error())
}
return err
@@ -295,10 +295,10 @@
switch operationResult {
case kube_controllerutil.OperationResultCreated:
log.Info("Dataplane created")
- r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Kuma Dataplane: %s", pod.Name)
+ r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Dubbo Dataplane: %s", pod.Name)
case kube_controllerutil.OperationResultUpdated:
log.Info("Dataplane updated")
- r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Kuma Dataplane: %s", pod.Name)
+ r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Dubbo Dataplane: %s", pod.Name)
}
return nil
}
@@ -323,16 +323,16 @@
log := r.Log.WithValues("pod", kube_types.NamespacedName{Namespace: pod.Namespace, Name: pod.Name})
if err != nil {
log.Error(err, "unable to create/update Ingress", "operationResult", operationResult)
- r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Kuma Ingress: %s", err.Error())
+ r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Dubbo Ingress: %s", err.Error())
return err
}
switch operationResult {
case kube_controllerutil.OperationResultCreated:
log.Info("ZoneIngress created")
- r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Kuma Ingress: %s", pod.Name)
+ r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Dubbo Ingress: %s", pod.Name)
case kube_controllerutil.OperationResultUpdated:
log.Info("ZoneIngress updated")
- r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Kuma Ingress: %s", pod.Name)
+ r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Dubbo Ingress: %s", pod.Name)
}
return nil
}
diff --git a/pkg/plugins/runtime/k8s/metadata/annotations.go b/pkg/plugins/runtime/k8s/metadata/annotations.go
index 52b0298..5762beb 100644
--- a/pkg/plugins/runtime/k8s/metadata/annotations.go
+++ b/pkg/plugins/runtime/k8s/metadata/annotations.go
@@ -37,7 +37,7 @@
// which is crucial for Multizone communication
DubboIngressAnnotation = "dubbo.io/ingress"
- // DUBBOSidecarEnvVarsAnnotation is a ; separated list of env vars that will be applied on Kuma Sidecar
+ // DUBBOSidecarEnvVarsAnnotation is a ; separated list of env vars that will be applied on Dubbo Sidecar
// Example value: TEST1=1;TEST2=2
DUBBOSidecarEnvVarsAnnotation = "dubbo.io/sidecar-env-vars"
@@ -54,11 +54,11 @@
DubboTagsAnnotation = "dubbo.io/tags"
// DubboIngressPublicAddressAnnotation allows to pick public address for Ingress
- // If not defined, Kuma will try to pick this address from the Ingress Service
+ // If not defined, Dubbo will try to pick this address from the Ingress Service
DubboIngressPublicAddressAnnotation = "dubbo.io/ingress-public-address"
// DubboIngressPublicPortAnnotation allows to pick public port for Ingress
- // If not defined, Kuma will try to pick this address from the Ingress Service
+ // If not defined, Dubbo will try to pick this address from the Ingress Service
DubboIngressPublicPortAnnotation = "dubbo.io/ingress-public-port"
)
@@ -165,7 +165,7 @@
return v.([]string), exists
}
-// GetMap returns map from annotation. Example: "kuma.io/sidecar-env-vars: TEST1=1;TEST2=2"
+// GetMap returns map from annotation. Example: "dubbo.io/sidecar-env-vars: TEST1=1;TEST2=2"
func (a Annotations) GetMap(keys ...string) (map[string]string, bool, error) {
return a.GetMapWithDefault(map[string]string{}, keys...)
}
diff --git a/pkg/plugins/runtime/k8s/webhooks/service_validator.go b/pkg/plugins/runtime/k8s/webhooks/service_validator.go
index 0414bba..94cf513 100644
--- a/pkg/plugins/runtime/k8s/webhooks/service_validator.go
+++ b/pkg/plugins/runtime/k8s/webhooks/service_validator.go
@@ -61,7 +61,7 @@
func (v *ServiceValidator) validate(svc *kube_core.Service) error {
verr := &validators.ValidationError{}
for _, svcPort := range svc.Spec.Ports {
- protocolAnnotation := fmt.Sprintf("%d.service.kuma.io/protocol", svcPort.Port)
+ protocolAnnotation := fmt.Sprintf("%d.service.dubbo.io/protocol", svcPort.Port)
protocolAnnotationValue, exists := svc.Annotations[protocolAnnotation]
if exists && core_mesh.ParseProtocol(protocolAnnotationValue) == core_mesh.ProtocolUnknown {
verr.AddViolationAt(validators.RootedAt("metadata").Field("annotations").Key(protocolAnnotation),
diff --git a/pkg/plugins/runtime/k8s/webhooks/validation.go b/pkg/plugins/runtime/k8s/webhooks/validation.go
index ba125c3..6e15bd3 100644
--- a/pkg/plugins/runtime/k8s/webhooks/validation.go
+++ b/pkg/plugins/runtime/k8s/webhooks/validation.go
@@ -196,7 +196,7 @@
{
Type: "FieldValueInvalid",
Message: "cannot be empty",
- Field: "metadata.labels[kuma.io/origin]",
+ Field: "metadata.labels[dubbo.io/origin]",
},
},
},
@@ -226,7 +226,7 @@
{
Type: "FieldValueInvalid",
Message: "cannot be empty",
- Field: "metadata.annotations[kuma.io/synced]",
+ Field: "metadata.annotations[dubbo.io/synced]",
},
},
},
@@ -239,7 +239,7 @@
return true
}
-func convertValidationErrorOf(kumaErr validators.ValidationError, obj kube_runtime.Object, objMeta metav1.Object) admission.Response {
+func convertValidationErrorOf(dubboErr validators.ValidationError, obj kube_runtime.Object, objMeta metav1.Object) admission.Response {
details := &metav1.StatusDetails{
Name: objMeta.GetName(),
Kind: obj.GetObjectKind().GroupVersionKind().Kind,
@@ -249,14 +249,14 @@
Allowed: false,
Result: &metav1.Status{
Status: "Failure",
- Message: kumaErr.Error(),
+ Message: dubboErr.Error(),
Reason: "Invalid",
Code: int32(422),
Details: details,
},
},
}
- for _, violation := range kumaErr.Violations {
+ for _, violation := range dubboErr.Violations {
cause := metav1.StatusCause{
Type: "FieldValueInvalid",
Message: violation.Message,
diff --git a/pkg/util/xds/stats_callbacks.go b/pkg/util/xds/stats_callbacks.go
index cad899a..06a6f47 100644
--- a/pkg/util/xds/stats_callbacks.go
+++ b/pkg/util/xds/stats_callbacks.go
@@ -86,43 +86,6 @@
configsQueue: map[string]time.Time{},
}
- stats.responsesSentMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
- Name: dsType + "_responses_sent",
- Help: "Number of responses sent by the server to a client",
- }, []string{"type_url"})
- if err := metrics.Register(stats.responsesSentMetric); err != nil {
- return nil, err
- }
-
- stats.requestsReceivedMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
- Name: dsType + "_requests_received",
- Help: "Number of confirmations requests from a client",
- }, []string{"type_url", "confirmation"})
- if err := metrics.Register(stats.requestsReceivedMetric); err != nil {
- return nil, err
- }
-
- streamsActive := prometheus.NewGaugeFunc(prometheus.GaugeOpts{
- Name: dsType + "_streams_active",
- Help: "Number of active connections between a server and a client",
- }, func() float64 {
- stats.RLock()
- defer stats.RUnlock()
- return float64(stats.streamsActive)
- })
- if err := metrics.Register(streamsActive); err != nil {
- return nil, err
- }
-
- stats.deliveryMetricName = dsType + "_delivery"
- stats.deliveryMetric = prometheus.NewSummary(prometheus.SummaryOpts{
- Name: stats.deliveryMetricName,
- Help: "Summary of config delivery including a response (ACK/NACK) from the client",
- })
- if err := metrics.Register(stats.deliveryMetric); err != nil {
- return nil, err
- }
-
return stats, nil
}
diff --git a/pkg/xds/bootstrap/generator.go b/pkg/xds/bootstrap/generator.go
index 4c4fc70..7fc5c3b 100644
--- a/pkg/xds/bootstrap/generator.go
+++ b/pkg/xds/bootstrap/generator.go
@@ -241,7 +241,7 @@
var DpTokenRequired = errors.New("Dataplane Token is required. Generate token using 'dubboctl generate dataplane-token > /path/file' and provide it via --dataplane-token-file=/path/file argument to Dubbo DP")
var NotCA = errors.New("A data plane proxy is trying to verify the control plane using the certificate which is not a certificate authority (basic constraint 'CA' is set to 'false').\n" +
- "Provide CA that was used to sign a certificate used in the control plane by using 'dubbo-dp run --ca-cert-file=file' or via KUMA_CONTROL_PLANE_CA_CERT_FILE")
+ "Provide CA that was used to sign a certificate used in the control plane by using 'dubbo-dp run --ca-cert-file=file' or via DUBBO_CONTROL_PLANE_CA_CERT_FILE")
func SANMismatchErr(host string, sans []string) error {
return errors.Errorf("A data plane proxy is trying to connect to the control plane using %q address, but the certificate in the control plane has the following SANs %q. "+
diff --git a/pkg/xds/bootstrap/template_v3.go b/pkg/xds/bootstrap/template_v3.go
index 04244a9..5fbc406 100644
--- a/pkg/xds/bootstrap/template_v3.go
+++ b/pkg/xds/bootstrap/template_v3.go
@@ -75,7 +75,7 @@
}
runtimeLayers := []*envoy_bootstrap_v3.RuntimeLayer{{
- Name: "kuma",
+ Name: "dubbo",
LayerSpecifier: &envoy_bootstrap_v3.RuntimeLayer_StaticLayer{
StaticLayer: util_proto.MustStruct(map[string]interface{}{
"re2.max_program_size.error_level": 4294967295,
diff --git a/pkg/xds/server/components.go b/pkg/xds/server/components.go
index c69ee28..166e632 100644
--- a/pkg/xds/server/components.go
+++ b/pkg/xds/server/components.go
@@ -18,6 +18,7 @@
package server
import (
+ util_xds "github.com/apache/dubbo-kubernetes/pkg/util/xds"
"github.com/pkg/errors"
)
@@ -42,6 +43,7 @@
)
func RegisterXDS(rt core_runtime.Runtime) error {
+ statsCallbacks, err := util_xds.NewStatsCallbacks(nil, "xds")
claCache, err := cla.NewCache(rt.Config().Store.Cache.ExpirationTime.Duration)
if err != nil {
return err
@@ -51,7 +53,7 @@
CLACache: claCache,
Zone: "",
}
- if err := v3.RegisterXDS(nil, envoyCpCtx, rt); err != nil {
+ if err := v3.RegisterXDS(statsCallbacks, envoyCpCtx, rt); err != nil {
return errors.Wrap(err, "could not register V3 XDS")
}
return nil
diff --git a/test/app/provider/deployment.yaml b/test/app/provider/deployment.yaml
index 52d34ab..c2bc771 100644
--- a/test/app/provider/deployment.yaml
+++ b/test/app/provider/deployment.yaml
@@ -26,7 +26,7 @@
template:
metadata:
annotations:
- dubbo.io/xds-enable: enabled
+ dubbo.io/ingress: enabled
labels:
app: dubbo-samples-apiserver-provider
spec:
diff --git a/tools/xds-client/main.go b/tools/xds-client/main.go
index 47e9aef..1a86f9c 100644
--- a/tools/xds-client/main.go
+++ b/tools/xds-client/main.go
@@ -52,7 +52,7 @@
outbounds int
rampUpPeriod time.Duration
}{
- xdsServerAddress: "grpcs://localhost:5678",
+ xdsServerAddress: "grpc://localhost:5678",
dps: 100,
services: 50,
inbounds: 1,
@@ -100,7 +100,7 @@
}
dp := &unversioned.Resource{
- Meta: rest_v1alpha1.ResourceMeta{Mesh: "default", Name: fmt.Sprintf("dataplane-%d", i), Type: "Dataplane"},
+ Meta: rest_v1alpha1.ResourceMeta{Mesh: "default", Name: fmt.Sprintf("dataplane-%d.dubbo-system", i), Type: "Dataplane"},
Spec: dpSpec,
}
diff --git a/ui-vue3/src/api/mock/mockInstance.ts b/ui-vue3/src/api/mock/mockInstance.ts
index 7c723f3..54b5e5f 100644
--- a/ui-vue3/src/api/mock/mockInstance.ts
+++ b/ui-vue3/src/api/mock/mockInstance.ts
@@ -17,87 +17,101 @@
import Mock from 'mockjs'
-Mock.mock('/mock/instance/search', 'get', {
- code: 200,
- message: 'laborum qui',
- data: {
- total: 66,
- curPage: 82,
- pageSize: 31,
- data: [
- {
- ip: '205.216.185.96',
- name: '用省中际解理',
- deployState: {
- label: 'dolor',
- value: 'in amet',
- level: 'amet nisi incididunt',
- tip: '133.16.55.40'
- },
- deployCluster: 'veniam elit irure',
- registerStates: [
- {
- label: 'in consequat est',
- value: 'esse non Lorem',
- level: 'sit',
- tip: '122.249.164.252'
- }
- ],
- registerClusters: ['cupidatat'],
- cpu: 'officia cupidatat reprehenderit magna ex',
- memory: 'mollit',
- startTime: '2016-07-31 19:20:31',
- registerTime: '2014-02-09 04:02:41',
- labels: ['cupidat']
- },
- {
- ip: '117.23.142.162',
- name: '之受力即此',
- deployState: {
- label: 'sint culpa elit quis id',
- value: 'amet',
- level: 'adipisicing do',
- tip: '112.176.231.68'
- },
- deployCluster: 'esse sit',
- registerStates: [
- {
- label: 'ut',
- value: 'eu sit',
- level: 'in eiusmod ullamco',
- tip: '220.153.108.236'
- }
- ],
- registerClusters: ['ea consectetur'],
- cpu: 'dolor sint deserunt',
- memory: 'sint eu commodo proident',
- startTime: '1994-12-22 18:24:57',
- registerTime: '1986-07-24 03:18:24'
- },
- {
- ip: '41.215.196.61',
- name: '值青给值',
- deployState: {
- label: 'sunt',
- value: 'consectetur in',
- level: 'culpa dolore',
- tip: '142.182.249.124'
- },
- deployCluster: 'cupidatat eu nostrud',
- registerStates: [
- {
- label: 'ad quis',
- value: 'Excepteur esse dolore Ut dolore',
- level: 'ipsum ad quis',
- tip: '220.55.203.4'
- }
- ],
- registerClusters: ['Excepteur sit laboris'],
- cpu: 'fugiat pariatur laborum ut',
- memory: 'Lorem adipisicing sunt',
- startTime: '1984-04-25 12:22:51',
- registerTime: '1976-06-06 19:58:58'
+Mock.mock('/mock/instance/search', 'get', () => {
+ let total = Mock.mock('@integer(8, 1000)')
+ let list = []
+ for (let i = 0; i < total; i++) {
+ list.push({
+ ip: '121.90.211.162',
+ name: 'shop-user',
+ deployState: Mock.Random.pick(['Running', 'Pending', 'Terminating', 'Crashing']),
+ deployCluster: 'tx-shanghai-1',
+ registerStates: [
+ {
+ label: 'Registed',
+ value: 'Registed',
+ level: 'healthy'
+ }
+ ],
+ registerClusters: ['ali-hangzhou-1', 'ali-hangzhou-2'],
+ cpu: '1.2c',
+ memory: '2349MB',
+ startTime: '2023-06-09 03:47:10',
+ registerTime: '2023-06-09 03:48:20',
+ labels: {
+ region: 'beijing',
+ version: 'v1'
}
- ]
+ })
+ }
+ return {
+ code: 200,
+ message: 'success',
+ data: Mock.mock({
+ total: total,
+ curPage: 1,
+ pageSize: 10,
+ data: list
+ })
+ }
+})
+
+Mock.mock('/mock/instance/detail', 'get', () => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ deployState: {
+ label: 'pariatur do nulla',
+ value: 'ut',
+ level: 'ullamco veniam laboris ex',
+ tip: '246.179.217.170'
+ },
+ registerStates: [
+ {
+ label: 'magna Duis non',
+ value: 'laboris',
+ level: 'et dolore pariatur ipsum adipisicing',
+ tip: '204.174.144.51'
+ }
+ ],
+ dubboPort: 35,
+ ip: '15.1.144.52',
+ appName: '式团划',
+ workload: 'in labore enim',
+ labels: [null],
+ createTime: '2000-11-12 05:59:48',
+ startTime: '1986-03-29 11:48:17',
+ registerTime: '2000-01-26 19:09:48',
+ registerCluster: 'qui commodo dolore',
+ deployCluster: 'dolore laborum',
+ node: 'aliquip',
+ image: 'http://dummyimage.com/400x400',
+ probes: {
+ startupProbe: {
+ type: 'pariatur in quis',
+ port: 92,
+ open: false
+ },
+ readinessProbe: {
+ type: 'aute',
+ port: 52,
+ open: false
+ },
+ livenessPronbe: {
+ type: 'reprehenderit aute nostrud',
+ port: 66,
+ open: false
+ }
+ }
+ }
+ }
+})
+
+Mock.mock('/mock/instance/metrics', 'get', () => {
+ return {
+ code: 200,
+ message: 'success',
+ data: 'http://8.147.104.101:3000/d/dcf5defe-d198-4704-9edf-6520838880e9/instance?orgId=1&refresh=1m&from=1710644821536&to=1710731221536&theme=light'
}
})
diff --git a/ui-vue3/src/api/mock/mockService.ts b/ui-vue3/src/api/mock/mockService.ts
index c10e0cd..2383bcd 100644
--- a/ui-vue3/src/api/mock/mockService.ts
+++ b/ui-vue3/src/api/mock/mockService.ts
@@ -28,56 +28,192 @@
data: [
{
serviceName: 'org.apache.dubbo.samples.UserService',
- interfaceNum: 4,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 6,
avgRT: '194ms',
requestTotal: 200
},
{
serviceName: 'org.apache.dubbo.samples.OrderService',
- interfaceNum: 12,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 13,
avgRT: '189ms',
requestTotal: 164
},
{
serviceName: 'org.apache.dubbo.samples.DetailService',
- interfaceNum: 14,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 0.5,
avgRT: '268ms',
requestTotal: 1324
},
{
serviceName: 'org.apache.dubbo.samples.PayService',
- interfaceNum: 8,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 9,
avgRT: '346ms',
requestTotal: 189
},
{
serviceName: 'org.apache.dubbo.samples.CommentService',
- interfaceNum: 9,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 8,
avgRT: '936ms',
requestTotal: 200
},
{
serviceName: 'org.apache.dubbo.samples.RepayService',
- interfaceNum: 16,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 17,
avgRT: '240ms',
requestTotal: 146
},
{
serviceName: 'org.apche.dubbo.samples.TransportService',
- interfaceNum: 5,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 43,
avgRT: '89ms',
requestTotal: 367
},
{
serviceName: 'org.apche.dubbo.samples.DistributionService',
- interfaceNum: 5,
+ versionGroup: [
+ {
+ version: '1.0.0',
+ group: 'group1'
+ },
+ {
+ version: '1.0.0',
+ group: null
+ },
+ {
+ version: null,
+ group: 'group1'
+ },
+ {
+ version: null,
+ group: null
+ }
+ ],
avgQPS: 4,
avgRT: '78ms',
requestTotal: 145
diff --git a/ui-vue3/src/api/mock/mockServiceDistribution.ts b/ui-vue3/src/api/mock/mockServiceDistribution.ts
index 4a88fa4..23b74aa 100644
--- a/ui-vue3/src/api/mock/mockServiceDistribution.ts
+++ b/ui-vue3/src/api/mock/mockServiceDistribution.ts
@@ -28,67 +28,101 @@
{
applicationName: 'shop-order',
instanceNum: 15,
- instanceIP: [
- '192.168.32.28:8697',
- '192.168.32.26:20880',
- '192.168.32.24:28080',
- '192.168.32.22:20880'
- ]
+ instanceName: 'shop-order0',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=beijing'
},
{
applicationName: 'shop-order',
instanceNum: 15,
- instanceIP: ['192.168.32.28:8697', '192.168.32.26:20880', '192.168.32.24:28080']
+ instanceName: 'shop-order1',
+ rpcPort: '172.168.45.24:20888',
+ timeout: '500ms',
+ retryNum: '1',
+ label: 'region=wuhan'
},
{
applicationName: 'shop-user',
instanceNum: 12,
- instanceIP: ['192.168.32.28:8697', '192.168.32.24:28080']
+ instanceName: 'shop-order2',
+ rpcPort: '172.161.23.89:20888',
+ timeout: '200ms',
+ retryNum: '1',
+ label: 'region=shanghai'
},
{
applicationName: 'shop-order',
instanceNum: 15,
- instanceIP: [
- '192.168.32.28:8697',
- '192.168.32.26:20880',
- '192.168.32.24:28080',
- '192.168.32.22:20880'
- ]
+ instanceName: 'shop-order3',
+ rpcPort: '172.168.45.89:12423',
+ timeout: '2000ms',
+ retryNum: '2',
+ label: 'region=hangzhou'
},
{
applicationName: 'shop-order',
instanceNum: 15,
- instanceIP: ['192.168.32.28:8697', '192.168.32.26:20880', '192.168.32.24:28080']
+ instanceName: 'shop-order4',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '100ms',
+ retryNum: '0',
+ label: 'region=wuxi'
},
{
applicationName: 'shop-user',
instanceNum: 12,
- instanceIP: ['192.168.32.28:8697', '192.168.32.24:28080']
+ instanceName: 'shop-order5',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=beijing'
},
{
applicationName: 'shop-order',
instanceNum: 15,
- instanceIP: ['192.168.32.28:8697', '192.168.32.26:20880', '192.168.32.24:28080']
+ instanceName: 'shop-order6',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=ningbo'
},
{
applicationName: 'shop-user',
instanceNum: 12,
- instanceIP: ['192.168.32.28:8697', '192.168.32.24:28080']
+ instanceName: 'shop-order7',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=shenzhen'
},
{
applicationName: 'shop-user',
instanceNum: 12,
- instanceIP: ['192.168.32.28:8697', '192.168.32.24:28080']
+ instanceName: 'shop-order8',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=guangzhou'
},
{
applicationName: 'shop-order',
instanceNum: 15,
- instanceIP: ['192.168.32.28:8697', '192.168.32.26:20880', '192.168.32.24:28080']
+ instanceName: 'shop-order9',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=nanjing'
},
{
applicationName: 'shop-user',
instanceNum: 12,
- instanceIP: ['192.168.32.28:8697', '192.168.32.24:28080']
+ instanceName: 'shop-order10',
+ rpcPort: '172.168.45.89:20888',
+ timeout: '1000ms',
+ retryNum: '2',
+ label: 'region=beijing'
}
]
}
diff --git a/ui-vue3/src/api/service/instance.ts b/ui-vue3/src/api/service/instance.ts
index c07ef80..e133c4a 100644
--- a/ui-vue3/src/api/service/instance.ts
+++ b/ui-vue3/src/api/service/instance.ts
@@ -24,3 +24,19 @@
params
})
}
+
+export const getInstanceDetail = (params: any): Promise<any> => {
+ return request({
+ url: '/instance/detail',
+ method: 'get',
+ params
+ })
+}
+
+export const getInstanceMetricsInfo = (params: any): Promise<any> => {
+ return request({
+ url: '/instance/metrics',
+ method: 'get',
+ params
+ })
+}
diff --git a/ui-vue3/src/base/i18n/en.ts b/ui-vue3/src/base/i18n/en.ts
index 03deca7..f197248 100644
--- a/ui-vue3/src/base/i18n/en.ts
+++ b/ui-vue3/src/base/i18n/en.ts
@@ -18,7 +18,68 @@
import type { I18nType } from './type.ts'
const words: I18nType = {
+ destinationRuleDomain: {
+ YAMLView: 'YAML view',
+ formView: 'Form view'
+ },
+ virtualServiceDomain: {
+ YAMLView: 'YAML view',
+ formView: 'Form view'
+ },
+ dynamicConfigDomain: {
+ YAMLView: 'YAML view',
+ formView: 'Form view'
+ },
+ routingRuleDomain: {
+ YAMLView: 'YAML view',
+ formView: 'Form view'
+ },
+ tagRuleDomain: {
+ YAMLView: 'YAML view',
+ formView: 'Form view'
+ },
+ flowControlDomain: {
+ actuatingRange: 'Actuating range',
+ notSet: 'Not set',
+ versionRecords: 'Version records',
+ YAMLView: 'YAML View',
+ addConfiguration: 'Add configuration',
+ addConfigurationItem: 'Add configurationItem',
+ addFilter: 'Add filter',
+ configurationItem: 'Configuration item',
+ scopeScreening: 'Scope screening',
+ endOfAction: 'End of action',
+ addLabel: 'Add label',
+ actions: 'Actions',
+ filterType: 'Filter type',
+ labelName: 'Label name',
+ formView: 'Form view',
+ addMatch: 'Add match',
+ addRouter: 'Add router',
+ addressSubsetMatching: 'Address subset matching',
+ value: 'Value',
+ relation: 'Relation',
+ parameter: 'Parameter',
+ matchingDimension: 'Matching dimension',
+ requestParameterMatching: 'Request parameter matching',
+ ruleName: 'Rule name',
+ actionObject: 'Action object',
+ faultTolerantProtection: 'Fault-tolerant protection',
+ runTimeEffective: 'Run time effective',
+ ruleGranularity: 'Rule granularity',
+ timeOfTakingEffect: 'Time of taking effect',
+ enabledStatus: 'Enabled status',
+ priority: 'Priority',
+ off: 'off',
+ on: 'on',
+ opened: 'Opened',
+ closed: 'Closed',
+ enabled: 'Enabled',
+ disabled: 'Disabled'
+ },
instanceDomain: {
+ flowDisabled: 'Flow disabled',
+ operatorLog: 'Operator log',
enableAppInstanceLogs: 'Enable access logs for all instances of this application',
appServiceRetries: 'Adjust the number of retries for the service provided by this application',
appServiceLoadBalance:
@@ -61,6 +122,9 @@
labels: 'Labels',
startTime_k8s: 'StartTime(k8s)'
},
+ serviceDomain: {
+ name: 'Name'
+ },
appServiceTimeout: 'Adjusting the timeout for application service provision',
enableAppInstanceLogs: 'Enable access logs for all instances of this application',
appServiceLoadBalance: 'Adjusting the load balancing strategy for application service provision',
@@ -99,6 +163,10 @@
instance: 'Instance',
resourceDetails: 'Resource Details',
service: 'Service',
+ versionGroup: 'Version & Group',
+ avgQPS: 'last 1min QPS',
+ avgRT: 'last 1min RT',
+ requestTotal: 'last 1min request total',
serviceSearch: 'Search Service',
serviceGovernance: 'Routing Rule',
trafficManagement: 'Traffic Management',
@@ -391,6 +459,7 @@
debug: 'Debug',
distribution: 'Distribution',
tracing: 'Tracing',
+ sceneConfig: 'Scene Config',
provideService: 'Provide Service',
dependentService: 'Dependent Service',
diff --git a/ui-vue3/src/base/i18n/zh.ts b/ui-vue3/src/base/i18n/zh.ts
index 8428a8c..28e68a7 100644
--- a/ui-vue3/src/base/i18n/zh.ts
+++ b/ui-vue3/src/base/i18n/zh.ts
@@ -18,7 +18,68 @@
import type { I18nType } from './type.ts'
const words: I18nType = {
+ destinationRuleDomain: {
+ YAMLView: 'YAML视图',
+ formView: '表单视图'
+ },
+ virtualServiceDomain: {
+ YAMLView: 'YAML视图',
+ formView: '表单视图'
+ },
+ dynamicConfigDomain: {
+ YAMLView: 'YAML视图',
+ formView: '表单视图'
+ },
+ routingRuleDomain: {
+ YAMLView: 'YAML视图',
+ formView: '表单视图'
+ },
+ tagRuleDomain: {
+ YAMLView: 'YAML视图',
+ formView: '表单视图'
+ },
+ flowControlDomain: {
+ notSet: '未设置',
+ versionRecords: '版本记录',
+ YAMLView: 'YAML视图',
+ addConfiguration: '增加配置',
+ addConfigurationItem: '增加配置项',
+ addFilter: '增加筛选',
+ configurationItem: '配置项',
+ actuatingRange: '作用范围',
+ scopeScreening: '作用范围筛选',
+ endOfAction: '作用端',
+ actions: '操作',
+ filterType: '筛选类型',
+ labelName: '标签名',
+ formView: '表单视图',
+ addMatch: '增加匹配',
+ addRouter: '增加路由',
+ addLabel: '增加标签',
+ addressSubsetMatching: '地址子集匹配',
+ value: '值',
+ relation: '关系',
+ requestParameterMatching: '请求参数匹配',
+ matchingDimension: '匹配维度',
+ parameter: '参数',
+ ruleName: '规则名',
+ actionObject: '作用对象',
+ faultTolerantProtection: '容错保护',
+ runTimeEffective: '运行时生效',
+ ruleGranularity: '规则粒度',
+ timeOfTakingEffect: '生效时间',
+ enabledStatus: '启用状态',
+ priority: '优先级',
+ off: '关',
+ on: '开',
+ opened: '开启',
+ closed: '关闭',
+ enabled: '启用',
+ disabled: '禁用'
+ },
instanceDomain: {
+ flowDisabled: '流量禁用',
+ operatorLog: '执行日志',
CPU: 'CPU',
enableAppInstanceLogs: '开启该应用所有实例的访问日志',
appServiceLoadBalance: '调整应用提供服务的负载均衡策略',
@@ -35,7 +96,7 @@
loadBalance: '负载均衡',
monitor: '监控',
linkTracking: '链路追踪',
- configuration: '配置',
+ configuration: '场景配置',
event: '事件',
healthExamination_k8s: '健康检查(k8s)',
instanceLabel: '实例标签',
@@ -61,7 +122,14 @@
creationTime_k8s: '创建时间(k8s)',
startTime_k8s: '启动时间(k8s)'
},
+ serviceDomain: {
+ name: '服务名'
+ },
service: '服务',
+ versionGroup: '版本&分组',
+ avgQPS: '近1min QPS',
+ avgRT: '近1min RT',
+ requestTotal: '近1min 请求总量',
serviceSearch: '服务查询',
serviceGovernance: '路由规则',
trafficManagement: '流量管控',
@@ -363,6 +431,7 @@
distribution: '分布',
monitor: '监控',
tracing: '链路追踪',
+ sceneConfig: '场景配置',
event: '事件',
provideService: '提供服务',
diff --git a/ui-vue3/src/router/defaultRoutes.ts b/ui-vue3/src/router/defaultRoutes.ts
index d67c200..a33feef 100644
--- a/ui-vue3/src/router/defaultRoutes.ts
+++ b/ui-vue3/src/router/defaultRoutes.ts
@@ -20,6 +20,7 @@
import LayoutTab from '../layout/tab/layout_tab.vue'
import _ from 'lodash'
import AppTabHeaderSlot from '@/views/resources/applications/slots/AppTabHeaderSlot.vue'
+import ServiceTabHeaderSlot from '@/views/resources/services/slots/ServiceTabHeaderSlot.vue'
export declare type RouteRecordType = RouteRecordRaw & {
key?: string
@@ -208,7 +209,10 @@
redirect: 'search',
component: LayoutTab,
meta: {
- tab_parent: true
+ tab_parent: true,
+ slots: {
+ header: ServiceTabHeaderSlot
+ }
},
children: [
{
@@ -220,7 +224,7 @@
}
},
{
- path: '/detail/:serviceName',
+ path: '/detail/:pathId',
name: 'detail',
component: () => import('../views/resources/services/tabs/detail.vue'),
meta: {
@@ -228,7 +232,7 @@
}
},
{
- path: '/debug/:serviceName',
+ path: '/debug/:pathId',
name: 'debug',
component: () => import('../views/resources/services/tabs/debug.vue'),
meta: {
@@ -236,7 +240,7 @@
}
},
{
- path: '/distribution/:serviceName',
+ path: '/distribution/:pathId',
name: 'distribution',
component: () => import('../views/resources/services/tabs/distribution.vue'),
meta: {
@@ -244,7 +248,7 @@
}
},
{
- path: '/monitor/:serviceName',
+ path: '/monitor/:pathId',
name: 'monitor',
component: () => import('../views/resources/services/tabs/monitor.vue'),
meta: {
@@ -252,7 +256,7 @@
}
},
{
- path: '/tracing/:serviceName',
+ path: '/tracing/:pathId',
name: 'tracing',
component: () => import('../views/resources/services/tabs/tracing.vue'),
meta: {
@@ -260,7 +264,15 @@
}
},
{
- path: '/event/:serviceName',
+ path: '/sceneConfig/:pathId',
+ name: 'sceneConfig',
+ component: () => import('../views/resources/services/tabs/sceneConfig.vue'),
+ meta: {
+ tab: true
+ }
+ },
+ {
+ path: '/event/:pathId',
name: 'event',
component: () => import('../views/resources/services/tabs/event.vue'),
meta: {
@@ -281,19 +293,113 @@
{
path: '/routingRule',
name: 'routingRule',
- component: () => import('../views/traffic/routingRule/index.vue')
+ redirect: 'index',
+ component: LayoutTab,
+ meta: {
+ tab_parent: true
+ },
+ children: [
+ {
+ path: '/index',
+ name: 'routingRuleIndex',
+ component: () => import('../views/traffic/routingRule/index.vue'),
+ meta: {
+ hidden: true
+ }
+ },
+ {
+ path: '/formview/:ruleName',
+ name: 'routingRuleDomain.formView',
+ component: () => import('../views/traffic/routingRule/tabs/formView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:apm-trace'
+ }
+ },
+ {
+ path: '/yamlview/:ruleName',
+ name: 'routingRuleDomain.YAMLView',
+ component: () => import('../views/traffic/routingRule/tabs/YAMLView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:app-console'
+ }
+ }
+ ]
},
{
path: '/tagRule',
name: 'tagRule',
- component: () => import('../views/traffic/tagRule/index.vue'),
- meta: {}
+ redirect: 'index',
+ component: LayoutTab,
+ meta: {
+ tab_parent: true
+ },
+ children: [
+ {
+ path: '/index',
+ name: 'tagRuleIndex',
+ component: () => import('../views/traffic/tagRule/index.vue'),
+ meta: {
+ hidden: true
+ }
+ },
+ {
+ path: '/formview/:ruleName',
+ name: 'tagRuleDomain.formView',
+ component: () => import('../views/traffic/tagRule/tabs/formView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:apm-trace'
+ }
+ },
+ {
+ path: '/yamlview/:ruleName',
+ name: 'tagRuleDomain.YAMLView',
+ component: () => import('../views/traffic/tagRule/tabs/YAMLView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:app-console'
+ }
+ }
+ ]
},
{
path: '/dynamicConfig',
name: 'dynamicConfig',
- component: () => import('../views/traffic/dynamicConfig/index.vue'),
- meta: {}
+ redirect: 'index',
+ component: LayoutTab,
+ meta: {
+ tab_parent: true
+ },
+ children: [
+ {
+ path: '/index',
+ name: 'dynamicConfigIndex',
+ component: () => import('../views/traffic/dynamicConfig/index.vue'),
+ meta: {
+ hidden: true
+ }
+ },
+ {
+ path: '/formview/:ruleName',
+ name: 'dynamicConfigDomain.formView',
+ component: () => import('../views/traffic/dynamicConfig/tabs/formView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:apm-trace'
+ }
+ },
+ {
+ path: '/yamlview/:ruleName',
+ name: 'dynamicConfigDomain.YAMLView',
+ component: () => import('../views/traffic/dynamicConfig/tabs/YAMLView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:app-console'
+ }
+ }
+ ]
},
{
path: '/meshRule',
@@ -302,12 +408,76 @@
{
path: '/virtualService',
name: 'virtualService',
- component: () => import('../views/traffic/virtualService/index.vue')
+ redirect: 'index',
+ component: LayoutTab,
+ meta: {
+ tab_parent: true
+ },
+ children: [
+ {
+ path: '/index',
+ name: 'virtualServiceIndex',
+ component: () => import('../views/traffic/virtualService/index.vue'),
+ meta: {
+ hidden: true
+ }
+ },
+ {
+ path: '/formview/:ruleName',
+ name: 'virtualServiceDomain.formView',
+ component: () => import('../views/traffic/virtualService/tabs/formView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:apm-trace'
+ }
+ },
+ {
+ path: '/yamlview/:ruleName',
+ name: 'virtualServiceDomain.YAMLView',
+ component: () => import('../views/traffic/virtualService/tabs/YAMLView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:app-console'
+ }
+ }
+ ]
},
{
path: '/destinationRule',
name: 'destinationRule',
- component: () => import('../views/traffic/destinationRule/index.vue')
+ redirect: 'index',
+ component: LayoutTab,
+ meta: {
+ tab_parent: true
+ },
+ children: [
+ {
+ path: '/index',
+ name: 'destinationRuleIndex',
+ component: () => import('../views/traffic/destinationRule/index.vue'),
+ meta: {
+ hidden: true
+ }
+ },
+ {
+ path: '/formview/:ruleName',
+ name: 'destinationRuleDomain.formView',
+ component: () => import('../views/traffic/destinationRule/tabs/formView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:apm-trace'
+ }
+ },
+ {
+ path: '/yamlview/:ruleName',
+ name: 'destinationRuleDomain.YAMLView',
+ component: () => import('../views/traffic/destinationRule/tabs/YAMLView.vue'),
+ meta: {
+ tab: true,
+ icon: 'oui:app-console'
+ }
+ }
+ ]
}
]
}
diff --git a/ui-vue3/src/utils/SearchUtil.ts b/ui-vue3/src/utils/SearchUtil.ts
index aeb39ec..e6f0fcb 100644
--- a/ui-vue3/src/utils/SearchUtil.ts
+++ b/ui-vue3/src/utils/SearchUtil.ts
@@ -41,6 +41,7 @@
]
searchApi: Function
result: any
+ handleResult?: Function
tableStyle: any
table: {
loading?: boolean
@@ -57,7 +58,8 @@
searchApi: any,
columns: TableColumnsType | any,
paged?: any | undefined,
- noPaged?: boolean
+ noPaged?: boolean,
+ handleResult?: Function
) {
this.params = query
this.noPaged = noPaged
@@ -72,16 +74,17 @@
this.paged = { ...this.paged, ...paged }
}
this.searchApi = searchApi
- this.onSearch()
+ handleResult && this.onSearch(handleResult)
}
- async onSearch() {
+ async onSearch(handleResult: Function) {
this.table.loading = true
setTimeout(() => {
this.table.loading = false
}, 5000)
- let res = (await this.searchApi(this.queryForm || {})).data
- this.result = res.data
+ const res = (await this.searchApi(this.queryForm || {})).data
+ this.result = handleResult ? handleResult(res.data) : res.data
+ console.log(this.result)
this.paged.total = res.total
this.table.loading = false
}
diff --git a/ui-vue3/src/views/resources/instances/index.vue b/ui-vue3/src/views/resources/instances/index.vue
index cf6e201..b4fdac8 100644
--- a/ui-vue3/src/views/resources/instances/index.vue
+++ b/ui-vue3/src/views/resources/instances/index.vue
@@ -23,31 +23,40 @@
</template>
<template v-if="column.dataIndex === 'deployCluster'">
- <a-tag color="success">
+ <a-tag color="grey">
{{ text }}
</a-tag>
</template>
+ <template v-if="column.dataIndex === 'deployState'">
+ <a-tag :color="INSTANCE_DEPLOY_COLOR[text.toUpperCase()]">{{ text }}</a-tag>
+ </template>
+
<template v-if="column.dataIndex === 'registerStates'">
- <a-typography-text type="success" v-for="t in text">{{ t.label }}</a-typography-text>
+ <a-tag :color="INSTANCE_REGISTER_COLOR[t.level.toUpperCase()]" v-for="t in text">
+ {{ t.label }}
+ </a-tag>
</template>
<template v-if="column.dataIndex === 'registerClusters'">
- <a-tag v-for="t in text" color="warning">
+ <a-tag v-for="t in text" color="grey">
{{ t }}
</a-tag>
</template>
<template v-if="column.dataIndex === 'labels'">
- <a-tag v-for="t in text" color="warning">
+ <a-tag v-for="t in text" color="grey">
{{ t }}
</a-tag>
</template>
- <template v-if="column.dataIndex === 'name'">
- <router-link :to="`detail/${record[column.key]}`">{{ text }}</router-link>
- </template>
+
<template v-if="column.dataIndex === 'ip'">
- <router-link :to="`detail/${record[column.key]}`">{{ text }}</router-link>
+ <span class="app-link" @click="router.replace(`detail/${record[column.key]}`)">
+ <b>
+ <Icon style="margin-bottom: -2px" icon="material-symbols:attach-file-rounded"></Icon>
+ {{ text }}
+ </b>
+ </span>
</template>
</template>
</search-table>
@@ -60,14 +69,19 @@
import SearchTable from '@/components/SearchTable.vue'
import { SearchDomain, sortString } from '@/utils/SearchUtil'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import { INSTANCE_DEPLOY_COLOR, INSTANCE_REGISTER_COLOR } from '@/base/constants'
+import router from '@/router'
+import { Icon } from '@iconify/vue'
+import { PRIMARY_COLOR } from '@/base/constants'
+let __null = PRIMARY_COLOR
let columns = [
{
title: 'instanceDomain.instanceIP',
key: 'ip',
dataIndex: 'ip',
sorter: (a: any, b: any) => sortString(a.ip, b.ip),
- width: 140
+ width: 200
},
{
title: 'instanceDomain.instanceName',
@@ -169,5 +183,15 @@
<style lang="less" scoped>
.search-table-container {
min-height: 60vh;
+
+ .app-link {
+ padding: 4px 10px 4px 4px;
+ border-radius: 4px;
+ color: v-bind('PRIMARY_COLOR');
+ &:hover {
+ cursor: pointer;
+ background: rgba(133, 131, 131, 0.13);
+ }
+ }
}
</style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/configuration.vue b/ui-vue3/src/views/resources/instances/tabs/configuration.vue
index 26e4c98..b590e61 100644
--- a/ui-vue3/src/views/resources/instances/tabs/configuration.vue
+++ b/ui-vue3/src/views/resources/instances/tabs/configuration.vue
@@ -16,105 +16,71 @@
-->
<template>
- <a-descriptions title="" layout="vertical" :column="2">
- <!-- execution log -->
- <a-descriptions-item :labelStyle="{ fontWeight: 'bold' }">
- <template v-slot:label>
- {{ $t('instanceDomain.executionLog') }}
- <a-tooltip placement="topLeft">
- <template #title>
- {{ $t('instanceDomain.enableAppInstanceLogs') }}(provider.accesslog)
- </template>
- <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
- </a-tooltip>
+ <div class="__container_app_config">
+ <config-page :options="options">
+ <template v-slot:form_log="{ current }">
+ <a-form-item :label="$t('instanceDomain.operatorLog')" name="logFlag">
+ <a-switch v-model:checked="current.form.logFlag"></a-switch>
+ </a-form-item>
</template>
- <span :class="{ active: !state }" :style="{ color: 'black' }">
- {{ $t('instanceDomain.close') }}
- </span>
- <a-switch v-model:checked="state" :loading="loading" />
- <span :class="{ active: state }" :style="{ color: state ? PRIMARY_COLOR : 'black' }">
- {{ $t('instanceDomain.enable') }}
- </span>
- </a-descriptions-item>
-
- <!-- retry count -->
- <a-descriptions-item :labelStyle="{ fontWeight: 'bold' }">
- <template v-slot:label>
- {{ $t('instanceDomain.retryCount') }}
- <a-tooltip placement="topLeft">
- <template #title>{{ $t('instanceDomain.appServiceRetries') }}</template>
- <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
- </a-tooltip>
+ <template v-slot:form_flowDisabled="{ current }">
+ <a-form-item :label="$t('instanceDomain.flowDisabled')" name="flowDisabledFlag">
+ <a-switch v-model:checked="current.form.flowDisabledFlag"></a-switch>
+ </a-form-item>
</template>
- <a-typography-paragraph editable v-model:content="retryCount"> </a-typography-paragraph>
- </a-descriptions-item>
-
- <!-- Load Balance -->
- <a-descriptions-item :labelStyle="{ fontWeight: 'bold' }">
- <template v-slot:label>
- {{ $t('instanceDomain.loadBalance') }}
- <a-tooltip placement="topLeft">
- <template #title
- >{{ $t('instanceDomain.appServiceLoadBalance') }}(provider.loadbalance)</template
- >
- <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
- </a-tooltip>
- </template>
- <a-typography-paragraph editable v-model:content="loadBalance"> </a-typography-paragraph>
- </a-descriptions-item>
-
- <!-- timeout -->
- <a-descriptions-item :labelStyle="{ fontWeight: 'bold' }">
- <template v-slot:label>
- {{ $t('instanceDomain.timeout_ms') }}
- <a-tooltip placement="topLeft">
- <template #title>
- {{ $t('instanceDomain.appServiceTimeout') }}(provider.timeout)
- </template>
- <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
- </a-tooltip>
- </template>
-
- <a-typography-paragraph editable v-model:content="timeout"> </a-typography-paragraph>
- </a-descriptions-item>
-
- <!-- Cluster approach -->
- <a-descriptions-item :labelStyle="{ fontWeight: 'bold' }">
- <template v-slot:label>
- {{ $t('instanceDomain.clusterApproach') }}
- <a-tooltip placement="topLeft">
- <template #title>{{ $t('instanceDomain.appServiceNegativeClusteringMethod') }}</template>
- <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
- </a-tooltip>
- </template>
-
- <a-typography-paragraph editable v-model:content="clusterApproach"> </a-typography-paragraph>
- </a-descriptions-item>
- </a-descriptions>
+ </config-page>
+ </div>
</template>
<script lang="ts" setup>
-import { ref, onMounted } from 'vue'
-import { Icon } from '@iconify/vue'
-import { PRIMARY_COLOR } from '@/base/constants'
-
-// 执行日志开关
-const state = ref('')
-const loading = ref(false)
-const loadBalance = ref('random')
-const clusterApproach = ref('failover')
-const retryCount = ref('2次')
-const timeout = ref('1000 ms')
+import { onMounted, reactive, ref } from 'vue'
+import ConfigPage from '@/components/ConfigPage.vue'
+let options: any = reactive({
+ list: [
+ {
+ title: 'instanceDomain.operatorLog',
+ key: 'log',
+ form: {
+ logFlag: false
+ },
+ submit: (form: {}) => {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ resolve(1)
+ }, 1000)
+ })
+ },
+ reset(form: any) {
+ form.logFlag = false
+ }
+ },
+ {
+ title: 'instanceDomain.flowDisabled',
+ form: {
+ flowDisabledFlag: false
+ },
+ key: 'flowDisabled',
+ submit: (form: {}) => {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ resolve(1)
+ }, 1000)
+ })
+ },
+ reset(form: any) {
+ form.logFlag = false
+ }
+ }
+ ],
+ current: [0]
+})
+onMounted(() => {
+ console.log(333)
+})
</script>
<style lang="less" scoped>
-.active {
- font-size: 13px;
- font-weight: bold;
-}
-
-.iconStyle {
- font-size: 17px;
+.__container_app_config {
}
</style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/details.vue b/ui-vue3/src/views/resources/instances/tabs/details.vue
index dbac10f..179ad36 100644
--- a/ui-vue3/src/views/resources/instances/tabs/details.vue
+++ b/ui-vue3/src/views/resources/instances/tabs/details.vue
@@ -18,161 +18,237 @@
<template>
<div class="__container_app_detail">
<a-flex>
- <a-descriptions title="" layout="vertical" :column="2">
- <!-- instanceName -->
- <a-descriptions-item
- :label="$t('instanceDomain.instanceName')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph copyable>
- {{ instanceName }}
- </a-typography-paragraph>
- </a-descriptions-item>
+ <a-card-grid>
+ <a-row :gutter="10">
+ <a-col :span="12">
+ <a-card class="_detail">
+ <a-descriptions class="description-column" :column="1">
+ <!-- instanceName -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.instanceName')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p @click="copyIt(instanceName)" class="description-item-content with-card">
+ {{ instanceName }}
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
- <!-- Creation time -->
- <a-descriptions-item
- :label="$t('instanceDomain.creationTime_k8s')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph> 20230/12/19 22:09:34 </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- Creation time -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.creationTime_k8s')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 20230/12/19 22:09:34</a-typography-paragraph>
+ </a-descriptions-item>
- <!-- deployState -->
- <a-descriptions-item
- :label="$t('instanceDomain.deployState')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph type="success"> Running </a-typography-paragraph>
- <a-typography-paragraph type="danger"> Stop </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- deployState -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.deployState')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph type="success"> Running</a-typography-paragraph>
+ <a-typography-paragraph type="danger"> Stop</a-typography-paragraph>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-card>
+ </a-col>
- <!-- Start time -->
- <a-descriptions-item
- :label="$t('instanceDomain.startTime_k8s')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph> 20230/12/19 22:09:34 </a-typography-paragraph>
- </a-descriptions-item>
+ <a-col :span="12">
+ <a-card class="_detail">
+ <a-descriptions class="description-column" :column="1">
+ <!-- Start time -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.startTime_k8s')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 20230/12/19 22:09:34</a-typography-paragraph>
+ </a-descriptions-item>
- <!-- registerStates -->
- <a-descriptions-item
- :label="$t('instanceDomain.registerStates')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph type="success"> Registed </a-typography-paragraph>
- <a-typography-paragraph type="danger"> UnRegisted </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- registerStates -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.registerStates')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph type="success"> Registed</a-typography-paragraph>
+ <a-typography-paragraph type="danger"> UnRegisted</a-typography-paragraph>
+ </a-descriptions-item>
- <!-- Register Time -->
- <a-descriptions-item
- :label="$t('instanceDomain.registerTime')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph> 20230/12/19 22:09:34 </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- Register Time -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.registerTime')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 20230/12/19 22:09:34</a-typography-paragraph>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-card>
+ </a-col>
+ </a-row>
- <!-- instanceIP -->
- <a-descriptions-item
- :label="$t('instanceDomain.instanceIP')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph copyable> 192.168.0.1 </a-typography-paragraph>
- </a-descriptions-item>
+ <a-card style="margin-top: 10px" class="_detail">
+ <a-descriptions class="description-column" :column="1">
+ <!-- instanceIP -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.instanceIP')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p @click="copyIt('192.168.0.1')" class="description-item-content with-card">
+ 192.168.0.1
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
- <!-- deploy cluster -->
- <a-descriptions-item
- :label="$t('instanceDomain.deployCluster')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph> sz-ali-zk-f8otyo4r </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- deploy cluster -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.deployCluster')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> sz-ali-zk-f8otyo4r</a-typography-paragraph>
+ </a-descriptions-item>
- <!-- Dubbo Port -->
- <a-descriptions-item
- :label="$t('instanceDomain.dubboPort')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph copyable> 2088 </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- Dubbo Port -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.dubboPort')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p @click="copyIt('2088')" class="description-item-content with-card">
+ 2088
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
- <!-- Register cluster -->
- <a-descriptions-item
- :label="$t('instanceDomain.registerCluster')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph> sz-ali-zk-f8otyo4r </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- Register cluster -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.registerCluster')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> sz-ali-zk-f8otyo4r</a-typography-paragraph>
+ </a-descriptions-item>
- <!-- whichApplication -->
- <a-descriptions-item
- :label="$t('instanceDomain.whichApplication')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-link @click="checkApplication()"> shop-b </a-typography-link>
- </a-descriptions-item>
+ <!-- whichApplication -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.whichApplication')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-link @click="checkApplication()"> shop-b</a-typography-link>
+ </a-descriptions-item>
- <!-- Node IP -->
- <a-descriptions-item
- :label="$t('instanceDomain.node')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph copyable> 30.33.0.1 </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- Node IP -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.node')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p @click="copyIt('30.33.0.1')" class="description-item-content with-card">
+ 30.33.0.1
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
- <!-- Owning workload(k8s) -->
- <a-descriptions-item
- :label="$t('instanceDomain.owningWorkload_k8s')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph> shop-user-base </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- Owning workload(k8s) -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.owningWorkload_k8s')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> shop-user-base</a-typography-paragraph>
+ </a-descriptions-item>
- <!-- image -->
- <a-descriptions-item
- :label="$t('instanceDomain.instanceImage_k8s')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-typography-paragraph copyable>
- apache/org.apahce.dubbo.samples.shop-user:v1
- </a-typography-paragraph>
- </a-descriptions-item>
+ <!-- image -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.instanceImage_k8s')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-card class="description-item-card">
+ <p
+ @click="copyIt(' apache/org.apahce.dubbo.samples.shop-user:v1')"
+ class="description-item-content with-card"
+ >
+ apache/org.apahce.dubbo.samples.shop-user:v1
+ <CopyOutlined />
+ </p>
+ </a-card>
+ </a-descriptions-item>
- <!-- instanceLabel -->
- <a-descriptions-item
- :label="$t('instanceDomain.instanceLabel')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-card class="description-item-card">
- <a-tag>app=shop-user</a-tag>
- <a-tag>version=v1</a-tag>
- <a-tag>region=shenzhen</a-tag>
- </a-card>
- </a-descriptions-item>
+ <!-- instanceLabel -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.instanceLabel')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-card class="description-item-card">
+ <a-tag>app=shop-user</a-tag>
+ <a-tag>version=v1</a-tag>
+ <a-tag>region=shenzhen</a-tag>
+ </a-card>
+ </a-descriptions-item>
- <!-- health examination -->
- <a-descriptions-item
- :label="$t('instanceDomain.healthExamination_k8s')"
- :labelStyle="{ fontWeight: 'bold' }"
- >
- <a-card class="description-item-card">
- <p class="white_space">启动探针(StartupProbe):关闭</p>
- <p class="white_space">就绪探针(ReadinessProbe):开启 类型: Http 端口:22222</p>
- <p class="white_space">存活探针(LivenessProbe):开启 类型: Http 端口:22222</p>
- </a-card>
- </a-descriptions-item>
- </a-descriptions>
+ <!-- health examination -->
+ <a-descriptions-item
+ :label="$t('instanceDomain.healthExamination_k8s')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-card class="description-item-card">
+ <p class="white_space">启动探针(StartupProbe):关闭</p>
+ <p class="white_space">就绪探针(ReadinessProbe):开启 类型: Http 端口:22222</p>
+ <p class="white_space">存活探针(LivenessProbe):开启 类型: Http 端口:22222</p>
+ </a-card>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-card>
+ </a-card-grid>
</a-flex>
</div>
</template>
<script lang="ts" setup>
-import { ref } from 'vue'
+import { type ComponentInternalInstance, getCurrentInstance, ref } from 'vue'
+import { CopyOutlined } from '@ant-design/icons-vue'
+import useClipboard from 'vue-clipboard3'
+import { message } from 'ant-design-vue'
+import { PRIMARY_COLOR, PRIMARY_COLOR_T } from '@/base/constants'
+
+const {
+ appContext: {
+ config: { globalProperties }
+ }
+} = <ComponentInternalInstance>getCurrentInstance()
+
+let __ = PRIMARY_COLOR
+let PRIMARY_COLOR_20 = PRIMARY_COLOR_T('20')
// instance name
const instanceName = ref('shop-user-base-7e33f1e')
// Click on the application name to view the application
const checkApplication = () => {}
+
+const toClipboard = useClipboard().toClipboard
+
+function copyIt(v: string) {
+ message.success(globalProperties.$t('messageDomain.success.copy'))
+ toClipboard(v)
+}
</script>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.__container_app_detail {
+ ._detail {
+ box-shadow: 8px 8px 4px rgba(162, 162, 162, 0.19);
+ }
+ .description-item-content {
+ &.no-card {
+ padding-left: 20px;
+ }
+ &.with-card:hover {
+ color: v-bind('PRIMARY_COLOR');
+ }
+ }
+ .description-item-card {
+ :deep(.ant-card-body) {
+ padding: 10px;
+ }
+ width: 80%;
+ margin-left: 20px;
+ border: 1px dashed rgba(162, 162, 162, 0.19);
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/monitor.vue b/ui-vue3/src/views/resources/instances/tabs/monitor.vue
index bd1abc2..66cd44a 100644
--- a/ui-vue3/src/views/resources/instances/tabs/monitor.vue
+++ b/ui-vue3/src/views/resources/instances/tabs/monitor.vue
@@ -16,11 +16,66 @@
-->
<template>
- <div>monitor todo</div>
+ <div class="__container_tabDemo3">
+ <div class="option">
+ <a-button class="btn" @click="refresh"> refresh </a-button>
+ <a-button class="btn" @click="newPageForGrafana"> grafana </a-button>
+ </div>
+ <a-spin class="spin" :spinning="!showIframe">
+ <div class="__container_iframe_container">
+ <iframe v-if="showIframe" id="grafanaIframe" :src="grafanaUrl" frameborder="0"></iframe>
+ </div>
+ </a-spin>
+ </div>
</template>
-<script lang="ts" setup>
-import { ref } from 'vue'
-</script>
+<script setup lang="ts">
+import { onMounted, ref } from 'vue'
+import { getInstanceMetricsInfo } from '@/api/service/instance'
-<style lang="less" scoped></style>
+let grafanaUrl = ref('')
+let showIframe = ref(true)
+onMounted(async () => {
+ let res = await getInstanceMetricsInfo({})
+ grafanaUrl.value = res.data
+})
+
+function refresh() {
+ showIframe.value = false
+ setTimeout(() => {
+ showIframe.value = true
+ }, 200)
+}
+
+function newPageForGrafana() {
+ window.open(grafanaUrl.value, '_blank')
+}
+</script>
+<style lang="less" scoped>
+.__container_tabDemo3 {
+ .option {
+ padding-left: 16px;
+ .btn {
+ margin-right: 10px;
+ }
+ }
+ :deep(.spin) {
+ margin-top: 30px;
+ }
+ .__container_iframe_container {
+ z-index: 1;
+ position: relative;
+ width: calc(100vw - 332px);
+ height: calc(100vh - 200px);
+ clip-path: inset(20px 10px);
+
+ #grafanaIframe {
+ z-index: 0;
+ top: -112px;
+ position: absolute;
+ width: calc(100vw - 332px);
+ height: calc(100vh - 200px);
+ }
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/resources/services/search.vue b/ui-vue3/src/views/resources/services/search.vue
index 73ef847..64db7ad 100644
--- a/ui-vue3/src/views/resources/services/search.vue
+++ b/ui-vue3/src/views/resources/services/search.vue
@@ -19,7 +19,23 @@
<search-table :search-domain="searchDomain">
<template #bodyCell="{ column, text }">
<template v-if="column.dataIndex === 'serviceName'">
- <a-button type="link" @click="viewDetail(text)">{{ text }}</a-button>
+ <span class="service-link" @click="viewDetail(text)">
+ <b>
+ <Icon style="margin-bottom: -2px" icon="material-symbols:attach-file-rounded"></Icon>
+ {{ text }}
+ </b>
+ </span>
+ </template>
+ <template v-else-if="column.dataIndex === 'versionGroupSelect'">
+ <a-select v-model:value="text.versionGroupValue" :bordered="false" style="width: 80%">
+ <a-select-option
+ v-for="(item, index) in text.versionGroupArr"
+ :value="item"
+ :key="index"
+ >
+ {{ item }}
+ </a-select-option>
+ </a-select>
</template>
</template>
</search-table>
@@ -33,69 +49,99 @@
import { SearchDomain } from '@/utils/SearchUtil'
import SearchTable from '@/components/SearchTable.vue'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import { PRIMARY_COLOR } from '@/base/constants'
+import { Icon } from '@iconify/vue'
+let __null = PRIMARY_COLOR
const router = useRouter()
const columns = [
{
- title: '服务',
+ title: 'service',
+ key: 'service',
dataIndex: 'serviceName',
- key: 'serviceName',
sorter: true,
width: '30%'
},
{
- title: '接口数',
- dataIndex: 'interfaceNum',
- key: 'interfaceNum',
- sorter: true,
- width: '10%'
+ title: 'versionGroup',
+ key: 'versionGroup',
+ dataIndex: 'versionGroupSelect',
+ width: '25%'
},
{
- title: '近 1min QPS',
- dataIndex: 'avgQPS',
+ title: 'avgQPS',
key: 'avgQPS',
+ dataIndex: 'avgQPS',
sorter: true,
width: '15%'
},
{
- title: '近 1min RT',
- dataIndex: 'avgRT',
+ title: 'avgRT',
key: 'avgRT',
+ dataIndex: 'avgRT',
sorter: true,
width: '15%'
},
{
- title: '近 1min 请求总量',
- dataIndex: 'requestTotal',
+ title: 'requestTotal',
key: 'requestTotal',
+ dataIndex: 'requestTotal',
sorter: true,
width: '15%'
}
]
+const handleResult = (result: any) => {
+ return result.map((service) => {
+ service.versionGroupSelect = {}
+ service.versionGroupSelect.versionGroupArr = service.versionGroup.map((item: any) => {
+ return (item.versionGroup =
+ (item.version ? 'version: ' + item.version + ', ' : '') +
+ (item.group ? 'group: ' + item.group : '') || '无')
+ })
+ service.versionGroupSelect.versionGroupValue = service.versionGroupSelect.versionGroupArr[0]
+ return service
+ })
+}
+
const searchDomain = reactive(
new SearchDomain(
[
{
- label: '服务名',
+ label: 'serviceName',
param: 'serviceName',
- placeholder: '请输入',
+ placeholder: 'typeAppName',
style: {
width: '200px'
}
}
],
searchService,
- columns
+ columns,
+ undefined,
+ undefined,
+ handleResult
)
)
-searchDomain.onSearch()
+searchDomain.onSearch(handleResult)
const viewDetail = (serviceName: string) => {
- router.push({ name: 'detail', params: { serviceName } })
+ router.push({ name: 'detail', params: { pathId: serviceName } })
}
provide(PROVIDE_INJECT_KEY.SEARCH_DOMAIN, searchDomain)
</script>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.__container_services_index {
+ .service-link {
+ padding: 4px 10px 4px 4px;
+ border-radius: 4px;
+ color: v-bind('PRIMARY_COLOR');
+ &:hover {
+ cursor: pointer;
+ background: rgba(133, 131, 131, 0.13);
+ }
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/resources/services/slots/ServiceTabHeaderSlot.vue b/ui-vue3/src/views/resources/services/slots/ServiceTabHeaderSlot.vue
new file mode 100644
index 0000000..2962a4e
--- /dev/null
+++ b/ui-vue3/src/views/resources/services/slots/ServiceTabHeaderSlot.vue
@@ -0,0 +1,46 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+<template>
+ <!-- example like blow-->
+ <div class="__container_ServiceTabHeaderSlot">
+ <span class="header-desc">{{ $t('serviceDomain.name') }}: {{ route.params?.pathId }}</span>
+ <!-- <a-select
+ v-model:value="versionGroupSelect.versionGroupValue"
+ :bordered="false"
+ style="width: 80%"
+ >
+ <a-select-option v-for="(item, index) in versionGroupSelect.versionGroupArr" :value="item" :key="index">
+ {{ item }}
+ </a-select-option>
+ </a-select> -->
+ </div>
+</template>
+
+<script setup lang="ts">
+import { inject } from 'vue'
+import { useRoute } from 'vue-router'
+import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+const route = useRoute()
+</script>
+<style lang="less" scoped>
+.__container_ServiceTabHeaderSlot {
+ .header-desc {
+ line-height: 30px;
+ vertical-align: center;
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/resources/services/tabs/debug.vue b/ui-vue3/src/views/resources/services/tabs/debug.vue
index 6e67003..796349f 100644
--- a/ui-vue3/src/views/resources/services/tabs/debug.vue
+++ b/ui-vue3/src/views/resources/services/tabs/debug.vue
@@ -19,20 +19,12 @@
<div class="tabs-title">方法列表</div>
<a-tabs v-model:activeKey="activeKey" tab-position="left" :tabBarStyle="{ width: '200px' }">
<a-tab-pane v-for="tabName in methodTabs" :key="tabName" :tab="`${tabName}`">
- <a-descriptions :column="4" layout="vertical">
- <a-descriptions-item label="接口" :span="2">
+ <a-descriptions :column="2" layout="vertical">
+ <a-descriptions-item label="接口">
<p class="description-item-content">
org.apache.dubbo.samples.UserService:getPermissions
</p>
</a-descriptions-item>
- <a-descriptions-item label="版本&分组">
- <a-select
- v-model:value="versionAndGroup"
- size="large"
- :options="versionAndGroupOptions"
- class="description-item-content"
- ></a-select>
- </a-descriptions-item>
<a-descriptions-item label="指定生产者">
<a-select
v-model:value="versionAndGroup"
@@ -41,16 +33,16 @@
class="description-item-content"
></a-select>
</a-descriptions-item>
- <a-descriptions-item label="入参类型" :span="2">
+ <a-descriptions-item label="入参类型">
<a-tree block-node :tree-data="enterParamType" class="description-item-content" />
</a-descriptions-item>
- <a-descriptions-item label="出参类型" :span="2">
+ <a-descriptions-item label="出参类型">
<a-tree block-node :tree-data="outputParamType" class="description-item-content" />
</a-descriptions-item>
- <a-descriptions-item label="请求" :span="2">
+ <a-descriptions-item label="请求">
<monaco-editor editorId="requestEditor" width="90%" height="300px" />
</a-descriptions-item>
- <a-descriptions-item label="响应" :span="2">
+ <a-descriptions-item label="响应">
<monaco-editor editorId="responseEditor" width="90%" height="300px" />
</a-descriptions-item>
</a-descriptions>
@@ -152,7 +144,7 @@
}
.description-item-content {
margin-left: 20px;
- width: 90%;
+ width: 80%;
}
}
</style>
diff --git a/ui-vue3/src/views/resources/services/tabs/detail.vue b/ui-vue3/src/views/resources/services/tabs/detail.vue
index 9420d9c..4c8452b 100644
--- a/ui-vue3/src/views/resources/services/tabs/detail.vue
+++ b/ui-vue3/src/views/resources/services/tabs/detail.vue
@@ -16,46 +16,55 @@
-->
<template>
<div class="__container_services_tabs_detail">
- <a-flex>
- <a-descriptions class="description-column" :column="1" layout="vertical">
- <a-descriptions-item label="服务名">
- <p class="description-item-content">{{ serviceDetail.serviceName }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="服务版本&分组">
- <div class="description-item-content">
- <a-tag color="cyan" v-for="item in serviceDetail.versionGroup" :key="item">{{
- item
- }}</a-tag>
- </div>
- </a-descriptions-item>
- <a-descriptions-item label="RPC协议">
- <p class="description-item-content">{{ serviceDetail.protocol }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="延迟注册时间">
- <p class="description-item-content">{{ serviceDetail.delay }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="超时时间">
- <p class="description-item-content">{{ serviceDetail.timeOut }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="重试次数">
- <p class="description-item-content">{{ serviceDetail.retry }}</p>
- </a-descriptions-item>
- </a-descriptions>
- <a-descriptions class="description-column" :column="1" layout="vertical">
- <a-descriptions-item label="请求总量(1min)">
- <p class="description-item-content">{{ serviceDetail.requestTotal }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="平均RT(1min)">
- <p class="description-item-content">{{ serviceDetail.avgRT }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="平均qps(1min)">
- <p class="description-item-content">{{ serviceDetail.avgQPS }}</p>
- </a-descriptions-item>
- <a-descriptions-item label="是否过时">
- <p class="description-item-content">{{ serviceDetail.obsolete }}</p>
- </a-descriptions-item>
- </a-descriptions>
- </a-flex>
+ <a-card-grid>
+ <a-card title="生产者详情">
+ <a-flex>
+ <a-descriptions class="description-column" :column="1" layout="vertical">
+ <a-descriptions-item label="超时时间">
+ <p class="description-item-content">{{ serviceDetail.timeOut }}</p>
+ </a-descriptions-item>
+ <a-descriptions-item label="重试次数">
+ <p class="description-item-content">{{ serviceDetail.retry }}</p>
+ </a-descriptions-item>
+ <a-descriptions-item label="是否过时">
+ <p class="description-item-content">{{ serviceDetail.obsolete }}</p>
+ </a-descriptions-item>
+ </a-descriptions>
+ <a-descriptions class="description-column" :column="1" layout="vertical">
+ <a-descriptions-item label="RPC协议">
+ <p class="description-item-content">{{ serviceDetail.protocol }}</p>
+ </a-descriptions-item>
+ <a-descriptions-item label="延迟注册时间">
+ <p class="description-item-content">{{ serviceDetail.delay }}</p>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-flex>
+ </a-card>
+ <a-card title="消费者详情" style="margin-top: 10px">
+ <a-flex>
+ <a-descriptions class="description-column" :column="1" layout="vertical">
+ <a-descriptions-item label="超时时间">
+ <p class="description-item-content">{{ serviceDetail.timeOut }}</p>
+ </a-descriptions-item>
+ <a-descriptions-item label="重试次数">
+ <p class="description-item-content">{{ serviceDetail.retry }}</p>
+ </a-descriptions-item>
+ <a-descriptions-item label="是否过时">
+ <p class="description-item-content">{{ serviceDetail.obsolete }}</p>
+ </a-descriptions-item>
+ </a-descriptions>
+ <a-descriptions class="description-column" :column="1" layout="vertical">
+ <a-descriptions-item label="RPC协议">
+ <p class="description-item-content">{{ serviceDetail.protocol }}</p>
+ </a-descriptions-item>
+ <a-descriptions-item label="延迟注册时间">
+ <p class="description-item-content">{{ serviceDetail.delay }}</p>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-flex>
+ </a-card>
+ </a-card-grid>
+ <a-flex> </a-flex>
</div>
</template>
diff --git a/ui-vue3/src/views/resources/services/tabs/distribution.vue b/ui-vue3/src/views/resources/services/tabs/distribution.vue
index 4b985a2..ef7a335 100644
--- a/ui-vue3/src/views/resources/services/tabs/distribution.vue
+++ b/ui-vue3/src/views/resources/services/tabs/distribution.vue
@@ -18,30 +18,17 @@
<div class="__container_services_tabs_distribution">
<a-flex vertical>
<a-flex class="service-filter">
- <a-flex>
- <div>
- <span>版本&分组:</span>
- <a-select
- v-model:value="versionAndGroup"
- :options="versionAndGroupOptions"
- class="service-filter-select"
- @change="debounceSearch"
- ></a-select>
- </div>
- <a-input-search
- v-model:value="searchValue"
- placeholder="搜索应用,ip,支持前缀搜索"
- class="service-filter-input"
- @search="debounceSearch"
- enter-button
- />
- </a-flex>
- <div>
- <a-radio-group v-model:value="type" button-style="solid" @click="debounceSearch">
- <a-radio-button value="producer">生产者</a-radio-button>
- <a-radio-button value="consumer">消费者</a-radio-button>
- </a-radio-group>
- </div>
+ <a-radio-group v-model:value="type" button-style="solid" @click="debounceSearch">
+ <a-radio-button value="producer">生产者</a-radio-button>
+ <a-radio-button value="consumer">消费者</a-radio-button>
+ </a-radio-group>
+ <a-input-search
+ v-model:value="searchValue"
+ placeholder="搜索应用,ip,支持前缀搜索"
+ class="service-filter-input"
+ @search="debounceSearch"
+ enter-button
+ />
</a-flex>
<a-table
:columns="tableColumns"
@@ -51,13 +38,18 @@
>
<template #bodyCell="{ column, text }">
<template v-if="column.dataIndex === 'applicationName'">
- <a-button type="link">{{ text }}</a-button>
+ <span class="app-link" @click="viewDetail(text)">
+ <b>
+ <Icon
+ style="margin-bottom: -2px"
+ icon="material-symbols:attach-file-rounded"
+ ></Icon>
+ {{ text }}
+ </b>
+ </span>
</template>
- <template v-if="column.dataIndex === 'instanceIP'">
- <a-flex justify="">
- <a-button v-for="ip in text.slice(0, 3)" :key="ip" type="link">{{ ip }}</a-button>
- <a-button v-if="text.length > 3" type="link">更多</a-button>
- </a-flex>
+ <template v-if="column.dataIndex === 'label'">
+ <a-tag :color="PRIMARY_COLOR">{{ text }}</a-tag>
</template>
</template>
</a-table>
@@ -70,7 +62,10 @@
import { ref, reactive, getCurrentInstance } from 'vue'
import { getServiceDistribution } from '@/api/service/service'
import { debounce } from 'lodash'
+import { PRIMARY_COLOR } from '@/base/constants'
+import { Icon } from '@iconify/vue'
+let __null = PRIMARY_COLOR
const {
appContext: {
config: { globalProperties }
@@ -103,19 +98,51 @@
{
title: '应用名',
dataIndex: 'applicationName',
- width: '25%',
- sorter: true
+ width: '20%',
+ customCell: (_, index) => {
+ if (index === 0) {
+ return { rowSpan: tableData.value.length }
+ } else {
+ return { rowSpan: 0 }
+ }
+ }
},
{
title: '实例数',
dataIndex: 'instanceNum',
- width: '25%',
- sorter: true
+ width: '15%',
+ customCell: (_, index) => {
+ if (index === 0) {
+ return { rowSpan: tableData.value.length }
+ } else {
+ return { rowSpan: 0 }
+ }
+ }
},
{
- title: '实例ip',
- dataIndex: 'instanceIP',
- width: '50%'
+ title: '实例名',
+ dataIndex: 'instanceName',
+ width: '15%'
+ },
+ {
+ title: 'RPC端口',
+ dataIndex: 'rpcPort',
+ width: '15%'
+ },
+ {
+ title: '超时时间',
+ dataIndex: 'timeout',
+ width: '10%'
+ },
+ {
+ title: '重试次数',
+ dataIndex: 'retryNum',
+ width: '10%'
+ },
+ {
+ title: '标签',
+ dataIndex: 'label',
+ width: '15%'
}
]
@@ -138,10 +165,10 @@
globalProperties.$t('searchDomain.unit')
}
</script>
+
<style lang="less" scoped>
.__container_services_tabs_distribution {
.service-filter {
- justify-content: space-between;
margin-bottom: 20px;
.service-filter-select {
margin-left: 10px;
@@ -152,5 +179,14 @@
width: 300px;
}
}
+ .app-link {
+ padding: 4px 10px 4px 4px;
+ border-radius: 4px;
+ color: v-bind('PRIMARY_COLOR');
+ &:hover {
+ cursor: pointer;
+ background: rgba(133, 131, 131, 0.13);
+ }
+ }
}
</style>
diff --git a/ui-vue3/src/views/resources/services/tabs/event.vue b/ui-vue3/src/views/resources/services/tabs/event.vue
index d9a86c0..11a5eaa 100644
--- a/ui-vue3/src/views/resources/services/tabs/event.vue
+++ b/ui-vue3/src/views/resources/services/tabs/event.vue
@@ -15,8 +15,52 @@
~ limitations under the License.
-->
<template>
- <div class="__container_services_tabs_event">事件todo</div>
+ <div class="__container_services_tabs_event">
+ <a-timeline class="timeline">
+ <a-timeline-item v-for="(item, index) in eventData" :key="index">
+ <a-tag class="time" :color="PRIMARY_COLOR">{{ item.time }}</a-tag>
+ <span class="description">{{ item.description }}</span>
+ </a-timeline-item>
+ </a-timeline>
+ </div>
</template>
-<script setup lang="ts"></script>
-<style lang="less" scoped></style>
+<script setup lang="ts">
+import { PRIMARY_COLOR } from '@/base/constants'
+
+let __null = PRIMARY_COLOR
+const eventData = [
+ {
+ time: '2022-01-01',
+ description: 'description'
+ },
+ {
+ time: '2022-01-02',
+ description: 'description'
+ },
+ {
+ time: '2022-01-03',
+ description: 'description'
+ },
+ {
+ time: '2022-01-04',
+ description: 'description'
+ },
+ {
+ time: '2022-01-05',
+ description: 'description'
+ }
+]
+</script>
+
+<style lang="less" scoped>
+.__container_services_tabs_event {
+ display: flex;
+ justify-content: center;
+ .timeline {
+ .description {
+ font-size: 16px;
+ }
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/resources/services/tabs/paramRoute.vue b/ui-vue3/src/views/resources/services/tabs/paramRoute.vue
new file mode 100644
index 0000000..6bcfce3
--- /dev/null
+++ b/ui-vue3/src/views/resources/services/tabs/paramRoute.vue
@@ -0,0 +1,198 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+<template>
+ <div class="__container_services_tabs_param_route">
+ <a-card :bordered="false" style="width: 1000px">
+ <template #title>
+ <a-flex justify="space-between">
+ <span>路由</span>
+ <a-flex class="handle-form">
+ <EditOutlined class="edit-icon" />
+ <DeleteOutlined class="edit-icon" />
+ </a-flex>
+ </a-flex>
+ </template>
+ <a-form :labelCol="{ span: 3 }">
+ <a-form-item label="选择方法">
+ <a-select v-model:value="method.value" style="width: 120px">
+ <a-select-option v-for="(item, index) in method.selectArr" :value="item" :key="index">
+ {{ item }}
+ </a-select-option>
+ </a-select>
+ </a-form-item>
+ <a-form-item label="指定方法参数">
+ <a-table
+ :columns="functionParamsColumn"
+ :data-source="props.paramRouteForm.functionParams"
+ :pagination="false"
+ >
+ <template #bodyCell="{ column, index: idx }">
+ <template v-if="column.dataIndex === 'param'">
+ <a-input v-model:value="functionParamsEdit[idx].param" />
+ </template>
+ <template v-if="column.dataIndex === 'relation'">
+ <a-input v-model:value="functionParamsEdit[idx].relation" />
+ </template>
+ <template v-if="column.dataIndex === 'value'">
+ <a-input v-model:value="functionParamsEdit[idx].value" />
+ </template>
+ <template v-if="column.dataIndex === 'handle'">
+ <a-flex justify="space-between">
+ <PlusOutlined
+ class="edit-icon"
+ @click="emit('addRow', 'functionParams', props.index, idx)"
+ />
+ <MinusOutlined
+ class="edit-icon"
+ @click="emit('deleteRow', 'functionParams', props.index, idx)"
+ />
+ </a-flex>
+ </template>
+ </template>
+ </a-table>
+ </a-form-item>
+ <a-form-item label="路由目的地">
+ <a-table
+ :columns="destinationColumn"
+ :data-source="props.paramRouteForm.destination"
+ :pagination="false"
+ >
+ <template #bodyCell="{ column, index: idx }">
+ <template v-if="column.dataIndex === 'label'">
+ <a-input v-model:value="destinationEdit[idx].label" />
+ </template>
+ <template v-if="column.dataIndex === 'relation'">
+ <a-input v-model:value="destinationEdit[idx].relation" />
+ </template>
+ <template v-if="column.dataIndex === 'value'">
+ <a-input v-model:value="destinationEdit[idx].value" />
+ </template>
+ <template v-if="column.dataIndex === 'weight'">
+ <a-input v-model:value="destinationEdit[idx].weight" />
+ </template>
+ <template v-if="column.dataIndex === 'handle'">
+ <a-flex justify="space-between">
+ <PlusOutlined
+ class="edit-icon"
+ @click="emit('addRow', 'destination', props.index, idx)"
+ />
+ <MinusOutlined
+ class="edit-icon"
+ @click="emit('deleteRow', 'destination', props.index, idx)"
+ />
+ </a-flex>
+ </template>
+ </template>
+ </a-table>
+ </a-form-item>
+ </a-form>
+ </a-card>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { EditOutlined, DeleteOutlined, PlusOutlined, MinusOutlined } from '@ant-design/icons-vue'
+import { ref } from 'vue'
+
+const props = defineProps<{
+ paramRouteForm: {
+ type: Object
+ default: {}
+ }
+ index: {
+ type: Number
+ }
+}>()
+
+console.log('props', props.paramRouteForm)
+
+const method = ref(JSON.parse(JSON.stringify(props.paramRouteForm.method)))
+const functionParamsEdit = ref(JSON.parse(JSON.stringify(props.paramRouteForm.functionParams)))
+const destinationEdit = ref(JSON.parse(JSON.stringify(props.paramRouteForm.destination)))
+
+const functionParamsColumn = [
+ {
+ title: '参数索引',
+ key: 'param',
+ dataIndex: 'param',
+ width: '30%'
+ },
+ {
+ title: '关系',
+ key: 'relation',
+ dataIndex: 'relation',
+ width: '30%'
+ },
+ {
+ title: '值',
+ key: 'value',
+ dataIndex: 'value',
+ width: '30%'
+ },
+ {
+ title: '操作',
+ key: 'handle',
+ dataIndex: 'handle',
+ width: '10%'
+ }
+]
+
+const destinationColumn = [
+ {
+ title: '标签',
+ key: 'label',
+ dataIndex: 'label',
+ width: '25%'
+ },
+ {
+ title: '关系',
+ key: 'relation',
+ dataIndex: 'relation',
+ width: '25%'
+ },
+ {
+ title: '值',
+ key: 'value',
+ dataIndex: 'value',
+ width: '25%'
+ },
+ {
+ title: '权重',
+ key: 'weight',
+ dataIndex: 'weight',
+ width: '15%'
+ },
+ {
+ title: '操作',
+ key: 'handle',
+ dataIndex: 'handle',
+ width: '10%'
+ }
+]
+</script>
+
+<style lang="less" scoped>
+.__container_services_tabs_param_route {
+ .handle-form {
+ width: 50px;
+ justify-content: space-between;
+ }
+ .edit-icon {
+ font-size: 18px;
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/resources/services/tabs/sceneConfig.vue b/ui-vue3/src/views/resources/services/tabs/sceneConfig.vue
new file mode 100644
index 0000000..2fc5d3e
--- /dev/null
+++ b/ui-vue3/src/views/resources/services/tabs/sceneConfig.vue
@@ -0,0 +1,146 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+<template>
+ <div class="__container_services_tabs_scene_config">
+ <a-tabs v-model:activeKey="activeKey" :tab-position="'left'" animated>
+ <a-tab-pane key="timeout" tab="超时时间">
+ <a-descriptions layout="vertical">
+ <a-descriptions-item label="超时时间">
+ <a-flex v-if="!editForm.timeout.isEdit">
+ <span class="item-content">1000ms</span>
+ <EditOutlined @click="showEdit('timeout')" class="item-icon" />
+ </a-flex>
+ <a-flex v-else align="center">
+ <a-input v-model:value="editForm.timeout.value" class="item-input" />
+ <span style="margin-left: 5px">ms</span>
+ <CheckOutlined @click="hideEdit('timeout')" class="item-icon" />
+ <CloseOutlined @click="hideEdit('timeout')" class="item-icon" />
+ </a-flex>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-tab-pane>
+ <a-tab-pane key="retryNum" tab="重试次数">
+ <a-descriptions layout="vertical">
+ <a-descriptions-item label="重试次数">
+ <a-flex v-if="!editForm.retryNum.isEdit">
+ <span class="item-content">1000次</span>
+ <EditOutlined @click="showEdit('retryNum')" class="item-icon" />
+ </a-flex>
+ <a-flex v-else align="center">
+ <a-input v-model:value="editForm.retryNum.value" class="item-input" />
+ <span style="margin-left: 5px">次</span>
+ <CheckOutlined @click="hideEdit('retryNum')" class="item-icon" />
+ <CloseOutlined @click="hideEdit('retryNum')" class="item-icon" />
+ </a-flex>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-tab-pane>
+ <a-tab-pane key="sameArea" tab="同区域优先">
+ <a-descriptions layout="vertical">
+ <a-descriptions-item label="同区域优先">
+ <a-radio-group v-model:value="editForm.sameArea.value" button-style="solid">
+ <a-radio-button value="close">关闭</a-radio-button>
+ <a-radio-button value="open">开启</a-radio-button>
+ </a-radio-group>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-tab-pane>
+ <a-tab-pane key="paramRoute" tab="参数路由">
+ <paramRoute
+ v-for="(item, index) in paramRouteForms"
+ :key="index"
+ :paramRouteForm="item"
+ :index="index"
+ @addRow="() => {}"
+ @deleteRow="() => {}"
+ />
+ <a-button type="primary" style="margin-top: 20px">增加路由</a-button>
+ </a-tab-pane>
+ </a-tabs>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive } from 'vue'
+import { EditOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons-vue'
+import paramRoute from './paramRoute.vue'
+
+const editForm = reactive({
+ timeout: {
+ isEdit: false,
+ value: ''
+ },
+ retryNum: {
+ isEdit: false,
+ value: ''
+ },
+ sameArea: {
+ value: 'close'
+ },
+ paramRoute: {
+ isEdit: false,
+ value: {}
+ }
+})
+
+const activeKey = ref('timeout')
+const showEdit = (param: string) => {
+ editForm[param].isEdit = true
+}
+const hideEdit = (param: string) => {
+ editForm[param].isEdit = false
+}
+
+const paramRouteForms = [
+ {
+ method: {
+ value: 'getUserInfo',
+ selectArr: ['getUserInfo', 'register', 'login']
+ },
+ functionParams: [
+ {
+ param: '',
+ relation: '',
+ value: ''
+ }
+ ],
+ destination: [
+ {
+ label: '',
+ relation: '',
+ value: '',
+ weight: ''
+ }
+ ]
+ }
+]
+</script>
+
+<style lang="less" scoped>
+.__container_services_tabs_scene_config {
+ .item-content {
+ margin-right: 20px;
+ }
+ .item-input {
+ width: 200px;
+ }
+ .item-icon {
+ margin-left: 15px;
+ font-size: 18px;
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/destinationRule/index.vue b/ui-vue3/src/views/traffic/destinationRule/index.vue
index 05b92be..dc1fb10 100644
--- a/ui-vue3/src/views/traffic/destinationRule/index.vue
+++ b/ui-vue3/src/views/traffic/destinationRule/index.vue
@@ -20,9 +20,11 @@
<template #customOperation>
<a-button type="primary">新增 Destination Rule</a-button>
</template>
- <template #bodyCell="{ text, column }">
+ <template #bodyCell="{ text, column, record }">
<template v-if="column.dataIndex === 'ruleName'">
- <a-button type="link">{{ text }}</a-button>
+ <a-button type="link" @click="router.replace(`formview/${record[column.key]}`)">{{
+ text
+ }}</a-button>
</template>
<template v-if="column.dataIndex === 'operation'">
<a-button type="link">查看</a-button>
@@ -47,6 +49,7 @@
import SearchTable from '@/components/SearchTable.vue'
import { SearchDomain, sortString } from '@/utils/SearchUtil'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import router from '@/router'
let columns = [
{
diff --git a/ui-vue3/src/views/traffic/destinationRule/tabs/YAMLView.vue b/ui-vue3/src/views/traffic/destinationRule/tabs/YAMLView.vue
new file mode 100644
index 0000000..785fa05
--- /dev/null
+++ b/ui-vue3/src/views/traffic/destinationRule/tabs/YAMLView.vue
@@ -0,0 +1,103 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-flex style="width: 100%">
+ <a-col :span="isDrawerOpened ? 24 - sliderSpan : 24" class="left">
+ <a-flex vertical align="end">
+ <a-button type="text" style="color: #0a90d5" @click="isDrawerOpened = !isDrawerOpened">
+ {{ $t('flowControlDomain.versionRecords') }}
+ <DoubleLeftOutlined v-if="!isDrawerOpened" />
+ <DoubleRightOutlined v-else />
+ </a-button>
+
+ <div class="editorBox">
+ <MonacoEditor
+ :modelValue="YAMLValue"
+ theme="vs-dark"
+ :height="500"
+ language="yaml"
+ :readonly="isReadonly"
+ />
+ </div>
+ </a-flex>
+ </a-col>
+
+ <a-col :span="isDrawerOpened ? sliderSpan : 0" class="right">
+ <a-card v-if="isDrawerOpened" class="sliderBox">
+ <a-card v-for="i in 2" :key="i">
+ <p>修改时间: 2024/3/20 15:20:31</p>
+ <p>版本号: xo842xqpx834</p>
+
+ <a-flex justify="flex-end">
+ <a-button type="text" style="color: #0a90d5">查看</a-button>
+ <a-button type="text" style="color: #0a90d5">回滚</a-button>
+ </a-flex>
+ </a-card>
+ </a-card>
+ </a-col>
+ </a-flex>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import MonacoEditor from '@/components/editor/MonacoEditor.vue'
+import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons-vue'
+import { computed, ref } from 'vue'
+
+const isReadonly = ref(true)
+
+const isDrawerOpened = ref(false)
+
+const sliderSpan = ref(8)
+
+const YAMLValue = ref(
+ 'configVersion: v3.0\n' +
+ 'force: true\n' +
+ 'enabled: true\n' +
+ 'key: shop-detail\n' +
+ 'tags:\n' +
+ ' - name: gray\n' +
+ ' match:\n' +
+ ' - key: env\n' +
+ ' value:\n' +
+ ' exact: gray'
+)
+</script>
+
+<style scoped lang="less">
+.editorBox {
+ border-radius: 0.3rem;
+ overflow: hidden;
+ width: 100%;
+}
+
+.sliderBox {
+ margin-left: 5px;
+ max-height: 530px;
+ overflow: auto;
+}
+
+&:deep(.left.ant-col) {
+ transition: all 0.5s ease;
+}
+
+&:deep(.right.ant-col) {
+ transition: all 0.5s ease;
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/destinationRule/tabs/formView.vue b/ui-vue3/src/views/traffic/destinationRule/tabs/formView.vue
new file mode 100644
index 0000000..83ad05b
--- /dev/null
+++ b/ui-vue3/src/views/traffic/destinationRule/tabs/formView.vue
@@ -0,0 +1,162 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-row>
+ <a-descriptions title="基础信息" />
+ <a-col :span="12">
+ <a-descriptions title="" layout="vertical" :column="1">
+ <a-descriptions-item label="规则名" :labelStyle="{ fontWeight: 'bold', width: '100px' }">
+ <p
+ @click="copyIt('shop-user/StandardRouter')"
+ class="description-item-content with-card"
+ >
+ shop-user/StandardRouter
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+ <a-descriptions-item
+ label="作用对象"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ shop-user
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-col>
+ <a-col :span="12">
+ <a-descriptions title="" layout="vertical" :column="1">
+ <a-descriptions-item
+ label="创建时间"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ 2024/2/19/ 11:38:21
+ </a-descriptions-item>
+ <a-descriptions-item
+ label="最近修改时间"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ 2024/3/20 15:20:31
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-col>
+ </a-row>
+
+ <a-row>
+ <a-descriptions title="流量策略" />
+ <a-col :span="12">
+ <a-descriptions title="" layout="vertical" :column="1">
+ <a-descriptions-item
+ label="负载均衡"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ 不指定
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-col>
+ </a-row>
+ </a-card>
+
+ <a-card>
+ <a-descriptions title="地址子集" />
+
+ <a-card title="地址子集【1】">
+ <a-space size="middle" direction="vertical">
+ <a-descriptions :column="1">
+ <a-descriptions-item
+ label="子集名称"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ v1-beijing
+ </a-descriptions-item>
+ </a-descriptions>
+
+ <a-descriptions :column="1">
+ <a-descriptions-item
+ label="标签匹配"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ <a-space>
+ <a-tag color="#2db7f5">version=v1</a-tag>
+ <a-tag color="#2db7f5">region=beijing</a-tag>
+ </a-space>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-space>
+ </a-card>
+
+ <a-card title="地址子集【2】">
+ <a-space size="middle" direction="vertical">
+ <a-descriptions :column="1">
+ <a-descriptions-item
+ label="子集名称"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ v1-beijing
+ </a-descriptions-item>
+ </a-descriptions>
+
+ <a-descriptions :column="1">
+ <a-descriptions-item
+ label="标签匹配"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ <a-space>
+ <a-tag color="#2db7f5">version=v1</a-tag>
+ <a-tag color="#2db7f5">region=beijing</a-tag>
+ </a-space>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-space>
+ </a-card>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import { CopyOutlined } from '@ant-design/icons-vue'
+import { type ComponentInternalInstance, getCurrentInstance } from 'vue'
+import { PRIMARY_COLOR, PRIMARY_COLOR_T } from '@/base/constants'
+import useClipboard from 'vue-clipboard3'
+import { message } from 'ant-design-vue'
+
+const {
+ appContext: {
+ config: { globalProperties }
+ }
+} = <ComponentInternalInstance>getCurrentInstance()
+
+let __ = PRIMARY_COLOR
+let PRIMARY_COLOR_20 = PRIMARY_COLOR_T('20')
+
+const toClipboard = useClipboard().toClipboard
+
+function copyIt(v: string) {
+ message.success(globalProperties.$t('messageDomain.success.copy'))
+ toClipboard(v)
+}
+</script>
+
+<style scoped lang="less">
+.description-item-content {
+ &.no-card {
+ padding-left: 20px;
+ }
+ &.with-card:hover {
+ color: v-bind('PRIMARY_COLOR');
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/dynamicConfig/index.vue b/ui-vue3/src/views/traffic/dynamicConfig/index.vue
index fbef790..31cfe98 100644
--- a/ui-vue3/src/views/traffic/dynamicConfig/index.vue
+++ b/ui-vue3/src/views/traffic/dynamicConfig/index.vue
@@ -21,9 +21,11 @@
<a-button type="primary">新增动态配置</a-button>
<a-button type="primary" style="margin-left: 10px">从模版创建</a-button>
</template>
- <template #bodyCell="{ text, column }">
+ <template #bodyCell="{ text, column, record }">
<template v-if="column.dataIndex === 'ruleName'">
- <a-button type="link">{{ text }}</a-button>
+ <a-button type="link" @click="router.replace(`formview/${record[column.key]}`)">{{
+ text
+ }}</a-button>
</template>
<template v-if="column.dataIndex === 'ruleGranularity'">
{{ text ? '服务' : '应用' }}
@@ -54,6 +56,7 @@
import SearchTable from '@/components/SearchTable.vue'
import { SearchDomain, sortString } from '@/utils/SearchUtil'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import router from '@/router'
let columns = [
{
diff --git a/ui-vue3/src/views/traffic/dynamicConfig/tabs/YAMLView.vue b/ui-vue3/src/views/traffic/dynamicConfig/tabs/YAMLView.vue
new file mode 100644
index 0000000..785fa05
--- /dev/null
+++ b/ui-vue3/src/views/traffic/dynamicConfig/tabs/YAMLView.vue
@@ -0,0 +1,103 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-flex style="width: 100%">
+ <a-col :span="isDrawerOpened ? 24 - sliderSpan : 24" class="left">
+ <a-flex vertical align="end">
+ <a-button type="text" style="color: #0a90d5" @click="isDrawerOpened = !isDrawerOpened">
+ {{ $t('flowControlDomain.versionRecords') }}
+ <DoubleLeftOutlined v-if="!isDrawerOpened" />
+ <DoubleRightOutlined v-else />
+ </a-button>
+
+ <div class="editorBox">
+ <MonacoEditor
+ :modelValue="YAMLValue"
+ theme="vs-dark"
+ :height="500"
+ language="yaml"
+ :readonly="isReadonly"
+ />
+ </div>
+ </a-flex>
+ </a-col>
+
+ <a-col :span="isDrawerOpened ? sliderSpan : 0" class="right">
+ <a-card v-if="isDrawerOpened" class="sliderBox">
+ <a-card v-for="i in 2" :key="i">
+ <p>修改时间: 2024/3/20 15:20:31</p>
+ <p>版本号: xo842xqpx834</p>
+
+ <a-flex justify="flex-end">
+ <a-button type="text" style="color: #0a90d5">查看</a-button>
+ <a-button type="text" style="color: #0a90d5">回滚</a-button>
+ </a-flex>
+ </a-card>
+ </a-card>
+ </a-col>
+ </a-flex>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import MonacoEditor from '@/components/editor/MonacoEditor.vue'
+import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons-vue'
+import { computed, ref } from 'vue'
+
+const isReadonly = ref(true)
+
+const isDrawerOpened = ref(false)
+
+const sliderSpan = ref(8)
+
+const YAMLValue = ref(
+ 'configVersion: v3.0\n' +
+ 'force: true\n' +
+ 'enabled: true\n' +
+ 'key: shop-detail\n' +
+ 'tags:\n' +
+ ' - name: gray\n' +
+ ' match:\n' +
+ ' - key: env\n' +
+ ' value:\n' +
+ ' exact: gray'
+)
+</script>
+
+<style scoped lang="less">
+.editorBox {
+ border-radius: 0.3rem;
+ overflow: hidden;
+ width: 100%;
+}
+
+.sliderBox {
+ margin-left: 5px;
+ max-height: 530px;
+ overflow: auto;
+}
+
+&:deep(.left.ant-col) {
+ transition: all 0.5s ease;
+}
+
+&:deep(.right.ant-col) {
+ transition: all 0.5s ease;
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/dynamicConfig/tabs/formView.vue b/ui-vue3/src/views/traffic/dynamicConfig/tabs/formView.vue
new file mode 100644
index 0000000..77185b5
--- /dev/null
+++ b/ui-vue3/src/views/traffic/dynamicConfig/tabs/formView.vue
@@ -0,0 +1,146 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <div class="__container_app_detail">
+ <a-flex>
+ <a-card>
+ <a-descriptions :column="2" layout="vertical" title="">
+ <!-- ruleName -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.ruleName')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p
+ @click="copyIt('org.apache.dubbo.samples.UserService::.condition-router')"
+ class="description-item-content with-card"
+ >
+ org.apache.dubbo.samples.UserService::.condition-router
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+
+ <!-- ruleGranularity -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.ruleGranularity')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 服务 </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- actionObject -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.actionObject')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p
+ @click="copyIt('org.apache.dubbo.samples.UserService')"
+ class="description-item-content with-card"
+ >
+ org.apache.dubbo.samples.UserService
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+
+ <!-- timeOfTakingEffect -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.timeOfTakingEffect')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 20230/12/19 22:09:34</a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- enabledStatus -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.enabledStatus')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.enabled') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-card>
+ </a-flex>
+
+ <a-card title="配置【1】">
+ <a-space align="center" size="large">
+ <!-- enabledStatus-->
+ <a-typography-title :level="5">
+ {{ $t('flowControlDomain.enabledStatus') }}:
+ <a-typography-text>
+ {{ $t('flowControlDomain.enabled') }}
+ </a-typography-text>
+ </a-typography-title>
+ <!--endOfAction-->
+ <a-typography-title :level="5">
+ {{ $t('flowControlDomain.endOfAction') }}:
+ <a-typography-text>
+ {{ 'provider' }}
+ </a-typography-text>
+ </a-typography-title>
+ </a-space>
+ <a-space align="start" style="width: 100%">
+ <a-typography-title :level="5"
+ >{{ $t('flowControlDomain.actuatingRange') }}:</a-typography-title
+ >
+ <a-tag color="#2db7f5">address=10.255.10.11</a-tag>
+ </a-space>
+
+ <a-space align="start" style="width: 100%">
+ <a-typography-title :level="5"
+ >{{ $t('flowControlDomain.configurationItem') }}:</a-typography-title
+ >
+ <a-tag color="#87d068">retries=3</a-tag>
+ </a-space>
+ </a-card>
+ </div>
+</template>
+
+<script lang="ts" setup>
+import { type ComponentInternalInstance, getCurrentInstance } from 'vue'
+import { CopyOutlined } from '@ant-design/icons-vue'
+import { PRIMARY_COLOR } from '@/base/constants'
+import useClipboard from 'vue-clipboard3'
+import { message } from 'ant-design-vue'
+
+const {
+ appContext: {
+ config: { globalProperties }
+ }
+} = <ComponentInternalInstance>getCurrentInstance()
+
+let __ = PRIMARY_COLOR
+const toClipboard = useClipboard().toClipboard
+
+function copyIt(v: string) {
+ message.success(globalProperties.$t('messageDomain.success.copy'))
+ toClipboard(v)
+}
+</script>
+
+<style lang="less" scoped>
+.description-item-content {
+ &.no-card {
+ padding-left: 20px;
+ }
+
+ &.with-card:hover {
+ color: v-bind('PRIMARY_COLOR');
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/routingRule/index.vue b/ui-vue3/src/views/traffic/routingRule/index.vue
index 14e82ed..1942c0b 100644
--- a/ui-vue3/src/views/traffic/routingRule/index.vue
+++ b/ui-vue3/src/views/traffic/routingRule/index.vue
@@ -20,9 +20,11 @@
<template #customOperation>
<a-button type="primary">新增条件路由规则</a-button>
</template>
- <template #bodyCell="{ text, column }">
+ <template #bodyCell="{ text, column, record }">
<template v-if="column.dataIndex === 'ruleName'">
- <a-button type="link">{{ text }}</a-button>
+ <a-button type="link" @click="router.replace(`formview/${record[column.key]}`)">{{
+ text
+ }}</a-button>
</template>
<template v-if="column.dataIndex === 'ruleGranularity'">
{{ text ? '服务' : '应用' }}
@@ -53,6 +55,7 @@
import SearchTable from '@/components/SearchTable.vue'
import { SearchDomain, sortString } from '@/utils/SearchUtil'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import router from '@/router'
let columns = [
{
diff --git a/ui-vue3/src/views/traffic/routingRule/tabs/YAMLView.vue b/ui-vue3/src/views/traffic/routingRule/tabs/YAMLView.vue
new file mode 100644
index 0000000..785fa05
--- /dev/null
+++ b/ui-vue3/src/views/traffic/routingRule/tabs/YAMLView.vue
@@ -0,0 +1,103 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-flex style="width: 100%">
+ <a-col :span="isDrawerOpened ? 24 - sliderSpan : 24" class="left">
+ <a-flex vertical align="end">
+ <a-button type="text" style="color: #0a90d5" @click="isDrawerOpened = !isDrawerOpened">
+ {{ $t('flowControlDomain.versionRecords') }}
+ <DoubleLeftOutlined v-if="!isDrawerOpened" />
+ <DoubleRightOutlined v-else />
+ </a-button>
+
+ <div class="editorBox">
+ <MonacoEditor
+ :modelValue="YAMLValue"
+ theme="vs-dark"
+ :height="500"
+ language="yaml"
+ :readonly="isReadonly"
+ />
+ </div>
+ </a-flex>
+ </a-col>
+
+ <a-col :span="isDrawerOpened ? sliderSpan : 0" class="right">
+ <a-card v-if="isDrawerOpened" class="sliderBox">
+ <a-card v-for="i in 2" :key="i">
+ <p>修改时间: 2024/3/20 15:20:31</p>
+ <p>版本号: xo842xqpx834</p>
+
+ <a-flex justify="flex-end">
+ <a-button type="text" style="color: #0a90d5">查看</a-button>
+ <a-button type="text" style="color: #0a90d5">回滚</a-button>
+ </a-flex>
+ </a-card>
+ </a-card>
+ </a-col>
+ </a-flex>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import MonacoEditor from '@/components/editor/MonacoEditor.vue'
+import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons-vue'
+import { computed, ref } from 'vue'
+
+const isReadonly = ref(true)
+
+const isDrawerOpened = ref(false)
+
+const sliderSpan = ref(8)
+
+const YAMLValue = ref(
+ 'configVersion: v3.0\n' +
+ 'force: true\n' +
+ 'enabled: true\n' +
+ 'key: shop-detail\n' +
+ 'tags:\n' +
+ ' - name: gray\n' +
+ ' match:\n' +
+ ' - key: env\n' +
+ ' value:\n' +
+ ' exact: gray'
+)
+</script>
+
+<style scoped lang="less">
+.editorBox {
+ border-radius: 0.3rem;
+ overflow: hidden;
+ width: 100%;
+}
+
+.sliderBox {
+ margin-left: 5px;
+ max-height: 530px;
+ overflow: auto;
+}
+
+&:deep(.left.ant-col) {
+ transition: all 0.5s ease;
+}
+
+&:deep(.right.ant-col) {
+ transition: all 0.5s ease;
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/routingRule/tabs/formView.vue b/ui-vue3/src/views/traffic/routingRule/tabs/formView.vue
new file mode 100644
index 0000000..e6ef312
--- /dev/null
+++ b/ui-vue3/src/views/traffic/routingRule/tabs/formView.vue
@@ -0,0 +1,165 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <div class="__container_app_detail">
+ <a-flex>
+ <a-card>
+ <a-descriptions :column="2" layout="vertical" title="">
+ <!-- ruleName -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.ruleName')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p
+ @click="copyIt('org.apache.dubbo.samples.UserService::.condition-router')"
+ class="description-item-content with-card"
+ >
+ org.apache.dubbo.samples.UserService::.condition-router
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+
+ <!-- ruleGranularity -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.ruleGranularity')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 服务 </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- actionObject -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.actionObject')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p
+ @click="copyIt('org.apache.dubbo.samples.UserService')"
+ class="description-item-content with-card"
+ >
+ org.apache.dubbo.samples.UserService
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+
+ <!-- timeOfTakingEffect -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.timeOfTakingEffect')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 20230/12/19 22:09:34</a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- faultTolerantProtection -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.faultTolerantProtection')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.opened') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- enabledStatus -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.enabledStatus')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.enabled') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- runTimeEffective -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.runTimeEffective')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.opened') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- priority -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.priority')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.notSet') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-card>
+ </a-flex>
+
+ <a-card title="路由【1】">
+ <a-space align="start" style="width: 100%">
+ <a-typography-title :level="5"
+ >{{ $t('flowControlDomain.requestParameterMatching') }}:</a-typography-title
+ >
+
+ <a-space align="center" direction="horizontal" size="middle">
+ <a-tag color="#2db7f5">method=login</a-tag>
+ <a-tag color="#2db7f5">arguments[0]=dubbo</a-tag>
+ </a-space>
+ </a-space>
+
+ <a-space align="start" style="width: 100%">
+ <a-typography-title :level="5"
+ >{{ $t('flowControlDomain.addressSubsetMatching') }}:</a-typography-title
+ >
+ <a-tag color="#87d068">version=v1</a-tag>
+ </a-space>
+ </a-card>
+ </div>
+</template>
+
+<script lang="ts" setup>
+import { type ComponentInternalInstance, getCurrentInstance, ref } from 'vue'
+import { CopyOutlined } from '@ant-design/icons-vue'
+import useClipboard from 'vue-clipboard3'
+import { message } from 'ant-design-vue'
+import { PRIMARY_COLOR } from '@/base/constants'
+
+const {
+ appContext: {
+ config: { globalProperties }
+ }
+} = <ComponentInternalInstance>getCurrentInstance()
+
+let __ = PRIMARY_COLOR
+
+const toClipboard = useClipboard().toClipboard
+
+function copyIt(v: string) {
+ message.success(globalProperties.$t('messageDomain.success.copy'))
+ toClipboard(v)
+}
+</script>
+
+<style lang="less" scoped>
+.description-item-content {
+ &.no-card {
+ padding-left: 20px;
+ }
+
+ &.with-card:hover {
+ color: v-bind('PRIMARY_COLOR');
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/tagRule/index.vue b/ui-vue3/src/views/traffic/tagRule/index.vue
index d72618b..5532e04 100644
--- a/ui-vue3/src/views/traffic/tagRule/index.vue
+++ b/ui-vue3/src/views/traffic/tagRule/index.vue
@@ -20,9 +20,11 @@
<template #customOperation>
<a-button type="primary">新增标签路由规则</a-button>
</template>
- <template #bodyCell="{ text, column }">
+ <template #bodyCell="{ text, column, record }">
<template v-if="column.dataIndex === 'ruleName'">
- <a-button type="link">{{ text }}</a-button>
+ <a-button type="link" @click="router.replace(`formview/${record[column.key]}`)">{{
+ text
+ }}</a-button>
</template>
<template v-if="column.dataIndex === 'enable'">
{{ text ? '启用' : '禁用' }}
@@ -50,6 +52,7 @@
import SearchTable from '@/components/SearchTable.vue'
import { SearchDomain, sortString } from '@/utils/SearchUtil'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import router from '@/router'
let columns = [
{
diff --git a/ui-vue3/src/views/traffic/tagRule/tabs/YAMLView.vue b/ui-vue3/src/views/traffic/tagRule/tabs/YAMLView.vue
new file mode 100644
index 0000000..785fa05
--- /dev/null
+++ b/ui-vue3/src/views/traffic/tagRule/tabs/YAMLView.vue
@@ -0,0 +1,103 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-flex style="width: 100%">
+ <a-col :span="isDrawerOpened ? 24 - sliderSpan : 24" class="left">
+ <a-flex vertical align="end">
+ <a-button type="text" style="color: #0a90d5" @click="isDrawerOpened = !isDrawerOpened">
+ {{ $t('flowControlDomain.versionRecords') }}
+ <DoubleLeftOutlined v-if="!isDrawerOpened" />
+ <DoubleRightOutlined v-else />
+ </a-button>
+
+ <div class="editorBox">
+ <MonacoEditor
+ :modelValue="YAMLValue"
+ theme="vs-dark"
+ :height="500"
+ language="yaml"
+ :readonly="isReadonly"
+ />
+ </div>
+ </a-flex>
+ </a-col>
+
+ <a-col :span="isDrawerOpened ? sliderSpan : 0" class="right">
+ <a-card v-if="isDrawerOpened" class="sliderBox">
+ <a-card v-for="i in 2" :key="i">
+ <p>修改时间: 2024/3/20 15:20:31</p>
+ <p>版本号: xo842xqpx834</p>
+
+ <a-flex justify="flex-end">
+ <a-button type="text" style="color: #0a90d5">查看</a-button>
+ <a-button type="text" style="color: #0a90d5">回滚</a-button>
+ </a-flex>
+ </a-card>
+ </a-card>
+ </a-col>
+ </a-flex>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import MonacoEditor from '@/components/editor/MonacoEditor.vue'
+import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons-vue'
+import { computed, ref } from 'vue'
+
+const isReadonly = ref(true)
+
+const isDrawerOpened = ref(false)
+
+const sliderSpan = ref(8)
+
+const YAMLValue = ref(
+ 'configVersion: v3.0\n' +
+ 'force: true\n' +
+ 'enabled: true\n' +
+ 'key: shop-detail\n' +
+ 'tags:\n' +
+ ' - name: gray\n' +
+ ' match:\n' +
+ ' - key: env\n' +
+ ' value:\n' +
+ ' exact: gray'
+)
+</script>
+
+<style scoped lang="less">
+.editorBox {
+ border-radius: 0.3rem;
+ overflow: hidden;
+ width: 100%;
+}
+
+.sliderBox {
+ margin-left: 5px;
+ max-height: 530px;
+ overflow: auto;
+}
+
+&:deep(.left.ant-col) {
+ transition: all 0.5s ease;
+}
+
+&:deep(.right.ant-col) {
+ transition: all 0.5s ease;
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/tagRule/tabs/formView.vue b/ui-vue3/src/views/traffic/tagRule/tabs/formView.vue
new file mode 100644
index 0000000..618e2b7
--- /dev/null
+++ b/ui-vue3/src/views/traffic/tagRule/tabs/formView.vue
@@ -0,0 +1,156 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <div class="__container_app_detail">
+ <a-flex>
+ <a-card>
+ <a-descriptions :column="2" layout="vertical" title="">
+ <!-- ruleName -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.ruleName')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p
+ @click="copyIt('org.apache.dubbo.samples.UserService::.condition-router')"
+ class="description-item-content with-card"
+ >
+ org.apache.dubbo.samples.UserService::.condition-router
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+
+ <!-- ruleGranularity -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.ruleGranularity')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 服务 </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- actionObject -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.actionObject')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <p @click="copyIt('shop-user')" class="description-item-content with-card">
+ shop-user
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+
+ <!-- timeOfTakingEffect -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.timeOfTakingEffect')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph> 20230/12/19 22:09:34</a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- faultTolerantProtection -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.faultTolerantProtection')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.opened') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- enabledStatus -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.enabledStatus')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.enabled') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- runTimeEffective -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.runTimeEffective')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ $t('flowControlDomain.opened') }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+
+ <!-- priority -->
+ <a-descriptions-item
+ :label="$t('flowControlDomain.priority')"
+ :labelStyle="{ fontWeight: 'bold' }"
+ >
+ <a-typography-paragraph>
+ {{ '未设置' }}
+ </a-typography-paragraph>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-card>
+ </a-flex>
+
+ <a-card title="标签【1】">
+ <a-space align="center">
+ <a-typography-title :level="5">
+ {{ $t('flowControlDomain.labelName') }}:
+ <a-typography-text class="labelName">gray</a-typography-text>
+ </a-typography-title>
+ </a-space>
+ <a-space align="start" style="width: 100%">
+ <a-typography-title :level="5"
+ >{{ $t('flowControlDomain.actuatingRange') }}:</a-typography-title
+ >
+ <a-tag color="#2db7f5">version=v1</a-tag>
+ </a-space>
+ </a-card>
+ </div>
+</template>
+
+<script lang="ts" setup>
+import { CopyOutlined } from '@ant-design/icons-vue'
+import useClipboard from 'vue-clipboard3'
+import { message } from 'ant-design-vue'
+import { type ComponentInternalInstance, getCurrentInstance } from 'vue'
+import { PRIMARY_COLOR } from '@/base/constants'
+
+const {
+ appContext: {
+ config: { globalProperties }
+ }
+} = <ComponentInternalInstance>getCurrentInstance()
+
+let __ = PRIMARY_COLOR
+const toClipboard = useClipboard().toClipboard
+
+function copyIt(v: string) {
+ message.success(globalProperties.$t('messageDomain.success.copy'))
+ toClipboard(v)
+}
+</script>
+
+<style lang="less" scoped>
+.description-item-content {
+ &.no-card {
+ padding-left: 20px;
+ }
+
+ &.with-card:hover {
+ color: v-bind('PRIMARY_COLOR');
+ }
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/virtualService/index.vue b/ui-vue3/src/views/traffic/virtualService/index.vue
index 4e1f049..d75a4fc 100644
--- a/ui-vue3/src/views/traffic/virtualService/index.vue
+++ b/ui-vue3/src/views/traffic/virtualService/index.vue
@@ -20,9 +20,11 @@
<template #customOperation>
<a-button type="primary">新增路由规则</a-button>
</template>
- <template #bodyCell="{ text, column }">
+ <template #bodyCell="{ text, column, record }">
<template v-if="column.dataIndex === 'ruleName'">
- <a-button type="link">{{ text }}</a-button>
+ <a-button type="link" @click="router.replace(`formview/${record[column.key]}`)">{{
+ text
+ }}</a-button>
</template>
<template v-if="column.dataIndex === 'operation'">
<a-button type="link">查看</a-button>
@@ -47,6 +49,7 @@
import SearchTable from '@/components/SearchTable.vue'
import { SearchDomain, sortString } from '@/utils/SearchUtil'
import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+import router from '@/router'
let columns = [
{
diff --git a/ui-vue3/src/views/traffic/virtualService/tabs/YAMLView.vue b/ui-vue3/src/views/traffic/virtualService/tabs/YAMLView.vue
new file mode 100644
index 0000000..785fa05
--- /dev/null
+++ b/ui-vue3/src/views/traffic/virtualService/tabs/YAMLView.vue
@@ -0,0 +1,103 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-flex style="width: 100%">
+ <a-col :span="isDrawerOpened ? 24 - sliderSpan : 24" class="left">
+ <a-flex vertical align="end">
+ <a-button type="text" style="color: #0a90d5" @click="isDrawerOpened = !isDrawerOpened">
+ {{ $t('flowControlDomain.versionRecords') }}
+ <DoubleLeftOutlined v-if="!isDrawerOpened" />
+ <DoubleRightOutlined v-else />
+ </a-button>
+
+ <div class="editorBox">
+ <MonacoEditor
+ :modelValue="YAMLValue"
+ theme="vs-dark"
+ :height="500"
+ language="yaml"
+ :readonly="isReadonly"
+ />
+ </div>
+ </a-flex>
+ </a-col>
+
+ <a-col :span="isDrawerOpened ? sliderSpan : 0" class="right">
+ <a-card v-if="isDrawerOpened" class="sliderBox">
+ <a-card v-for="i in 2" :key="i">
+ <p>修改时间: 2024/3/20 15:20:31</p>
+ <p>版本号: xo842xqpx834</p>
+
+ <a-flex justify="flex-end">
+ <a-button type="text" style="color: #0a90d5">查看</a-button>
+ <a-button type="text" style="color: #0a90d5">回滚</a-button>
+ </a-flex>
+ </a-card>
+ </a-card>
+ </a-col>
+ </a-flex>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import MonacoEditor from '@/components/editor/MonacoEditor.vue'
+import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons-vue'
+import { computed, ref } from 'vue'
+
+const isReadonly = ref(true)
+
+const isDrawerOpened = ref(false)
+
+const sliderSpan = ref(8)
+
+const YAMLValue = ref(
+ 'configVersion: v3.0\n' +
+ 'force: true\n' +
+ 'enabled: true\n' +
+ 'key: shop-detail\n' +
+ 'tags:\n' +
+ ' - name: gray\n' +
+ ' match:\n' +
+ ' - key: env\n' +
+ ' value:\n' +
+ ' exact: gray'
+)
+</script>
+
+<style scoped lang="less">
+.editorBox {
+ border-radius: 0.3rem;
+ overflow: hidden;
+ width: 100%;
+}
+
+.sliderBox {
+ margin-left: 5px;
+ max-height: 530px;
+ overflow: auto;
+}
+
+&:deep(.left.ant-col) {
+ transition: all 0.5s ease;
+}
+
+&:deep(.right.ant-col) {
+ transition: all 0.5s ease;
+}
+</style>
diff --git a/ui-vue3/src/views/traffic/virtualService/tabs/formView.vue b/ui-vue3/src/views/traffic/virtualService/tabs/formView.vue
new file mode 100644
index 0000000..67b5644
--- /dev/null
+++ b/ui-vue3/src/views/traffic/virtualService/tabs/formView.vue
@@ -0,0 +1,178 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+
+<template>
+ <a-card>
+ <a-row>
+ <a-descriptions title="基础信息" />
+ <a-col :span="12">
+ <a-descriptions title="" layout="vertical" :column="1">
+ <a-descriptions-item label="规则名" :labelStyle="{ fontWeight: 'bold', width: '100px' }">
+ <p
+ @click="copyIt('shop-user/StandardRouter')"
+ class="description-item-content with-card"
+ >
+ shop-user/StandardRouter
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+ <a-descriptions-item
+ label="作用对象"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ <p @click="copyIt('shop-user')" class="description-item-content with-card">
+ shop-user
+ <CopyOutlined />
+ </p>
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-col>
+ <a-col :span="12">
+ <a-descriptions title="" layout="vertical" :column="1">
+ <a-descriptions-item
+ label="创建时间"
+ :labelStyle="{ fontWeight: 'bold', width: '100px' }"
+ >
+ 2024/2/19/ 11:38:21
+ </a-descriptions-item>
+ </a-descriptions>
+ </a-col>
+ </a-row>
+ </a-card>
+
+ <a-card>
+ <a-descriptions title="路由列表" />
+
+ <a-card title="路由【1】">
+ <a-space size="middle" direction="vertical">
+ <span>名称:未指定</span>
+ <a-space size="small">
+ <span>服务生效范围:</span>
+ <a-tooltip>
+ <template #title>服务精确匹配org.apache.dubbo.samples.UserService</template>
+ <a-space>
+ <a-space-compact direction="horizontal">
+ <a-button type="primary">service</a-button>
+ <a-button type="primary">exact</a-button>
+ <a-button type="primary">org.apache.dubbo.samples.UserService</a-button>
+ </a-space-compact>
+ </a-space>
+ </a-tooltip>
+ </a-space>
+ <a-space size="middle">
+ <span>路由:</span>
+ <a-card style="min-width: 400px">
+ <a-space direction="vertical" size="middle">
+ <a-space size="middle">
+ <span>名称</span>
+ <span>未指定</span>
+ </a-space>
+
+ <a-space size="middle" align="start">
+ <span>匹配条件</span>
+ <a-space size="middle" direction="vertical">
+ <a-space size="middle" v-for="i in 3">
+ {{ i + '.' }}
+ <a-tooltip>
+ <template #title>方法前缀匹配get</template>
+ <a-space>
+ <a-space-compact direction="horizontal">
+ <a-button type="primary">method</a-button>
+ <a-button type="primary">prefix</a-button>
+ <a-button type="primary">get</a-button>
+ </a-space-compact>
+ </a-space>
+ </a-tooltip>
+ <a-tooltip>
+ <template #title>参数范围匹配1-100</template>
+ <a-space>
+ <a-space-compact direction="horizontal">
+ <a-button type="primary">arg[1]</a-button>
+ <a-button type="primary">range</a-button>
+ <a-button type="primary"> 1-100</a-button>
+ </a-space-compact>
+ </a-space>
+ </a-tooltip>
+ </a-space>
+ </a-space>
+ </a-space>
+ <a-space size="middle">
+ <span>路由分发</span>
+ <a-tooltip>
+ <template #title>subset=-v1的地址子集赋予权重70</template>
+ <a-space>
+ <a-space>
+ <a-space-compact direction="horizontal">
+ <a-button type="primary">subset=v1</a-button>
+ <a-button type="primary">weight=70</a-button>
+ </a-space-compact>
+ </a-space>
+ </a-space>
+ </a-tooltip>
+ <a-tooltip>
+ <template #title>subset=-v2的地址子集赋予权重30</template>
+ <a-space>
+ <a-space-compact direction="horizontal">
+ <a-button type="primary">subset=v2</a-button>
+ <a-button type="primary">weight=30</a-button>
+ </a-space-compact>
+ </a-space>
+ </a-tooltip>
+ </a-space>
+ </a-space>
+ </a-card>
+ </a-space>
+ </a-space>
+ </a-card>
+ </a-card>
+</template>
+
+<script setup lang="ts">
+import { CopyOutlined } from '@ant-design/icons-vue'
+import useClipboard from 'vue-clipboard3'
+import { message } from 'ant-design-vue'
+import { type ComponentInternalInstance, getCurrentInstance } from 'vue'
+import { PRIMARY_COLOR, PRIMARY_COLOR_T } from '@/base/constants'
+
+const {
+ appContext: {
+ config: { globalProperties }
+ }
+} = <ComponentInternalInstance>getCurrentInstance()
+
+let __ = PRIMARY_COLOR
+let PRIMARY_COLOR_20 = PRIMARY_COLOR_T('20')
+
+const toClipboard = useClipboard().toClipboard
+
+function copyIt(v: string) {
+ message.success(globalProperties.$t('messageDomain.success.copy'))
+ toClipboard(v)
+}
+</script>
+
+<style scoped lang="less">
+.description-item-content {
+ &.no-card {
+ padding-left: 20px;
+ }
+
+ &.with-card:hover {
+ color: v-bind('PRIMARY_COLOR');
+ }
+}
+</style>