mirror of https://github.com/status-im/consul.git
mesh: make FailoverPolicy work in xdsv2 and ProxyStateTemplate (#18900)
Ensure that configuring a FailoverPolicy for a service that is reachable via a xRoute or a direct upstream causes an envoy aggregate cluster to be created for the original cluster name, but with separate clusters for each one of the possible destinations.
This commit is contained in:
parent
c8299522b5
commit
d574473fd1
|
@ -210,10 +210,9 @@ func (pr *ProxyResources) makeEnvoyPassthroughCluster(name string, protocol stri
|
|||
func (pr *ProxyResources) makeEnvoyAggregateCluster(name string, protocol string, fg *pbproxystate.FailoverGroup) ([]*envoy_cluster_v3.Cluster, error) {
|
||||
var clusters []*envoy_cluster_v3.Cluster
|
||||
if fg != nil {
|
||||
|
||||
var egNames []string
|
||||
for _, eg := range fg.EndpointGroups {
|
||||
cluster, err := pr.makeEnvoyCluster(name, protocol, eg)
|
||||
cluster, err := pr.makeEnvoyCluster(eg.Name, protocol, eg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -230,7 +229,6 @@ func (pr *ProxyResources) makeEnvoyAggregateCluster(name string, protocol string
|
|||
|
||||
c := &envoy_cluster_v3.Cluster{
|
||||
Name: name,
|
||||
AltStatName: name,
|
||||
ConnectTimeout: fg.Config.ConnectTimeout,
|
||||
LbPolicy: envoy_cluster_v3.Cluster_CLUSTER_PROVIDED,
|
||||
ClusterDiscoveryType: &envoy_cluster_v3.Cluster_ClusterType{
|
||||
|
@ -240,6 +238,9 @@ func (pr *ProxyResources) makeEnvoyAggregateCluster(name string, protocol string
|
|||
},
|
||||
},
|
||||
}
|
||||
if fg.Config.UseAltStatName {
|
||||
c.AltStatName = name
|
||||
}
|
||||
err = addHttpProtocolOptions(protocol, c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -174,13 +174,19 @@ func ValidateFailoverPolicy(res *pbresource.Resource) error {
|
|||
func validateFailoverConfig(config *pbcatalog.FailoverConfig, ported bool, wrapErr func(error) error) error {
|
||||
var merr error
|
||||
|
||||
if config.SamenessGroup != "" {
|
||||
// TODO(v2): handle other forms of failover
|
||||
merr = multierror.Append(merr, wrapErr(resource.ErrInvalidField{
|
||||
Name: "sameness_group",
|
||||
Wrapped: fmt.Errorf("not supported in this release"),
|
||||
}))
|
||||
}
|
||||
// TODO(peering/v2): remove this bypass when we know what to do with
|
||||
|
||||
if (len(config.Destinations) > 0) == (config.SamenessGroup != "") {
|
||||
merr = multierror.Append(merr, wrapErr(resource.ErrInvalidField{
|
||||
Name: "destinations",
|
||||
// Wrapped: fmt.Errorf("exactly one of destinations or sameness_group should be set"),
|
||||
Wrapped: fmt.Errorf("exactly one of destinations or sameness_group should be set: %v || %v",
|
||||
(len(config.Destinations) > 0), (config.SamenessGroup != ""),
|
||||
),
|
||||
Name: "destinations",
|
||||
Wrapped: fmt.Errorf("exactly one of destinations or sameness_group should be set"),
|
||||
}))
|
||||
}
|
||||
for i, dest := range config.Destinations {
|
||||
|
|
|
@ -233,7 +233,9 @@ func TestValidateFailoverPolicy(t *testing.T) {
|
|||
},
|
||||
SamenessGroup: "blah",
|
||||
},
|
||||
expectErr: `invalid "destinations" field: exactly one of destinations or sameness_group should be set`,
|
||||
// TODO(v2): uncomment after this is supported
|
||||
// expectErr: `invalid "destinations" field: exactly one of destinations or sameness_group should be set`,
|
||||
expectErr: `invalid "sameness_group" field: not supported in this release`,
|
||||
},
|
||||
"dest without sameness": {
|
||||
config: &pbcatalog.FailoverConfig{
|
||||
|
@ -246,6 +248,8 @@ func TestValidateFailoverPolicy(t *testing.T) {
|
|||
config: &pbcatalog.FailoverConfig{
|
||||
SamenessGroup: "blah",
|
||||
},
|
||||
// TODO(v2): remove after this is supported
|
||||
expectErr: `invalid "sameness_group" field: not supported in this release`,
|
||||
},
|
||||
"mode: invalid": {
|
||||
config: &pbcatalog.FailoverConfig{
|
||||
|
@ -597,9 +601,20 @@ func TestSimplifyFailoverPolicy(t *testing.T) {
|
|||
},
|
||||
PortConfigs: map[string]*pbcatalog.FailoverConfig{
|
||||
"rest": {
|
||||
Mode: pbcatalog.FailoverMode_FAILOVER_MODE_ORDER_BY_LOCALITY,
|
||||
Regions: []string{"us", "eu"},
|
||||
SamenessGroup: "sameweb",
|
||||
// TODO(v2): uncomment when this works
|
||||
// Mode: pbcatalog.FailoverMode_FAILOVER_MODE_ORDER_BY_LOCALITY,
|
||||
// Regions: []string{"us", "eu"},
|
||||
// SamenessGroup: "sameweb",
|
||||
Destinations: []*pbcatalog.FailoverDestination{
|
||||
{
|
||||
Ref: newRef(ServiceType, "api-backup"),
|
||||
Port: "rest",
|
||||
},
|
||||
{
|
||||
Ref: newRef(ServiceType, "api-double-backup"),
|
||||
Port: "rest",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}).
|
||||
|
@ -620,9 +635,20 @@ func TestSimplifyFailoverPolicy(t *testing.T) {
|
|||
},
|
||||
},
|
||||
"rest": {
|
||||
Mode: pbcatalog.FailoverMode_FAILOVER_MODE_ORDER_BY_LOCALITY,
|
||||
Regions: []string{"us", "eu"},
|
||||
SamenessGroup: "sameweb",
|
||||
// TODO(v2): uncomment when this works
|
||||
// Mode: pbcatalog.FailoverMode_FAILOVER_MODE_ORDER_BY_LOCALITY,
|
||||
// Regions: []string{"us", "eu"},
|
||||
// SamenessGroup: "sameweb",
|
||||
Destinations: []*pbcatalog.FailoverDestination{
|
||||
{
|
||||
Ref: newRef(ServiceType, "api-backup"),
|
||||
Port: "rest",
|
||||
},
|
||||
{
|
||||
Ref: newRef(ServiceType, "api-double-backup"),
|
||||
Port: "rest",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}).
|
||||
|
|
|
@ -27,11 +27,6 @@ func (c *ComputedRoutesCache) TrackComputedRoutes(computedRoutes *types.DecodedC
|
|||
for _, pcr := range computedRoutes.Data.PortedConfigs {
|
||||
for _, details := range pcr.Targets {
|
||||
serviceRefs = append(serviceRefs, details.BackendRef.Ref)
|
||||
if details.FailoverConfig != nil {
|
||||
for _, dest := range details.FailoverConfig.Destinations {
|
||||
serviceRefs = append(serviceRefs, dest.Ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -108,6 +108,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -176,6 +177,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -202,6 +204,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -228,6 +231,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "http2"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "http2", ""),
|
||||
},
|
||||
|
@ -249,6 +253,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -328,6 +333,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -356,6 +362,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -384,6 +391,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -412,6 +420,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http2"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http2", ""),
|
||||
},
|
||||
|
@ -515,6 +524,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -554,6 +564,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -594,6 +605,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -633,6 +645,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http2"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http2", ""),
|
||||
},
|
||||
|
@ -739,6 +752,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -767,6 +781,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -795,6 +810,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -823,6 +839,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http2"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http2", ""),
|
||||
},
|
||||
|
@ -894,6 +911,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -922,6 +940,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -950,6 +969,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -978,6 +998,7 @@ func (suite *controllerSuite) TestController() {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http2"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http2", ""),
|
||||
},
|
||||
|
|
|
@ -70,11 +70,13 @@ func compile(
|
|||
|
||||
var (
|
||||
inMesh = false
|
||||
parentMeshPort string
|
||||
allowedPortProtocols = make(map[string]pbcatalog.Protocol)
|
||||
)
|
||||
for _, port := range parentServiceDec.Data.Ports {
|
||||
if port.Protocol == pbcatalog.Protocol_PROTOCOL_MESH {
|
||||
inMesh = true
|
||||
parentMeshPort = port.TargetPort
|
||||
continue // skip
|
||||
}
|
||||
allowedPortProtocols[port.TargetPort] = port.Protocol
|
||||
|
@ -170,7 +172,7 @@ func compile(
|
|||
continue // not possible
|
||||
}
|
||||
|
||||
routeNode := createDefaultRouteNode(parentServiceRef, port, typ)
|
||||
routeNode := createDefaultRouteNode(parentServiceRef, parentMeshPort, port, typ)
|
||||
|
||||
routeNodesByPort[port] = append(routeNodesByPort[port], routeNode)
|
||||
}
|
||||
|
@ -272,37 +274,34 @@ func compile(
|
|||
|
||||
computedRoutes.PortedConfigs[port] = mc
|
||||
|
||||
// The first pass collects the failover policies and generates additional targets.
|
||||
for _, details := range mc.Targets {
|
||||
svcRef := details.BackendRef.Ref
|
||||
|
||||
svc := related.GetService(svcRef)
|
||||
failoverPolicy := related.GetFailoverPolicyForService(svcRef)
|
||||
destPolicy := related.GetDestinationPolicyForService(svcRef)
|
||||
|
||||
if svc == nil {
|
||||
panic("impossible at this point; should already have been handled before getting here")
|
||||
}
|
||||
|
||||
// Find the destination proxy's port.
|
||||
//
|
||||
// Endpoints refs will need to route to mesh port instead of the
|
||||
// destination port as that is the port of the destination's proxy.
|
||||
//
|
||||
// Note: we will always find a port here because we only add targets that have
|
||||
// mesh ports above in shouldRouteTrafficToBackend().
|
||||
for _, port := range svc.Data.Ports {
|
||||
if port.Protocol == pbcatalog.Protocol_PROTOCOL_MESH {
|
||||
details.MeshPort = port.TargetPort
|
||||
}
|
||||
}
|
||||
|
||||
failoverPolicy := related.GetFailoverPolicyForService(svcRef)
|
||||
if failoverPolicy != nil {
|
||||
simpleFailoverPolicy := catalog.SimplifyFailoverPolicy(svc.Data, failoverPolicy.Data)
|
||||
portFailoverConfig, ok := simpleFailoverPolicy.PortConfigs[details.BackendRef.Port]
|
||||
if ok {
|
||||
details.FailoverConfig = portFailoverConfig
|
||||
details.FailoverConfig = compileFailoverConfig(
|
||||
related,
|
||||
portFailoverConfig,
|
||||
mc.Targets,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Do a second pass to handle shared things after we've dumped the
|
||||
// failover legs into here.
|
||||
for _, details := range mc.Targets {
|
||||
svcRef := details.BackendRef.Ref
|
||||
destPolicy := related.GetDestinationPolicyForService(svcRef)
|
||||
if destPolicy != nil {
|
||||
portDestConfig, ok := destPolicy.Data.PortConfigs[details.BackendRef.Port]
|
||||
if ok {
|
||||
|
@ -329,6 +328,58 @@ func compile(
|
|||
}
|
||||
}
|
||||
|
||||
func compileFailoverConfig(
|
||||
related *loader.RelatedResources,
|
||||
failoverConfig *pbcatalog.FailoverConfig,
|
||||
targets map[string]*pbmesh.BackendTargetDetails,
|
||||
) *pbmesh.ComputedFailoverConfig {
|
||||
if failoverConfig == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
cfc := &pbmesh.ComputedFailoverConfig{
|
||||
Destinations: make([]*pbmesh.ComputedFailoverDestination, 0, len(failoverConfig.Destinations)),
|
||||
Mode: failoverConfig.Mode,
|
||||
Regions: failoverConfig.Regions,
|
||||
SamenessGroup: failoverConfig.SamenessGroup,
|
||||
}
|
||||
|
||||
for _, dest := range failoverConfig.Destinations {
|
||||
backendRef := &pbmesh.BackendReference{
|
||||
Ref: dest.Ref,
|
||||
Port: dest.Port,
|
||||
Datacenter: dest.Datacenter,
|
||||
}
|
||||
|
||||
destSvcRef := dest.Ref
|
||||
|
||||
svc := related.GetService(destSvcRef)
|
||||
|
||||
var backendTargetName string
|
||||
ok, meshPort := shouldRouteTrafficToBackend(svc, backendRef)
|
||||
if !ok {
|
||||
continue // skip this leg of failover for now
|
||||
}
|
||||
|
||||
destTargetName := types.BackendRefToComputedRoutesTarget(backendRef)
|
||||
|
||||
if _, exists := targets[destTargetName]; !exists {
|
||||
// Add to output as an indirect target.
|
||||
targets[destTargetName] = &pbmesh.BackendTargetDetails{
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_INDIRECT,
|
||||
BackendRef: backendRef,
|
||||
MeshPort: meshPort,
|
||||
}
|
||||
}
|
||||
backendTargetName = destTargetName
|
||||
|
||||
cfc.Destinations = append(cfc.Destinations, &pbmesh.ComputedFailoverDestination{
|
||||
BackendTarget: backendTargetName,
|
||||
})
|
||||
}
|
||||
return cfc
|
||||
}
|
||||
|
||||
func compileHTTPRouteNode(
|
||||
port string,
|
||||
res *pbresource.Resource,
|
||||
|
@ -376,9 +427,11 @@ func compileHTTPRouteNode(
|
|||
backendTarget string
|
||||
backendSvc = serviceGetter.GetService(backendRef.BackendRef.Ref)
|
||||
)
|
||||
if shouldRouteTrafficToBackend(backendSvc, backendRef.BackendRef) {
|
||||
if ok, meshPort := shouldRouteTrafficToBackend(backendSvc, backendRef.BackendRef); ok {
|
||||
details := &pbmesh.BackendTargetDetails{
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
BackendRef: backendRef.BackendRef,
|
||||
MeshPort: meshPort,
|
||||
}
|
||||
backendTarget = node.AddTarget(backendRef.BackendRef, details)
|
||||
} else {
|
||||
|
@ -437,9 +490,11 @@ func compileGRPCRouteNode(
|
|||
backendTarget string
|
||||
backendSvc = serviceGetter.GetService(backendRef.BackendRef.Ref)
|
||||
)
|
||||
if shouldRouteTrafficToBackend(backendSvc, backendRef.BackendRef) {
|
||||
if ok, meshPort := shouldRouteTrafficToBackend(backendSvc, backendRef.BackendRef); ok {
|
||||
details := &pbmesh.BackendTargetDetails{
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
BackendRef: backendRef.BackendRef,
|
||||
MeshPort: meshPort,
|
||||
}
|
||||
backendTarget = node.AddTarget(backendRef.BackendRef, details)
|
||||
} else {
|
||||
|
@ -490,9 +545,11 @@ func compileTCPRouteNode(
|
|||
backendTarget string
|
||||
backendSvc = serviceGetter.GetService(backendRef.BackendRef.Ref)
|
||||
)
|
||||
if shouldRouteTrafficToBackend(backendSvc, backendRef.BackendRef) {
|
||||
if ok, meshPort := shouldRouteTrafficToBackend(backendSvc, backendRef.BackendRef); ok {
|
||||
details := &pbmesh.BackendTargetDetails{
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
BackendRef: backendRef.BackendRef,
|
||||
MeshPort: meshPort,
|
||||
}
|
||||
backendTarget = node.AddTarget(backendRef.BackendRef, details)
|
||||
} else {
|
||||
|
@ -512,18 +569,20 @@ func compileTCPRouteNode(
|
|||
return node
|
||||
}
|
||||
|
||||
func shouldRouteTrafficToBackend(backendSvc *types.DecodedService, backendRef *pbmesh.BackendReference) bool {
|
||||
func shouldRouteTrafficToBackend(backendSvc *types.DecodedService, backendRef *pbmesh.BackendReference) (bool, string) {
|
||||
if backendSvc == nil {
|
||||
return false
|
||||
return false, ""
|
||||
}
|
||||
|
||||
var (
|
||||
found = false
|
||||
inMesh = false
|
||||
found = false
|
||||
inMesh = false
|
||||
meshPort string
|
||||
)
|
||||
for _, port := range backendSvc.Data.Ports {
|
||||
if port.Protocol == pbcatalog.Protocol_PROTOCOL_MESH {
|
||||
inMesh = true
|
||||
meshPort = port.TargetPort
|
||||
continue
|
||||
}
|
||||
if port.TargetPort == backendRef.Port {
|
||||
|
@ -531,11 +590,12 @@ func shouldRouteTrafficToBackend(backendSvc *types.DecodedService, backendRef *p
|
|||
}
|
||||
}
|
||||
|
||||
return inMesh && found
|
||||
return inMesh && found, meshPort
|
||||
}
|
||||
|
||||
func createDefaultRouteNode(
|
||||
parentServiceRef *pbresource.Reference,
|
||||
parentMeshPort string,
|
||||
port string,
|
||||
typ *pbresource.Type,
|
||||
) *inputRouteNode {
|
||||
|
@ -548,7 +608,9 @@ func createDefaultRouteNode(
|
|||
routeNode := newInputRouteNode(port)
|
||||
|
||||
defaultBackendTarget := routeNode.AddTarget(defaultBackendRef, &pbmesh.BackendTargetDetails{
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
BackendRef: defaultBackendRef,
|
||||
MeshPort: parentMeshPort,
|
||||
})
|
||||
switch {
|
||||
case resource.EqualType(types.HTTPRouteType, typ):
|
||||
|
|
|
@ -124,6 +124,11 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
ID()
|
||||
barServiceRef = resource.Reference(barServiceID, "")
|
||||
|
||||
deadServiceID = rtest.Resource(catalog.ServiceType, "dead").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
ID()
|
||||
deadServiceRef = resource.Reference(deadServiceID, "")
|
||||
)
|
||||
|
||||
t.Run("none", func(t *testing.T) {
|
||||
|
@ -213,6 +218,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -269,6 +275,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: protocol,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", protoName): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, protoName, ""),
|
||||
},
|
||||
|
@ -317,6 +324,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -418,6 +426,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "tcp"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "tcp", ""),
|
||||
},
|
||||
|
@ -446,6 +455,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -474,6 +484,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http2"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http2", ""),
|
||||
},
|
||||
|
@ -502,6 +513,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_GRPC,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "grpc"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "grpc", ""),
|
||||
},
|
||||
|
@ -583,6 +595,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: protocol,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", portName): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, portName, ""),
|
||||
},
|
||||
|
@ -683,6 +696,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -761,6 +775,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("api", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(apiServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -861,6 +876,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -1005,10 +1021,12 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
backendName("bar", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(barServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -1091,6 +1109,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
},
|
||||
|
@ -1439,6 +1458,7 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
DestinationConfig: portDestConfig,
|
||||
|
@ -1501,16 +1521,17 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
|
||||
failoverPolicy := &pbcatalog.FailoverPolicy{
|
||||
Config: &pbcatalog.FailoverConfig{
|
||||
Destinations: []*pbcatalog.FailoverDestination{{
|
||||
Ref: barServiceRef,
|
||||
}},
|
||||
Destinations: []*pbcatalog.FailoverDestination{
|
||||
{Ref: barServiceRef},
|
||||
{Ref: deadServiceRef}, // no service
|
||||
},
|
||||
},
|
||||
}
|
||||
portFailoverConfig := &pbcatalog.FailoverConfig{
|
||||
Destinations: []*pbcatalog.FailoverDestination{{
|
||||
Ref: barServiceRef,
|
||||
Port: "http",
|
||||
}},
|
||||
portFailoverConfig := &pbmesh.ComputedFailoverConfig{
|
||||
Destinations: []*pbmesh.ComputedFailoverDestination{
|
||||
{BackendTarget: backendName("bar", "http")},
|
||||
// we skip the dead route
|
||||
},
|
||||
}
|
||||
|
||||
related := loader.NewRelatedResources().
|
||||
|
@ -1551,10 +1572,16 @@ func TestGenerateComputedRoutes(t *testing.T) {
|
|||
Protocol: pbcatalog.Protocol_PROTOCOL_HTTP,
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
backendName("foo", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(fooServiceRef, "http", ""),
|
||||
FailoverConfig: portFailoverConfig,
|
||||
},
|
||||
backendName("bar", "http"): {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_INDIRECT,
|
||||
MeshPort: "mesh",
|
||||
BackendRef: newBackendRef(barServiceRef, "http", ""),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -238,26 +238,41 @@ func (l *loader) loadUpstreamService(
|
|||
}
|
||||
if failService != nil {
|
||||
l.out.AddService(failService)
|
||||
|
||||
if err := l.loadDestConfig(ctx, logger, failService.Resource.Id); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
l.mapper.UntrackFailoverPolicy(failoverPolicyID)
|
||||
}
|
||||
|
||||
destPolicyID := changeResourceType(svcID, types.DestinationPolicyType)
|
||||
destPolicy, err := l.mem.GetDestinationPolicy(ctx, destPolicyID)
|
||||
if err != nil {
|
||||
logger.Error("error retrieving the destination config", "destPolicyID", destPolicyID, "error", err)
|
||||
if err := l.loadDestConfig(ctx, logger, svcID); err != nil {
|
||||
return err
|
||||
}
|
||||
if destPolicy != nil {
|
||||
l.out.AddDestinationPolicy(destPolicy)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *loader) loadDestConfig(
|
||||
ctx context.Context,
|
||||
logger hclog.Logger,
|
||||
svcID *pbresource.ID,
|
||||
) error {
|
||||
destPolicyID := changeResourceType(svcID, types.DestinationPolicyType)
|
||||
destPolicy, err := l.mem.GetDestinationPolicy(ctx, destPolicyID)
|
||||
if err != nil {
|
||||
logger.Error("error retrieving the destination config", "destPolicyID", destPolicyID, "error", err)
|
||||
return err
|
||||
}
|
||||
if destPolicy != nil {
|
||||
l.out.AddDestinationPolicy(destPolicy)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *loader) gatherSingleXRouteAsInput(
|
||||
ctx context.Context,
|
||||
logger hclog.Logger,
|
||||
|
|
|
@ -354,6 +354,13 @@ func TestLoadResourcesForComputedRoutes(t *testing.T) {
|
|||
},
|
||||
},
|
||||
})
|
||||
adminDestPolicy := writeDestPolicy("admin", &pbmesh.DestinationPolicy{
|
||||
PortConfigs: map[string]*pbmesh.DestinationConfig{
|
||||
"http": {
|
||||
ConnectTimeout: durationpb.New(222 * time.Second),
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
testutil.RunStep(t, "add a dest policy", func(t *testing.T) {
|
||||
out, err := LoadResourcesForComputedRoutes(ctx, loggerFor, rt.Client, mapper, apiRoutesID)
|
||||
|
@ -367,6 +374,7 @@ func TestLoadResourcesForComputedRoutes(t *testing.T) {
|
|||
route2,
|
||||
barFailover,
|
||||
fooDestPolicy,
|
||||
adminDestPolicy, // adminDestPolicy shows up indirectly via a FailoverPolicy
|
||||
).AddComputedRoutesIDs(apiRoutesID), out)
|
||||
require.Equal(t, doubleMap(t,
|
||||
apiSvc, route2,
|
||||
|
|
|
@ -12,7 +12,6 @@ import (
|
|||
"github.com/hashicorp/consul/internal/mesh/internal/controllers/routes"
|
||||
"github.com/hashicorp/consul/internal/mesh/internal/controllers/routes/loader"
|
||||
"github.com/hashicorp/consul/internal/mesh/internal/types"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
rtest "github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
|
@ -41,29 +40,23 @@ func BuildComputedRoutes(
|
|||
return makeComputedRoutes(t, nil, id, decResList...)
|
||||
}
|
||||
|
||||
func MutateTarget(
|
||||
func MutateTargets(
|
||||
t *testing.T,
|
||||
portConfig *pbmesh.ComputedPortRoutes,
|
||||
ref resource.ReferenceOrID,
|
||||
port string,
|
||||
mutFn func(details *pbmesh.BackendTargetDetails),
|
||||
routes *pbmesh.ComputedRoutes,
|
||||
parentPort string,
|
||||
mutFn func(t *testing.T, details *pbmesh.BackendTargetDetails),
|
||||
) *pbmesh.ComputedPortRoutes {
|
||||
t.Helper()
|
||||
|
||||
backendRef := &pbmesh.BackendReference{
|
||||
Ref: resource.ReferenceFromReferenceOrID(ref),
|
||||
Port: port,
|
||||
Datacenter: "",
|
||||
}
|
||||
|
||||
key := types.BackendRefToComputedRoutesTarget(backendRef)
|
||||
portConfig, ok := routes.PortedConfigs[parentPort]
|
||||
require.True(t, ok, "port %q not found in ported_configs", parentPort)
|
||||
|
||||
portConfig = proto.Clone(portConfig).(*pbmesh.ComputedPortRoutes)
|
||||
|
||||
details, ok := portConfig.Targets[key]
|
||||
require.True(t, ok, "key %q not found in targets map", key)
|
||||
for _, details := range portConfig.Targets {
|
||||
mutFn(t, details)
|
||||
}
|
||||
|
||||
mutFn(details)
|
||||
return portConfig
|
||||
}
|
||||
|
||||
|
|
|
@ -60,9 +60,23 @@ func (b *Builder) Build() *pbmesh.ProxyStateTemplate {
|
|||
}
|
||||
b.proxyStateTemplate.ProxyState.TrafficPermissionDefaultAllow = b.defaultAllow
|
||||
|
||||
finalCleanupOfProxyStateTemplate(b.proxyStateTemplate)
|
||||
|
||||
return b.proxyStateTemplate
|
||||
}
|
||||
|
||||
func finalCleanupOfProxyStateTemplate(pst *pbmesh.ProxyStateTemplate) {
|
||||
if pst.ProxyState != nil {
|
||||
// Ensure all clusters have names by duplicating them from the map
|
||||
// if the above assembly code neglected any.
|
||||
for name, cluster := range pst.ProxyState.Clusters {
|
||||
if cluster.Name == "" && name != "" {
|
||||
cluster.Name = name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type ListenerBuilder struct {
|
||||
listener *pbproxystate.Listener
|
||||
builder *Builder
|
||||
|
|
|
@ -261,6 +261,15 @@ func (b *Builder) buildDestination(
|
|||
}
|
||||
|
||||
for _, details := range targets {
|
||||
// NOTE: we only emit clusters for DIRECT targets here. The others will
|
||||
// be folded into one or more aggregate clusters somehow.
|
||||
if details.Type != pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT {
|
||||
continue
|
||||
}
|
||||
|
||||
connectTimeout := durationpb.New(5 * time.Second)
|
||||
|
||||
// NOTE: we collect both DIRECT and INDIRECT target information here.
|
||||
dc := defaultDC(details.BackendRef.Datacenter)
|
||||
portName := details.BackendRef.Port
|
||||
|
||||
|
@ -271,8 +280,45 @@ func (b *Builder) buildDestination(
|
|||
)
|
||||
clusterName := fmt.Sprintf("%s.%s", portName, sni)
|
||||
|
||||
b.addCluster(clusterName, sni, portName, details.IdentityRefs)
|
||||
egBase := b.newClusterEndpointGroup("", sni, portName, details.IdentityRefs, connectTimeout)
|
||||
|
||||
var endpointGroups []*pbproxystate.EndpointGroup
|
||||
|
||||
// Original target is the first (or only) target.
|
||||
endpointGroups = append(endpointGroups, egBase)
|
||||
b.addEndpointsRef(clusterName, details.ServiceEndpointsId, details.MeshPort)
|
||||
|
||||
if details.FailoverConfig != nil {
|
||||
failover := details.FailoverConfig
|
||||
// TODO(v2): handle other forms of failover (regions/locality/etc)
|
||||
|
||||
for i, dest := range failover.Destinations {
|
||||
if dest.BackendTarget == types.NullRouteBackend {
|
||||
continue // not possible
|
||||
}
|
||||
destDetails, ok := targets[dest.BackendTarget]
|
||||
if !ok {
|
||||
continue // not possible
|
||||
}
|
||||
|
||||
destDC := defaultDC(destDetails.BackendRef.Datacenter)
|
||||
destPortName := destDetails.BackendRef.Port
|
||||
|
||||
destSNI := DestinationSNI(
|
||||
destDetails.BackendRef.Ref,
|
||||
destDC,
|
||||
b.trustDomain,
|
||||
)
|
||||
destClusterName := fmt.Sprintf("%s%d~%s", xdscommon.FailoverClusterNamePrefix, i, clusterName)
|
||||
|
||||
egDest := b.newClusterEndpointGroup(destClusterName, destSNI, destPortName, destDetails.IdentityRefs, connectTimeout)
|
||||
|
||||
endpointGroups = append(endpointGroups, egDest)
|
||||
b.addEndpointsRef(destClusterName, destDetails.ServiceEndpointsId, destDetails.MeshPort)
|
||||
}
|
||||
}
|
||||
|
||||
b.addCluster(clusterName, endpointGroups, connectTimeout)
|
||||
}
|
||||
|
||||
return b
|
||||
|
@ -482,7 +528,44 @@ func makeRouterMatchForIPAndPort(vips []string, virtualPort uint32) *pbproxystat
|
|||
}
|
||||
|
||||
// addCluster creates and adds a cluster to the proxyState based on the destination.
|
||||
func (b *Builder) addCluster(clusterName, sni, portName string, destinationIdentities []*pbresource.Reference) *Builder {
|
||||
func (b *Builder) addCluster(
|
||||
clusterName string,
|
||||
endpointGroups []*pbproxystate.EndpointGroup,
|
||||
connectTimeout *durationpb.Duration,
|
||||
) {
|
||||
cluster := &pbproxystate.Cluster{
|
||||
Name: clusterName,
|
||||
AltStatName: clusterName,
|
||||
}
|
||||
switch len(endpointGroups) {
|
||||
case 0:
|
||||
panic("no endpoint groups provided")
|
||||
case 1:
|
||||
cluster.Group = &pbproxystate.Cluster_EndpointGroup{
|
||||
EndpointGroup: endpointGroups[0],
|
||||
}
|
||||
default:
|
||||
cluster.Group = &pbproxystate.Cluster_FailoverGroup{
|
||||
FailoverGroup: &pbproxystate.FailoverGroup{
|
||||
EndpointGroups: endpointGroups,
|
||||
Config: &pbproxystate.FailoverGroupConfig{
|
||||
UseAltStatName: true,
|
||||
ConnectTimeout: connectTimeout,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
b.proxyStateTemplate.ProxyState.Clusters[cluster.Name] = cluster
|
||||
}
|
||||
|
||||
func (b *Builder) newClusterEndpointGroup(
|
||||
clusterName string,
|
||||
sni string,
|
||||
portName string,
|
||||
destinationIdentities []*pbresource.Reference,
|
||||
connectTimeout *durationpb.Duration,
|
||||
) *pbproxystate.EndpointGroup {
|
||||
var spiffeIDs []string
|
||||
for _, identity := range destinationIdentities {
|
||||
spiffeIDs = append(spiffeIDs, connect.SpiffeIDFromIdentityRef(b.trustDomain, identity))
|
||||
|
@ -492,39 +575,30 @@ func (b *Builder) addCluster(clusterName, sni, portName string, destinationIdent
|
|||
|
||||
// TODO(v2): if http2/grpc then set http2protocol options
|
||||
|
||||
// Create destination cluster.
|
||||
cluster := &pbproxystate.Cluster{
|
||||
Name: clusterName,
|
||||
AltStatName: clusterName,
|
||||
Group: &pbproxystate.Cluster_EndpointGroup{
|
||||
EndpointGroup: &pbproxystate.EndpointGroup{
|
||||
Group: &pbproxystate.EndpointGroup_Dynamic{
|
||||
Dynamic: &pbproxystate.DynamicEndpointGroup{
|
||||
Config: &pbproxystate.DynamicEndpointGroupConfig{
|
||||
DisablePanicThreshold: true,
|
||||
},
|
||||
OutboundTls: &pbproxystate.TransportSocket{
|
||||
ConnectionTls: &pbproxystate.TransportSocket_OutboundMesh{
|
||||
OutboundMesh: &pbproxystate.OutboundMeshMTLS{
|
||||
IdentityKey: b.proxyStateTemplate.ProxyState.Identity.Name,
|
||||
ValidationContext: &pbproxystate.MeshOutboundValidationContext{
|
||||
SpiffeIds: spiffeIDs,
|
||||
TrustBundlePeerNameKey: b.id.Tenancy.PeerName,
|
||||
},
|
||||
Sni: sni,
|
||||
},
|
||||
return &pbproxystate.EndpointGroup{
|
||||
Name: clusterName,
|
||||
Group: &pbproxystate.EndpointGroup_Dynamic{
|
||||
Dynamic: &pbproxystate.DynamicEndpointGroup{
|
||||
Config: &pbproxystate.DynamicEndpointGroupConfig{
|
||||
DisablePanicThreshold: true,
|
||||
ConnectTimeout: connectTimeout,
|
||||
},
|
||||
OutboundTls: &pbproxystate.TransportSocket{
|
||||
ConnectionTls: &pbproxystate.TransportSocket_OutboundMesh{
|
||||
OutboundMesh: &pbproxystate.OutboundMeshMTLS{
|
||||
IdentityKey: b.proxyStateTemplate.ProxyState.Identity.Name,
|
||||
ValidationContext: &pbproxystate.MeshOutboundValidationContext{
|
||||
SpiffeIds: spiffeIDs,
|
||||
TrustBundlePeerNameKey: b.id.Tenancy.PeerName,
|
||||
},
|
||||
AlpnProtocols: []string{getAlpnProtocolFromPortName(portName)},
|
||||
Sni: sni,
|
||||
},
|
||||
},
|
||||
AlpnProtocols: []string{getAlpnProtocolFromPortName(portName)},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
b.proxyStateTemplate.ProxyState.Clusters[cluster.Name] = cluster
|
||||
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *Builder) addRoute(listenerName string, route *pbproxystate.Route) {
|
||||
|
@ -534,12 +608,11 @@ func (b *Builder) addRoute(listenerName string, route *pbproxystate.Route) {
|
|||
// addEndpointsRef creates and add an endpointRef for each serviceEndpoint for a destination and
|
||||
// adds it to the proxyStateTemplate so it will be processed later during reconciliation by
|
||||
// the XDS controller.
|
||||
func (b *Builder) addEndpointsRef(clusterName string, serviceEndpointsID *pbresource.ID, destinationPort string) *Builder {
|
||||
func (b *Builder) addEndpointsRef(clusterName string, serviceEndpointsID *pbresource.ID, destinationPort string) {
|
||||
b.proxyStateTemplate.RequiredEndpoints[clusterName] = &pbproxystate.EndpointRef{
|
||||
Id: serviceEndpointsID,
|
||||
Port: destinationPort,
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func orDefault(v, def string) string {
|
||||
|
|
|
@ -143,15 +143,15 @@ func TestBuildMultiportImplicitDestinations(t *testing.T) {
|
|||
continue
|
||||
}
|
||||
|
||||
portConfig, ok := computedRoutes.Data.PortedConfigs[portName]
|
||||
require.True(t, ok, "port %q not found in port configs", portName)
|
||||
|
||||
dest := &intermediate.Destination{
|
||||
Service: svcDec,
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, portConfig, svc.Id, portName, func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = endpoints.Id
|
||||
details.ServiceEndpoints = seDec.Data
|
||||
details.IdentityRefs = identities
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, computedRoutes.Data, portName, func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(svc.Id, details.BackendRef.Ref) && details.BackendRef.Port == portName:
|
||||
details.ServiceEndpointsId = endpoints.Id
|
||||
details.ServiceEndpoints = seDec.Data
|
||||
details.IdentityRefs = identities
|
||||
}
|
||||
}),
|
||||
VirtualIPs: virtualIPs,
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ var (
|
|||
{Host: "10.0.0.1"},
|
||||
},
|
||||
Ports: map[string]*pbcatalog.WorkloadPort{
|
||||
"tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP},
|
||||
"tcp": {Port: 7070, Protocol: pbcatalog.Protocol_PROTOCOL_TCP},
|
||||
"http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP},
|
||||
"mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH},
|
||||
},
|
||||
|
@ -40,7 +40,7 @@ var (
|
|||
Ports: []*pbcatalog.ServicePort{
|
||||
{
|
||||
TargetPort: "tcp",
|
||||
VirtualPort: 8080,
|
||||
VirtualPort: 7070,
|
||||
Protocol: pbcatalog.Protocol_PROTOCOL_TCP,
|
||||
},
|
||||
{
|
||||
|
@ -58,6 +58,10 @@ var (
|
|||
)
|
||||
|
||||
func TestBuildExplicitDestinations(t *testing.T) {
|
||||
registry := resource.NewRegistry()
|
||||
types.Register(registry)
|
||||
catalog.RegisterTypes(registry)
|
||||
|
||||
api1Service := resourcetest.Resource(catalog.ServiceType, "api-1").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
WithData(t, serviceData).
|
||||
|
@ -73,6 +77,17 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
WithData(t, serviceData).
|
||||
Build()
|
||||
|
||||
backup1Service := resourcetest.Resource(catalog.ServiceType, "backup-1").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
WithData(t, serviceData).
|
||||
Build()
|
||||
|
||||
for _, res := range []*pbresource.Resource{
|
||||
api1Service, api2Service, api3Service, backup1Service,
|
||||
} {
|
||||
resourcetest.ValidateAndNormalize(t, registry, res)
|
||||
}
|
||||
|
||||
api1Endpoints := resourcetest.Resource(catalog.ServiceEndpointsType, "api-1").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
WithData(t, endpointsData).
|
||||
|
@ -83,6 +98,17 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
WithData(t, endpointsData).
|
||||
Build()
|
||||
|
||||
backup1Endpoints := resourcetest.Resource(catalog.ServiceEndpointsType, "backup-1").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
WithData(t, endpointsData).
|
||||
Build()
|
||||
|
||||
for _, res := range []*pbresource.Resource{
|
||||
api1Endpoints, api2Endpoints, backup1Endpoints,
|
||||
} {
|
||||
resourcetest.ValidateAndNormalize(t, registry, res)
|
||||
}
|
||||
|
||||
api1Identity := &pbresource.Reference{
|
||||
Name: "api1-identity",
|
||||
Tenancy: api1Endpoints.Id.Tenancy,
|
||||
|
@ -93,6 +119,11 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
Tenancy: api2Endpoints.Id.Tenancy,
|
||||
}
|
||||
|
||||
backup1Identity := &pbresource.Reference{
|
||||
Name: "backup1-identity",
|
||||
Tenancy: backup1Endpoints.Id.Tenancy,
|
||||
}
|
||||
|
||||
api1HTTPRoute := resourcetest.Resource(types.HTTPRouteType, "api-1-http-route").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
WithData(t, &pbmesh.HTTPRoute{
|
||||
|
@ -124,6 +155,22 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
}},
|
||||
}).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, api1HTTPRoute)
|
||||
|
||||
api1FailoverPolicy := resourcetest.Resource(catalog.FailoverPolicyType, "api-1").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
WithData(t, &pbcatalog.FailoverPolicy{
|
||||
PortConfigs: map[string]*pbcatalog.FailoverConfig{
|
||||
"http": {
|
||||
Destinations: []*pbcatalog.FailoverDestination{{
|
||||
Ref: resource.Reference(backup1Service.Id, ""),
|
||||
Port: "http",
|
||||
}},
|
||||
},
|
||||
},
|
||||
}).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, api1FailoverPolicy)
|
||||
|
||||
api1TCPRoute := resourcetest.Resource(types.TCPRouteType, "api-1-tcp-route").
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
|
@ -156,14 +203,17 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
}},
|
||||
}).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, api1TCPRoute)
|
||||
|
||||
api1ComputedRoutesID := resource.ReplaceType(types.ComputedRoutesType, api1Service.Id)
|
||||
api1ComputedRoutes := routestest.BuildComputedRoutes(t, api1ComputedRoutesID,
|
||||
resourcetest.MustDecode[*pbcatalog.Service](t, api1Service),
|
||||
resourcetest.MustDecode[*pbcatalog.Service](t, api2Service),
|
||||
resourcetest.MustDecode[*pbcatalog.Service](t, backup1Service),
|
||||
// notably we do NOT include api3Service here so we trigger a null route to be generated
|
||||
resourcetest.MustDecode[*pbmesh.HTTPRoute](t, api1HTTPRoute),
|
||||
resourcetest.MustDecode[*pbmesh.TCPRoute](t, api1TCPRoute),
|
||||
resourcetest.MustDecode[*pbcatalog.FailoverPolicy](t, api1FailoverPolicy),
|
||||
)
|
||||
require.NotNil(t, api1ComputedRoutes)
|
||||
|
||||
|
@ -183,10 +233,17 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, api1ComputedRoutes.Data.PortedConfigs["tcp"], api1Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
details.ServiceEndpointsId = api2Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api2Identity}
|
||||
}
|
||||
}),
|
||||
}
|
||||
|
||||
|
@ -200,10 +257,13 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, api2ComputedRoutes.Data.PortedConfigs["tcp"], api2Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = api2Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api2Identity}
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
details.ServiceEndpointsId = api2Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api2Identity}
|
||||
}
|
||||
}),
|
||||
}
|
||||
|
||||
|
@ -217,12 +277,24 @@ func TestBuildExplicitDestinations(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, api1ComputedRoutes.Data.PortedConfigs["http"], api1Service.Id, "http", func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "http", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http":
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http":
|
||||
details.ServiceEndpointsId = api2Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api2Identity}
|
||||
case resource.ReferenceOrIDMatch(backup1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http":
|
||||
details.ServiceEndpointsId = backup1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{backup1Identity}
|
||||
}
|
||||
}),
|
||||
}
|
||||
_ = backup1Identity
|
||||
|
||||
cases := map[string]struct {
|
||||
destinations []*intermediate.Destination
|
||||
|
@ -309,20 +381,26 @@ func TestBuildImplicitDestinations(t *testing.T) {
|
|||
|
||||
destination1 := &intermediate.Destination{
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, api1ComputedRoutes.Data.PortedConfigs["tcp"], api1Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
}
|
||||
}),
|
||||
VirtualIPs: []string{"1.1.1.1"},
|
||||
}
|
||||
|
||||
destination2 := &intermediate.Destination{
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, api2ComputedRoutes.Data.PortedConfigs["tcp"], api2Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = api2Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api2Identity}
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
details.ServiceEndpointsId = api2Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api2Identity}
|
||||
}
|
||||
}),
|
||||
VirtualIPs: []string{"2.2.2.2", "3.3.3.3"},
|
||||
}
|
||||
|
@ -337,10 +415,13 @@ func TestBuildImplicitDestinations(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(t, api1ComputedRoutes.Data.PortedConfigs["tcp"], api1Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
details.ServiceEndpointsId = api1Endpoints.Id
|
||||
details.ServiceEndpoints = endpointsData
|
||||
details.IdentityRefs = []*pbresource.Reference{api1Identity}
|
||||
}
|
||||
}),
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -32,6 +33,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -100,7 +102,7 @@
|
|||
"statPrefix": "upstream.tcp.api-2.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "2.2.2.2",
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -42,6 +43,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -32,6 +33,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -82,7 +84,7 @@
|
|||
"statPrefix": "upstream.tcp.api-1.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "1.1.1.1",
|
||||
|
@ -99,7 +101,7 @@
|
|||
"statPrefix": "upstream.tcp.api-2.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "2.2.2.2",
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -42,6 +43,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -52,6 +54,9 @@
|
|||
"identityKey": "test-identity",
|
||||
"sni": "api-2.default.dc1.internal.foo.consul",
|
||||
"validationContext": {
|
||||
"spiffeIds": [
|
||||
"spiffe://foo.consul/ap/default/ns/default/identity/api2-identity"
|
||||
],
|
||||
"trustBundlePeerNameKey": "local"
|
||||
}
|
||||
}
|
||||
|
@ -121,6 +126,19 @@
|
|||
"port": "mesh"
|
||||
},
|
||||
"tcp.api-2.default.dc1.internal.foo.consul": {
|
||||
"id": {
|
||||
"name": "api-2",
|
||||
"tenancy": {
|
||||
"namespace": "default",
|
||||
"partition": "default",
|
||||
"peerName": "local"
|
||||
},
|
||||
"type": {
|
||||
"group": "catalog",
|
||||
"groupVersion": "v1alpha1",
|
||||
"kind": "ServiceEndpoints"
|
||||
}
|
||||
},
|
||||
"port": "mesh"
|
||||
}
|
||||
},
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -56,7 +57,7 @@
|
|||
"statPrefix": "upstream.tcp.api-1.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "1.1.1.1",
|
||||
|
|
|
@ -3,27 +3,60 @@
|
|||
"clusters": {
|
||||
"http.api-1.default.dc1.internal.foo.consul": {
|
||||
"altStatName": "http.api-1.default.dc1.internal.foo.consul",
|
||||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
"alpnProtocols": [
|
||||
"consul~http"
|
||||
],
|
||||
"outboundMesh": {
|
||||
"identityKey": "test-identity",
|
||||
"sni": "api-1.default.dc1.internal.foo.consul",
|
||||
"validationContext": {
|
||||
"spiffeIds": [
|
||||
"spiffe://foo.consul/ap/default/ns/default/identity/api1-identity"
|
||||
"failoverGroup": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"useAltStatName": true
|
||||
},
|
||||
"endpointGroups": [
|
||||
{
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
"alpnProtocols": [
|
||||
"consul~http"
|
||||
],
|
||||
"trustBundlePeerNameKey": "local"
|
||||
"outboundMesh": {
|
||||
"identityKey": "test-identity",
|
||||
"sni": "api-1.default.dc1.internal.foo.consul",
|
||||
"validationContext": {
|
||||
"spiffeIds": [
|
||||
"spiffe://foo.consul/ap/default/ns/default/identity/api1-identity"
|
||||
],
|
||||
"trustBundlePeerNameKey": "local"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
"alpnProtocols": [
|
||||
"consul~http"
|
||||
],
|
||||
"outboundMesh": {
|
||||
"identityKey": "test-identity",
|
||||
"sni": "backup-1.default.dc1.internal.foo.consul",
|
||||
"validationContext": {
|
||||
"spiffeIds": [
|
||||
"spiffe://foo.consul/ap/default/ns/default/identity/backup1-identity"
|
||||
],
|
||||
"trustBundlePeerNameKey": "local"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "failover-target~0~http.api-1.default.dc1.internal.foo.consul"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": "http.api-1.default.dc1.internal.foo.consul"
|
||||
},
|
||||
|
@ -32,6 +65,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -42,6 +76,9 @@
|
|||
"identityKey": "test-identity",
|
||||
"sni": "api-2.default.dc1.internal.foo.consul",
|
||||
"validationContext": {
|
||||
"spiffeIds": [
|
||||
"spiffe://foo.consul/ap/default/ns/default/identity/api2-identity"
|
||||
],
|
||||
"trustBundlePeerNameKey": "local"
|
||||
}
|
||||
}
|
||||
|
@ -65,6 +102,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -91,6 +129,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -238,6 +277,22 @@
|
|||
}
|
||||
},
|
||||
"requiredEndpoints": {
|
||||
"failover-target~0~http.api-1.default.dc1.internal.foo.consul": {
|
||||
"id": {
|
||||
"name": "backup-1",
|
||||
"tenancy": {
|
||||
"namespace": "default",
|
||||
"partition": "default",
|
||||
"peerName": "local"
|
||||
},
|
||||
"type": {
|
||||
"group": "catalog",
|
||||
"groupVersion": "v1alpha1",
|
||||
"kind": "ServiceEndpoints"
|
||||
}
|
||||
},
|
||||
"port": "mesh"
|
||||
},
|
||||
"http.api-1.default.dc1.internal.foo.consul": {
|
||||
"id": {
|
||||
"name": "api-1",
|
||||
|
@ -255,6 +310,19 @@
|
|||
"port": "mesh"
|
||||
},
|
||||
"http.api-2.default.dc1.internal.foo.consul": {
|
||||
"id": {
|
||||
"name": "api-2",
|
||||
"tenancy": {
|
||||
"namespace": "default",
|
||||
"partition": "default",
|
||||
"peerName": "local"
|
||||
},
|
||||
"type": {
|
||||
"group": "catalog",
|
||||
"groupVersion": "v1alpha1",
|
||||
"kind": "ServiceEndpoints"
|
||||
}
|
||||
},
|
||||
"port": "mesh"
|
||||
},
|
||||
"tcp.api-1.default.dc1.internal.foo.consul": {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -32,6 +33,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -58,6 +60,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -84,6 +87,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -134,7 +138,7 @@
|
|||
"statPrefix": "upstream.tcp.api-app.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "1.1.1.1",
|
||||
|
@ -151,7 +155,7 @@
|
|||
"statPrefix": "upstream.tcp.api-app2.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "2.2.2.2",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -32,6 +33,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -82,7 +84,7 @@
|
|||
"statPrefix": "upstream.tcp.api-app.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "1.1.1.1",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -32,6 +33,7 @@
|
|||
"endpointGroup": {
|
||||
"dynamic": {
|
||||
"config": {
|
||||
"connectTimeout": "5s",
|
||||
"disablePanicThreshold": true
|
||||
},
|
||||
"outboundTls": {
|
||||
|
@ -82,7 +84,7 @@
|
|||
"statPrefix": "upstream.tcp.api-app.default.default.dc1"
|
||||
},
|
||||
"match": {
|
||||
"destinationPort": 8080,
|
||||
"destinationPort": 7070,
|
||||
"prefixRanges": [
|
||||
{
|
||||
"addressPrefix": "1.1.1.1",
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"local_app:port1": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:port1"
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"local_app:port1": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:port1"
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"local_app:port1": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:port1"
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
"local_app:admin-port": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:admin-port"
|
||||
},
|
||||
"local_app:api-port": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:api-port"
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
"local_app:admin-port": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:admin-port"
|
||||
},
|
||||
"local_app:api-port": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:api-port"
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
"local_app:admin-port": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:admin-port"
|
||||
},
|
||||
"local_app:api-port": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "local_app:api-port"
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"black-hole-cluster": {
|
||||
"endpointGroup": {
|
||||
"static": {}
|
||||
}
|
||||
},
|
||||
"name": "black-hole-cluster"
|
||||
}
|
||||
},
|
||||
"identity": {
|
||||
|
|
|
@ -227,6 +227,7 @@ func (f *Fetcher) FetchExplicitDestinationsData(
|
|||
continue // the cache is out of sync
|
||||
}
|
||||
|
||||
// NOTE: we collect both DIRECT and INDIRECT target information here.
|
||||
for _, routeTarget := range d.ComputedPortRoutes.Targets {
|
||||
targetServiceID := resource.IDFromReference(routeTarget.BackendRef.Ref)
|
||||
|
||||
|
@ -339,6 +340,8 @@ func (f *Fetcher) FetchImplicitDestinationsData(
|
|||
}
|
||||
|
||||
// Fetch the resources that may show up duplicated.
|
||||
//
|
||||
// NOTE: we collect both DIRECT and INDIRECT target information here.
|
||||
endpointsMap := make(map[resource.ReferenceKey]*types.DecodedServiceEndpoints)
|
||||
for _, portConfig := range computedRoutes.Data.PortedConfigs {
|
||||
for _, routeTarget := range portConfig.Targets {
|
||||
|
|
|
@ -781,14 +781,17 @@ func (suite *dataFetcherSuite) TestFetcher_FetchExplicitDestinationsData() {
|
|||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[0],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api1ComputedRoutes.Data.PortedConfigs["tcp"], suite.api1Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-1-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-1-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
@ -820,40 +823,49 @@ func (suite *dataFetcherSuite) TestFetcher_FetchExplicitDestinationsData() {
|
|||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[0],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api1ComputedRoutes.Data.PortedConfigs["tcp"], suite.api1Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-1-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-1-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[1],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api2ComputedRoutes.Data.PortedConfigs["tcp1"], suite.api2Service.Id, "tcp1", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api2Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp1", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp1":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api2Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[2],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api2ComputedRoutes.Data.PortedConfigs["tcp2"], suite.api2Service.Id, "tcp2", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api2Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api2Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
@ -937,53 +949,65 @@ func (suite *dataFetcherSuite) TestFetcher_FetchImplicitDestinationsData() {
|
|||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[0],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api1ComputedRoutes.Data.PortedConfigs["tcp"], suite.api1Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-1-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-1-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[1],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api2ComputedRoutes.Data.PortedConfigs["tcp1"], suite.api2Service.Id, "tcp1", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api2Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp1", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp1":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Explicit: suite.webDestinationsData.Upstreams[2],
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api2ComputedRoutes.Data.PortedConfigs["tcp2"], suite.api2Service.Id, "tcp2", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api2Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-2-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
// implicit
|
||||
Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), api3Service),
|
||||
ComputedPortRoutes: routestest.MutateTarget(suite.T(), api3ComputedRoutes.Data.PortedConfigs["tcp"], api3Service.Id, "tcp", func(details *pbmesh.BackendTargetDetails) {
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), api3ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-3-identity",
|
||||
Tenancy: api3Service.Id.Tenancy,
|
||||
}}
|
||||
ComputedPortRoutes: routestest.MutateTargets(suite.T(), api3ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) {
|
||||
switch {
|
||||
case resource.ReferenceOrIDMatch(api3Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp":
|
||||
se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), api3ServiceEndpoints)
|
||||
details.ServiceEndpointsId = se.Resource.Id
|
||||
details.ServiceEndpoints = se.Data
|
||||
details.IdentityRefs = []*pbresource.Reference{{
|
||||
Name: "api-3-identity",
|
||||
Tenancy: suite.api1Service.Id.Tenancy,
|
||||
}}
|
||||
}
|
||||
}),
|
||||
VirtualIPs: []string{"192.1.1.1"},
|
||||
},
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/go-multierror"
|
||||
|
@ -82,6 +83,34 @@ func ValidateComputedRoutes(res *pbresource.Resource) error {
|
|||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
|
||||
switch target.Type {
|
||||
case pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_UNSPECIFIED:
|
||||
merr = multierror.Append(merr, wrapTargetErr(
|
||||
resource.ErrInvalidField{
|
||||
Name: "type",
|
||||
Wrapped: resource.ErrMissing,
|
||||
}),
|
||||
)
|
||||
case pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT:
|
||||
case pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_INDIRECT:
|
||||
if target.FailoverConfig != nil {
|
||||
merr = multierror.Append(merr, wrapTargetErr(
|
||||
resource.ErrInvalidField{
|
||||
Name: "failover_config",
|
||||
Wrapped: errors.New("failover_config not supported for type = INDIRECT"),
|
||||
}),
|
||||
)
|
||||
}
|
||||
default:
|
||||
merr = multierror.Append(merr, wrapTargetErr(
|
||||
resource.ErrInvalidField{
|
||||
Name: "type",
|
||||
Wrapped: fmt.Errorf("not a supported enum value: %v", target.Type),
|
||||
},
|
||||
))
|
||||
}
|
||||
|
||||
if target.MeshPort == "" {
|
||||
merr = multierror.Append(merr, wrapTargetErr(resource.ErrInvalidField{
|
||||
Name: "mesh_port",
|
||||
|
|
|
@ -64,6 +64,7 @@ func TestValidateComputedRoutes(t *testing.T) {
|
|||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "",
|
||||
},
|
||||
},
|
||||
|
@ -72,6 +73,60 @@ func TestValidateComputedRoutes(t *testing.T) {
|
|||
},
|
||||
expectErr: `invalid value of key "http" within ported_configs: invalid value of key "foo" within targets: invalid "mesh_port" field: cannot be empty`,
|
||||
},
|
||||
"target/missing type": {
|
||||
routes: &pbmesh.ComputedRoutes{
|
||||
PortedConfigs: map[string]*pbmesh.ComputedPortRoutes{
|
||||
"http": {
|
||||
Config: &pbmesh.ComputedPortRoutes_Tcp{
|
||||
Tcp: &pbmesh.ComputedTCPRoute{},
|
||||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
MeshPort: "mesh",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectErr: `invalid value of key "http" within ported_configs: invalid value of key "foo" within targets: invalid "type" field: missing required field`,
|
||||
},
|
||||
"target/bad type": {
|
||||
routes: &pbmesh.ComputedRoutes{
|
||||
PortedConfigs: map[string]*pbmesh.ComputedPortRoutes{
|
||||
"http": {
|
||||
Config: &pbmesh.ComputedPortRoutes_Tcp{
|
||||
Tcp: &pbmesh.ComputedTCPRoute{},
|
||||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: 99,
|
||||
MeshPort: "mesh",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectErr: `invalid value of key "http" within ported_configs: invalid value of key "foo" within targets: invalid "type" field: not a supported enum value: 99`,
|
||||
},
|
||||
"target/indirect cannot have failover": {
|
||||
routes: &pbmesh.ComputedRoutes{
|
||||
PortedConfigs: map[string]*pbmesh.ComputedPortRoutes{
|
||||
"http": {
|
||||
Config: &pbmesh.ComputedPortRoutes_Tcp{
|
||||
Tcp: &pbmesh.ComputedTCPRoute{},
|
||||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_INDIRECT,
|
||||
MeshPort: "mesh",
|
||||
FailoverConfig: &pbmesh.ComputedFailoverConfig{},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectErr: `invalid value of key "http" within ported_configs: invalid value of key "foo" within targets: invalid "failover_config" field: failover_config not supported for type = INDIRECT`,
|
||||
},
|
||||
"target/should not have service endpoints id": {
|
||||
routes: &pbmesh.ComputedRoutes{
|
||||
PortedConfigs: map[string]*pbmesh.ComputedPortRoutes{
|
||||
|
@ -81,6 +136,7 @@ func TestValidateComputedRoutes(t *testing.T) {
|
|||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
ServiceEndpointsId: &pbresource.ID{},
|
||||
},
|
||||
|
@ -99,6 +155,7 @@ func TestValidateComputedRoutes(t *testing.T) {
|
|||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
ServiceEndpoints: &pbcatalog.ServiceEndpoints{},
|
||||
},
|
||||
|
@ -117,6 +174,7 @@ func TestValidateComputedRoutes(t *testing.T) {
|
|||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
IdentityRefs: []*pbresource.Reference{
|
||||
{},
|
||||
|
@ -137,6 +195,7 @@ func TestValidateComputedRoutes(t *testing.T) {
|
|||
},
|
||||
Targets: map[string]*pbmesh.BackendTargetDetails{
|
||||
"foo": {
|
||||
Type: pbmesh.BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT,
|
||||
MeshPort: "mesh",
|
||||
},
|
||||
},
|
||||
|
|
|
@ -124,6 +124,7 @@ func ValidateHTTPRoute(res *pbresource.Resource) error {
|
|||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
// enumcover:pbmesh.PathMatchType
|
||||
switch match.Path.Type {
|
||||
case pbmesh.PathMatchType_PATH_MATCH_TYPE_UNSPECIFIED:
|
||||
merr = multierror.Append(merr, wrapMatchPathErr(
|
||||
|
@ -150,6 +151,15 @@ func ValidateHTTPRoute(res *pbresource.Resource) error {
|
|||
},
|
||||
))
|
||||
}
|
||||
case pbmesh.PathMatchType_PATH_MATCH_TYPE_REGEX:
|
||||
if match.Path.Value == "" {
|
||||
merr = multierror.Append(merr, wrapMatchPathErr(
|
||||
resource.ErrInvalidField{
|
||||
Name: "value",
|
||||
Wrapped: resource.ErrEmpty,
|
||||
},
|
||||
))
|
||||
}
|
||||
default:
|
||||
merr = multierror.Append(merr, wrapMatchPathErr(
|
||||
resource.ErrInvalidField{
|
||||
|
@ -197,6 +207,7 @@ func ValidateHTTPRoute(res *pbresource.Resource) error {
|
|||
})
|
||||
}
|
||||
|
||||
// enumcover:pbmesh.QueryParamMatchType
|
||||
switch qm.Type {
|
||||
case pbmesh.QueryParamMatchType_QUERY_PARAM_MATCH_TYPE_UNSPECIFIED:
|
||||
merr = multierror.Append(merr, wrapMatchParamErr(
|
||||
|
|
|
@ -385,6 +385,43 @@ func TestValidateHTTPRoute(t *testing.T) {
|
|||
}},
|
||||
},
|
||||
},
|
||||
"regex empty path match is bad": {
|
||||
route: &pbmesh.HTTPRoute{
|
||||
ParentRefs: []*pbmesh.ParentReference{
|
||||
newParentRef(catalog.ServiceType, "web", ""),
|
||||
},
|
||||
Rules: []*pbmesh.HTTPRouteRule{{
|
||||
Matches: []*pbmesh.HTTPRouteMatch{{
|
||||
Path: &pbmesh.HTTPPathMatch{
|
||||
Type: pbmesh.PathMatchType_PATH_MATCH_TYPE_REGEX,
|
||||
Value: "",
|
||||
},
|
||||
}},
|
||||
BackendRefs: []*pbmesh.HTTPBackendRef{{
|
||||
BackendRef: newBackendRef(catalog.ServiceType, "api", ""),
|
||||
}},
|
||||
}},
|
||||
},
|
||||
expectErr: `invalid element at index 0 of list "rules": invalid element at index 0 of list "matches": invalid "path" field: invalid "value" field: cannot be empty`,
|
||||
},
|
||||
"regex path match is good": {
|
||||
route: &pbmesh.HTTPRoute{
|
||||
ParentRefs: []*pbmesh.ParentReference{
|
||||
newParentRef(catalog.ServiceType, "web", ""),
|
||||
},
|
||||
Rules: []*pbmesh.HTTPRouteRule{{
|
||||
Matches: []*pbmesh.HTTPRouteMatch{{
|
||||
Path: &pbmesh.HTTPPathMatch{
|
||||
Type: pbmesh.PathMatchType_PATH_MATCH_TYPE_REGEX,
|
||||
Value: "/[^/]+/healthz",
|
||||
},
|
||||
}},
|
||||
BackendRefs: []*pbmesh.HTTPBackendRef{{
|
||||
BackendRef: newBackendRef(catalog.ServiceType, "api", ""),
|
||||
}},
|
||||
}},
|
||||
},
|
||||
},
|
||||
"header match with no type is bad": {
|
||||
route: &pbmesh.HTTPRoute{
|
||||
ParentRefs: []*pbmesh.ParentReference{
|
||||
|
|
|
@ -4,9 +4,14 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/go-multierror"
|
||||
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
"github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1/pbproxystate"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
)
|
||||
|
||||
|
@ -29,7 +34,7 @@ func RegisterProxyStateTemplate(r resource.Registry) {
|
|||
Type: ProxyStateTemplateV1Alpha1Type,
|
||||
Proto: &pbmesh.ProxyStateTemplate{},
|
||||
Scope: resource.ScopeNamespace,
|
||||
Validate: nil,
|
||||
Validate: ValidateProxyStateTemplate,
|
||||
ACLs: &resource.ACLHooks{
|
||||
Read: func(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, id *pbresource.ID) error {
|
||||
// Check service:read and operator:read permissions.
|
||||
|
@ -61,3 +66,136 @@ func RegisterProxyStateTemplate(r resource.Registry) {
|
|||
},
|
||||
})
|
||||
}
|
||||
|
||||
func ValidateProxyStateTemplate(res *pbresource.Resource) error {
|
||||
// TODO(v2): validate a lot more of this
|
||||
|
||||
var pst pbmesh.ProxyStateTemplate
|
||||
|
||||
if err := res.Data.UnmarshalTo(&pst); err != nil {
|
||||
return resource.NewErrDataParse(&pst, err)
|
||||
}
|
||||
|
||||
var merr error
|
||||
|
||||
if pst.ProxyState != nil {
|
||||
wrapProxyStateErr := func(err error) error {
|
||||
return resource.ErrInvalidField{
|
||||
Name: "proxy_state",
|
||||
Wrapped: err,
|
||||
}
|
||||
}
|
||||
for name, cluster := range pst.ProxyState.Clusters {
|
||||
if name == "" {
|
||||
merr = multierror.Append(merr, wrapProxyStateErr(resource.ErrInvalidMapKey{
|
||||
Map: "clusters",
|
||||
Key: name,
|
||||
Wrapped: resource.ErrEmpty,
|
||||
}))
|
||||
continue
|
||||
}
|
||||
|
||||
wrapClusterErr := func(err error) error {
|
||||
return wrapProxyStateErr(resource.ErrInvalidMapValue{
|
||||
Map: "clusters",
|
||||
Key: name,
|
||||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
|
||||
if name != cluster.Name {
|
||||
merr = multierror.Append(merr, wrapClusterErr(resource.ErrInvalidField{
|
||||
Name: "name",
|
||||
Wrapped: fmt.Errorf("cluster name %q does not match map key %q", cluster.Name, name),
|
||||
}))
|
||||
}
|
||||
|
||||
wrapGroupErr := func(err error) error {
|
||||
return wrapClusterErr(resource.ErrInvalidField{
|
||||
Name: "group",
|
||||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
|
||||
if cluster.Group == nil {
|
||||
merr = multierror.Append(merr, wrapGroupErr(resource.ErrMissing))
|
||||
} else {
|
||||
switch x := cluster.Group.(type) {
|
||||
case *pbproxystate.Cluster_EndpointGroup:
|
||||
wrapInnerGroupErr := func(err error) error {
|
||||
return wrapGroupErr(resource.ErrInvalidField{
|
||||
Name: "endpoint_group",
|
||||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
|
||||
if x.EndpointGroup == nil {
|
||||
merr = multierror.Append(merr, wrapInnerGroupErr(resource.ErrMissing))
|
||||
continue
|
||||
}
|
||||
|
||||
// The inner name field is optional, but if specified it has to
|
||||
// match the enclosing cluster.
|
||||
|
||||
if x.EndpointGroup.Name != "" && x.EndpointGroup.Name != cluster.Name {
|
||||
merr = multierror.Append(merr, wrapInnerGroupErr(resource.ErrInvalidField{
|
||||
Name: "name",
|
||||
Wrapped: fmt.Errorf("optional but %q does not match enclosing cluster name %q",
|
||||
x.EndpointGroup.Name, cluster.Name),
|
||||
}))
|
||||
}
|
||||
|
||||
case *pbproxystate.Cluster_FailoverGroup:
|
||||
wrapInnerGroupErr := func(err error) error {
|
||||
return wrapGroupErr(resource.ErrInvalidField{
|
||||
Name: "failover_group",
|
||||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
|
||||
if x.FailoverGroup == nil {
|
||||
merr = multierror.Append(merr, wrapInnerGroupErr(resource.ErrMissing))
|
||||
continue
|
||||
}
|
||||
|
||||
if len(x.FailoverGroup.EndpointGroups) == 0 {
|
||||
merr = multierror.Append(merr, wrapInnerGroupErr(resource.ErrInvalidField{
|
||||
Name: "endpoint_groups",
|
||||
Wrapped: resource.ErrEmpty,
|
||||
}))
|
||||
}
|
||||
|
||||
for i, eg := range x.FailoverGroup.EndpointGroups {
|
||||
wrapFailoverEndpointGroupErr := func(err error) error {
|
||||
return wrapInnerGroupErr(resource.ErrInvalidListElement{
|
||||
Name: "endpoint_groups",
|
||||
Index: i,
|
||||
Wrapped: err,
|
||||
})
|
||||
}
|
||||
// The inner name field is required and cannot match the enclosing cluster.
|
||||
switch {
|
||||
case eg.Name == "":
|
||||
merr = multierror.Append(merr, wrapFailoverEndpointGroupErr(resource.ErrInvalidField{
|
||||
Name: "name",
|
||||
Wrapped: resource.ErrEmpty,
|
||||
}))
|
||||
case eg.Name == cluster.Name:
|
||||
merr = multierror.Append(merr, wrapFailoverEndpointGroupErr(resource.ErrInvalidField{
|
||||
Name: "name",
|
||||
Wrapped: fmt.Errorf(
|
||||
"name cannot be the same as the enclosing cluster %q",
|
||||
eg.Name,
|
||||
),
|
||||
}))
|
||||
}
|
||||
}
|
||||
default:
|
||||
merr = multierror.Append(merr, wrapGroupErr(fmt.Errorf("unknown type: %T", cluster.Group)))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return merr
|
||||
}
|
||||
|
|
|
@ -0,0 +1,169 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
"github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1/pbproxystate"
|
||||
"github.com/hashicorp/consul/proto/private/prototest"
|
||||
"github.com/hashicorp/consul/sdk/testutil"
|
||||
)
|
||||
|
||||
func TestValidateProxyStateTemplate(t *testing.T) {
|
||||
type testcase struct {
|
||||
pst *pbmesh.ProxyStateTemplate
|
||||
expectErr string
|
||||
}
|
||||
|
||||
run := func(t *testing.T, tc testcase) {
|
||||
res := resourcetest.Resource(ProxyStateTemplateType, "api").
|
||||
WithData(t, tc.pst).
|
||||
Build()
|
||||
|
||||
err := ValidateProxyStateTemplate(res)
|
||||
|
||||
// Verify that validate didn't actually change the object.
|
||||
got := resourcetest.MustDecode[*pbmesh.ProxyStateTemplate](t, res)
|
||||
prototest.AssertDeepEqual(t, tc.pst, got.Data)
|
||||
|
||||
if tc.expectErr == "" {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
testutil.RequireErrorContains(t, err, tc.expectErr)
|
||||
}
|
||||
}
|
||||
|
||||
pstForCluster := func(name string, cluster *pbproxystate.Cluster) *pbmesh.ProxyStateTemplate {
|
||||
return &pbmesh.ProxyStateTemplate{
|
||||
ProxyState: &pbmesh.ProxyState{
|
||||
Clusters: map[string]*pbproxystate.Cluster{
|
||||
name: cluster,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
clusterForGroups := func(name string, groups ...*pbproxystate.EndpointGroup) *pbproxystate.Cluster {
|
||||
cluster := &pbproxystate.Cluster{
|
||||
Name: name,
|
||||
}
|
||||
|
||||
require.NotEmpty(t, groups)
|
||||
|
||||
if len(groups) == 1 {
|
||||
cluster.Group = &pbproxystate.Cluster_EndpointGroup{
|
||||
EndpointGroup: groups[0],
|
||||
}
|
||||
} else {
|
||||
cluster.Group = &pbproxystate.Cluster_FailoverGroup{
|
||||
FailoverGroup: &pbproxystate.FailoverGroup{
|
||||
EndpointGroups: groups,
|
||||
},
|
||||
}
|
||||
}
|
||||
return cluster
|
||||
}
|
||||
|
||||
endpointGroup := func(name string) *pbproxystate.EndpointGroup {
|
||||
return &pbproxystate.EndpointGroup{
|
||||
Name: name,
|
||||
Group: &pbproxystate.EndpointGroup_Dynamic{
|
||||
Dynamic: &pbproxystate.DynamicEndpointGroup{},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// also cover clusters with names that don't match the map key
|
||||
// also empty map keys
|
||||
cases := map[string]testcase{
|
||||
// ============== COMMON ==============
|
||||
"cluster with missing cluster group": {
|
||||
pst: pstForCluster("api-cluster", &pbproxystate.Cluster{
|
||||
Name: "api-cluster",
|
||||
}),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "group" field: missing required field`,
|
||||
},
|
||||
// ============== STANDARD ==============
|
||||
"standard cluster with empty map key": {
|
||||
pst: pstForCluster("", clusterForGroups("api-cluster",
|
||||
endpointGroup(""),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: map clusters contains an invalid key - "": cannot be empty`,
|
||||
},
|
||||
"standard cluster with missing cluster name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("",
|
||||
endpointGroup(""),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "name" field: cluster name "" does not match map key "api-cluster"`,
|
||||
},
|
||||
"standard cluster with empty endpoint group name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("api-cluster",
|
||||
endpointGroup(""),
|
||||
)),
|
||||
},
|
||||
"standard cluster with same endpoint group name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("api-cluster",
|
||||
endpointGroup("api-cluster"),
|
||||
)),
|
||||
},
|
||||
"standard cluster with different endpoint group name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("api-cluster",
|
||||
endpointGroup("garbage"),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "group" field: invalid "endpoint_group" field: invalid "name" field: optional but "garbage" does not match enclosing cluster name "api-cluster"`,
|
||||
},
|
||||
// ============== FAILOVER ==============
|
||||
"failover cluster with empty map key": {
|
||||
pst: pstForCluster("", clusterForGroups("api-cluster",
|
||||
endpointGroup("api-cluster~0"),
|
||||
endpointGroup("api-cluster~1"),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: map clusters contains an invalid key - "": cannot be empty`,
|
||||
},
|
||||
"failover cluster with missing cluster name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("",
|
||||
endpointGroup("api-cluster~0"),
|
||||
endpointGroup("api-cluster~1"),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "name" field: cluster name "" does not match map key "api-cluster"`,
|
||||
},
|
||||
"failover cluster with empty endpoint group name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("api-cluster",
|
||||
endpointGroup("api-cluster~0"),
|
||||
endpointGroup(""),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "group" field: invalid "failover_group" field: invalid element at index 1 of list "endpoint_groups": invalid "name" field: cannot be empty`,
|
||||
},
|
||||
"failover cluster with same endpoint group name": {
|
||||
pst: pstForCluster("api-cluster", clusterForGroups("api-cluster",
|
||||
endpointGroup("api-cluster~0"),
|
||||
endpointGroup("api-cluster"),
|
||||
)),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "group" field: invalid "failover_group" field: invalid element at index 1 of list "endpoint_groups": invalid "name" field: name cannot be the same as the enclosing cluster "api-cluster"`,
|
||||
},
|
||||
"failover cluster with no groups": {
|
||||
pst: pstForCluster("api-cluster", &pbproxystate.Cluster{
|
||||
Name: "api-cluster",
|
||||
Group: &pbproxystate.Cluster_FailoverGroup{
|
||||
FailoverGroup: &pbproxystate.FailoverGroup{
|
||||
EndpointGroups: nil,
|
||||
},
|
||||
},
|
||||
}),
|
||||
expectErr: `invalid "proxy_state" field: invalid value of key "api-cluster" within clusters: invalid "group" field: invalid "failover_group" field: invalid "endpoint_groups" field: cannot be empty`,
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Logf("%+v", tc.pst)
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -190,6 +190,7 @@ func validateBackendRef(backendRef *pbmesh.BackendReference, wrapErr func(error)
|
|||
}
|
||||
|
||||
func validateHeaderMatchType(typ pbmesh.HeaderMatchType) error {
|
||||
// enumcover:pbmesh.HeaderMatchType
|
||||
switch typ {
|
||||
case pbmesh.HeaderMatchType_HEADER_MATCH_TYPE_UNSPECIFIED:
|
||||
return resource.ErrMissing
|
||||
|
|
|
@ -163,6 +163,9 @@ func (b *resourceBuilder) Write(t T, client pbresource.ResourceServiceClient) *p
|
|||
}
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, rsp)
|
||||
|
||||
if !b.dontCleanup {
|
||||
id := proto.Clone(rsp.Resource.Id).(*pbresource.ID)
|
||||
id.Uid = ""
|
||||
|
|
|
@ -13,6 +13,7 @@ import (
|
|||
)
|
||||
|
||||
func ValidateAndNormalize(t *testing.T, registry resource.Registry, res *pbresource.Resource) {
|
||||
t.Helper()
|
||||
typ := res.Id.Type
|
||||
|
||||
typeInfo, ok := registry.Resolve(typ)
|
||||
|
|
|
@ -126,3 +126,23 @@ func (msg *BackendTargetDetails) MarshalBinary() ([]byte, error) {
|
|||
func (msg *BackendTargetDetails) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ComputedFailoverConfig) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ComputedFailoverConfig) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ComputedFailoverDestination) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ComputedFailoverDestination) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
||||
|
|
|
@ -25,6 +25,60 @@ const (
|
|||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type BackendTargetDetailsType int32
|
||||
|
||||
const (
|
||||
BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_UNSPECIFIED BackendTargetDetailsType = 0
|
||||
// Direct means that the target is directly routable from a route. This does
|
||||
// not mean that the target is not also indirect though.
|
||||
BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_DIRECT BackendTargetDetailsType = 1
|
||||
// Indirect means that the target is not directly routable from a route.
|
||||
//
|
||||
// One example would be for a FailoverPolicy destination.
|
||||
BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_INDIRECT BackendTargetDetailsType = 2
|
||||
)
|
||||
|
||||
// Enum value maps for BackendTargetDetailsType.
|
||||
var (
|
||||
BackendTargetDetailsType_name = map[int32]string{
|
||||
0: "BACKEND_TARGET_DETAILS_TYPE_UNSPECIFIED",
|
||||
1: "BACKEND_TARGET_DETAILS_TYPE_DIRECT",
|
||||
2: "BACKEND_TARGET_DETAILS_TYPE_INDIRECT",
|
||||
}
|
||||
BackendTargetDetailsType_value = map[string]int32{
|
||||
"BACKEND_TARGET_DETAILS_TYPE_UNSPECIFIED": 0,
|
||||
"BACKEND_TARGET_DETAILS_TYPE_DIRECT": 1,
|
||||
"BACKEND_TARGET_DETAILS_TYPE_INDIRECT": 2,
|
||||
}
|
||||
)
|
||||
|
||||
func (x BackendTargetDetailsType) Enum() *BackendTargetDetailsType {
|
||||
p := new(BackendTargetDetailsType)
|
||||
*p = x
|
||||
return p
|
||||
}
|
||||
|
||||
func (x BackendTargetDetailsType) String() string {
|
||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||
}
|
||||
|
||||
func (BackendTargetDetailsType) Descriptor() protoreflect.EnumDescriptor {
|
||||
return file_pbmesh_v1alpha1_computed_routes_proto_enumTypes[0].Descriptor()
|
||||
}
|
||||
|
||||
func (BackendTargetDetailsType) Type() protoreflect.EnumType {
|
||||
return &file_pbmesh_v1alpha1_computed_routes_proto_enumTypes[0]
|
||||
}
|
||||
|
||||
func (x BackendTargetDetailsType) Number() protoreflect.EnumNumber {
|
||||
return protoreflect.EnumNumber(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use BackendTargetDetailsType.Descriptor instead.
|
||||
func (BackendTargetDetailsType) EnumDescriptor() ([]byte, []int) {
|
||||
return file_pbmesh_v1alpha1_computed_routes_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
// This is a Resource type.
|
||||
type ComputedRoutes struct {
|
||||
state protoimpl.MessageState
|
||||
|
@ -759,11 +813,11 @@ type BackendTargetDetails struct {
|
|||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// identity info
|
||||
BackendRef *BackendReference `protobuf:"bytes,1,opt,name=backend_ref,json=backendRef,proto3" json:"backend_ref,omitempty"`
|
||||
MeshPort string `protobuf:"bytes,2,opt,name=mesh_port,json=meshPort,proto3" json:"mesh_port,omitempty"`
|
||||
FailoverConfig *v1alpha1.FailoverConfig `protobuf:"bytes,3,opt,name=failover_config,json=failoverConfig,proto3" json:"failover_config,omitempty"`
|
||||
DestinationConfig *DestinationConfig `protobuf:"bytes,4,opt,name=destination_config,json=destinationConfig,proto3" json:"destination_config,omitempty"`
|
||||
Type BackendTargetDetailsType `protobuf:"varint,1,opt,name=type,proto3,enum=hashicorp.consul.mesh.v1alpha1.BackendTargetDetailsType" json:"type,omitempty"`
|
||||
BackendRef *BackendReference `protobuf:"bytes,2,opt,name=backend_ref,json=backendRef,proto3" json:"backend_ref,omitempty"`
|
||||
MeshPort string `protobuf:"bytes,3,opt,name=mesh_port,json=meshPort,proto3" json:"mesh_port,omitempty"`
|
||||
FailoverConfig *ComputedFailoverConfig `protobuf:"bytes,4,opt,name=failover_config,json=failoverConfig,proto3" json:"failover_config,omitempty"`
|
||||
DestinationConfig *DestinationConfig `protobuf:"bytes,5,opt,name=destination_config,json=destinationConfig,proto3" json:"destination_config,omitempty"`
|
||||
// ServiceEndpointsID is not populated naturally and the field exists only for
|
||||
// downstream consumers.
|
||||
ServiceEndpointsId *pbresource.ID `protobuf:"bytes,21,opt,name=service_endpoints_id,json=serviceEndpointsId,proto3" json:"service_endpoints_id,omitempty"`
|
||||
|
@ -807,6 +861,13 @@ func (*BackendTargetDetails) Descriptor() ([]byte, []int) {
|
|||
return file_pbmesh_v1alpha1_computed_routes_proto_rawDescGZIP(), []int{11}
|
||||
}
|
||||
|
||||
func (x *BackendTargetDetails) GetType() BackendTargetDetailsType {
|
||||
if x != nil {
|
||||
return x.Type
|
||||
}
|
||||
return BackendTargetDetailsType_BACKEND_TARGET_DETAILS_TYPE_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *BackendTargetDetails) GetBackendRef() *BackendReference {
|
||||
if x != nil {
|
||||
return x.BackendRef
|
||||
|
@ -821,7 +882,7 @@ func (x *BackendTargetDetails) GetMeshPort() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (x *BackendTargetDetails) GetFailoverConfig() *v1alpha1.FailoverConfig {
|
||||
func (x *BackendTargetDetails) GetFailoverConfig() *ComputedFailoverConfig {
|
||||
if x != nil {
|
||||
return x.FailoverConfig
|
||||
}
|
||||
|
@ -856,6 +917,126 @@ func (x *BackendTargetDetails) GetIdentityRefs() []*pbresource.Reference {
|
|||
return nil
|
||||
}
|
||||
|
||||
type ComputedFailoverConfig struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Destinations []*ComputedFailoverDestination `protobuf:"bytes,1,rep,name=destinations,proto3" json:"destinations,omitempty"`
|
||||
Mode v1alpha1.FailoverMode `protobuf:"varint,2,opt,name=mode,proto3,enum=hashicorp.consul.catalog.v1alpha1.FailoverMode" json:"mode,omitempty"`
|
||||
Regions []string `protobuf:"bytes,3,rep,name=regions,proto3" json:"regions,omitempty"`
|
||||
// SamenessGroup specifies the sameness group to failover to.
|
||||
SamenessGroup string `protobuf:"bytes,4,opt,name=sameness_group,json=samenessGroup,proto3" json:"sameness_group,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverConfig) Reset() {
|
||||
*x = ComputedFailoverConfig{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[12]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverConfig) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ComputedFailoverConfig) ProtoMessage() {}
|
||||
|
||||
func (x *ComputedFailoverConfig) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[12]
|
||||
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 ComputedFailoverConfig.ProtoReflect.Descriptor instead.
|
||||
func (*ComputedFailoverConfig) Descriptor() ([]byte, []int) {
|
||||
return file_pbmesh_v1alpha1_computed_routes_proto_rawDescGZIP(), []int{12}
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverConfig) GetDestinations() []*ComputedFailoverDestination {
|
||||
if x != nil {
|
||||
return x.Destinations
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverConfig) GetMode() v1alpha1.FailoverMode {
|
||||
if x != nil {
|
||||
return x.Mode
|
||||
}
|
||||
return v1alpha1.FailoverMode(0)
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverConfig) GetRegions() []string {
|
||||
if x != nil {
|
||||
return x.Regions
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverConfig) GetSamenessGroup() string {
|
||||
if x != nil {
|
||||
return x.SamenessGroup
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type ComputedFailoverDestination struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// This must be a Service.
|
||||
BackendTarget string `protobuf:"bytes,1,opt,name=backend_target,json=backendTarget,proto3" json:"backend_target,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverDestination) Reset() {
|
||||
*x = ComputedFailoverDestination{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[13]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverDestination) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ComputedFailoverDestination) ProtoMessage() {}
|
||||
|
||||
func (x *ComputedFailoverDestination) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[13]
|
||||
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 ComputedFailoverDestination.ProtoReflect.Descriptor instead.
|
||||
func (*ComputedFailoverDestination) Descriptor() ([]byte, []int) {
|
||||
return file_pbmesh_v1alpha1_computed_routes_proto_rawDescGZIP(), []int{13}
|
||||
}
|
||||
|
||||
func (x *ComputedFailoverDestination) GetBackendTarget() string {
|
||||
if x != nil {
|
||||
return x.BackendTarget
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_pbmesh_v1alpha1_computed_routes_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_pbmesh_v1alpha1_computed_routes_proto_rawDesc = []byte{
|
||||
|
@ -1047,62 +1228,98 @@ var file_pbmesh_v1alpha1_computed_routes_proto_rawDesc = []byte{
|
|||
0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65,
|
||||
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
|
||||
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xc8,
|
||||
0x04, 0x0a, 0x14, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
|
||||
0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65,
|
||||
0x6e, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61,
|
||||
0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a,
|
||||
0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65,
|
||||
0x73, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x5a, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x6f,
|
||||
0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c,
|
||||
0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x12, 0x60, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
||||
0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e,
|
||||
0x49, 0x44, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f,
|
||||
0x69, 0x6e, 0x74, 0x73, 0x49, 0x64, 0x12, 0x60, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x33, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x64,
|
||||
0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45,
|
||||
0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x69, 0x64, 0x65, 0x6e,
|
||||
0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x24, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65,
|
||||
0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
||||
0x65, 0x66, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x15, 0x42, 0x9b, 0x02, 0x0a, 0x22, 0x63, 0x6f,
|
||||
0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
||||
0x42, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73,
|
||||
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69,
|
||||
0x63, 0x2f, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x3b, 0x6d, 0x65, 0x73, 0x68, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02,
|
||||
0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x1e, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1e, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2a, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56,
|
||||
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
|
||||
0x61, 0x74, 0x61, 0xea, 0x02, 0x21, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a,
|
||||
0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x68, 0x3a, 0x3a, 0x56,
|
||||
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x9b,
|
||||
0x05, 0x0a, 0x14, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
|
||||
0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x61,
|
||||
0x72, 0x67, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52,
|
||||
0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
|
||||
0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65,
|
||||
0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b,
|
||||
0x65, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x62, 0x61,
|
||||
0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x68,
|
||||
0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x73,
|
||||
0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36,
|
||||
0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
|
||||
0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x60, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
|
||||
0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x69, 0x64,
|
||||
0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||
0x63, 0x65, 0x2e, 0x49, 0x44, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e,
|
||||
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x64, 0x12, 0x60, 0x0a, 0x11, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x16,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x69,
|
||||
0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x17, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52,
|
||||
0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x74, 0x79, 0x52, 0x65, 0x66, 0x73, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x15, 0x22, 0xff, 0x01, 0x0a,
|
||||
0x16, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5f, 0x0a, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e,
|
||||
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43,
|
||||
0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x44,
|
||||
0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x64, 0x65, 0x73, 0x74,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f,
|
||||
0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f,
|
||||
0x76, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a,
|
||||
0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
|
||||
0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x61, 0x6d, 0x65, 0x6e,
|
||||
0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x0d, 0x73, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x44,
|
||||
0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76,
|
||||
0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a,
|
||||
0x0e, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x61,
|
||||
0x72, 0x67, 0x65, 0x74, 0x2a, 0x99, 0x01, 0x0a, 0x18, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
|
||||
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x54, 0x79, 0x70,
|
||||
0x65, 0x12, 0x2b, 0x0a, 0x27, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x54, 0x41, 0x52,
|
||||
0x47, 0x45, 0x54, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45,
|
||||
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26,
|
||||
0x0a, 0x22, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54,
|
||||
0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x49,
|
||||
0x52, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e,
|
||||
0x44, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53,
|
||||
0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x02,
|
||||
0x42, 0x9b, 0x02, 0x0a, 0x22, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
|
||||
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
|
||||
0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45,
|
||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x68, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x1e, 0x48, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d,
|
||||
0x65, 0x73, 0x68, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1e, 0x48,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c,
|
||||
0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2a,
|
||||
0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47,
|
||||
0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x21, 0x48, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a,
|
||||
0x4d, 0x65, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -1117,74 +1334,81 @@ func file_pbmesh_v1alpha1_computed_routes_proto_rawDescGZIP() []byte {
|
|||
return file_pbmesh_v1alpha1_computed_routes_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pbmesh_v1alpha1_computed_routes_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
|
||||
var file_pbmesh_v1alpha1_computed_routes_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||
var file_pbmesh_v1alpha1_computed_routes_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
|
||||
var file_pbmesh_v1alpha1_computed_routes_proto_goTypes = []interface{}{
|
||||
(*ComputedRoutes)(nil), // 0: hashicorp.consul.mesh.v1alpha1.ComputedRoutes
|
||||
(*ComputedPortRoutes)(nil), // 1: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes
|
||||
(*ComputedHTTPRoute)(nil), // 2: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRoute
|
||||
(*ComputedHTTPRouteRule)(nil), // 3: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule
|
||||
(*ComputedHTTPBackendRef)(nil), // 4: hashicorp.consul.mesh.v1alpha1.ComputedHTTPBackendRef
|
||||
(*ComputedGRPCRoute)(nil), // 5: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRoute
|
||||
(*ComputedGRPCRouteRule)(nil), // 6: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule
|
||||
(*ComputedGRPCBackendRef)(nil), // 7: hashicorp.consul.mesh.v1alpha1.ComputedGRPCBackendRef
|
||||
(*ComputedTCPRoute)(nil), // 8: hashicorp.consul.mesh.v1alpha1.ComputedTCPRoute
|
||||
(*ComputedTCPRouteRule)(nil), // 9: hashicorp.consul.mesh.v1alpha1.ComputedTCPRouteRule
|
||||
(*ComputedTCPBackendRef)(nil), // 10: hashicorp.consul.mesh.v1alpha1.ComputedTCPBackendRef
|
||||
(*BackendTargetDetails)(nil), // 11: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails
|
||||
nil, // 12: hashicorp.consul.mesh.v1alpha1.ComputedRoutes.PortedConfigsEntry
|
||||
nil, // 13: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.TargetsEntry
|
||||
(*ParentReference)(nil), // 14: hashicorp.consul.mesh.v1alpha1.ParentReference
|
||||
(v1alpha1.Protocol)(0), // 15: hashicorp.consul.catalog.v1alpha1.Protocol
|
||||
(*HTTPRouteMatch)(nil), // 16: hashicorp.consul.mesh.v1alpha1.HTTPRouteMatch
|
||||
(*HTTPRouteFilter)(nil), // 17: hashicorp.consul.mesh.v1alpha1.HTTPRouteFilter
|
||||
(*HTTPRouteTimeouts)(nil), // 18: hashicorp.consul.mesh.v1alpha1.HTTPRouteTimeouts
|
||||
(*HTTPRouteRetries)(nil), // 19: hashicorp.consul.mesh.v1alpha1.HTTPRouteRetries
|
||||
(*GRPCRouteMatch)(nil), // 20: hashicorp.consul.mesh.v1alpha1.GRPCRouteMatch
|
||||
(*GRPCRouteFilter)(nil), // 21: hashicorp.consul.mesh.v1alpha1.GRPCRouteFilter
|
||||
(*BackendReference)(nil), // 22: hashicorp.consul.mesh.v1alpha1.BackendReference
|
||||
(*v1alpha1.FailoverConfig)(nil), // 23: hashicorp.consul.catalog.v1alpha1.FailoverConfig
|
||||
(*DestinationConfig)(nil), // 24: hashicorp.consul.mesh.v1alpha1.DestinationConfig
|
||||
(*pbresource.ID)(nil), // 25: hashicorp.consul.resource.ID
|
||||
(*v1alpha1.ServiceEndpoints)(nil), // 26: hashicorp.consul.catalog.v1alpha1.ServiceEndpoints
|
||||
(*pbresource.Reference)(nil), // 27: hashicorp.consul.resource.Reference
|
||||
(BackendTargetDetailsType)(0), // 0: hashicorp.consul.mesh.v1alpha1.BackendTargetDetailsType
|
||||
(*ComputedRoutes)(nil), // 1: hashicorp.consul.mesh.v1alpha1.ComputedRoutes
|
||||
(*ComputedPortRoutes)(nil), // 2: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes
|
||||
(*ComputedHTTPRoute)(nil), // 3: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRoute
|
||||
(*ComputedHTTPRouteRule)(nil), // 4: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule
|
||||
(*ComputedHTTPBackendRef)(nil), // 5: hashicorp.consul.mesh.v1alpha1.ComputedHTTPBackendRef
|
||||
(*ComputedGRPCRoute)(nil), // 6: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRoute
|
||||
(*ComputedGRPCRouteRule)(nil), // 7: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule
|
||||
(*ComputedGRPCBackendRef)(nil), // 8: hashicorp.consul.mesh.v1alpha1.ComputedGRPCBackendRef
|
||||
(*ComputedTCPRoute)(nil), // 9: hashicorp.consul.mesh.v1alpha1.ComputedTCPRoute
|
||||
(*ComputedTCPRouteRule)(nil), // 10: hashicorp.consul.mesh.v1alpha1.ComputedTCPRouteRule
|
||||
(*ComputedTCPBackendRef)(nil), // 11: hashicorp.consul.mesh.v1alpha1.ComputedTCPBackendRef
|
||||
(*BackendTargetDetails)(nil), // 12: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails
|
||||
(*ComputedFailoverConfig)(nil), // 13: hashicorp.consul.mesh.v1alpha1.ComputedFailoverConfig
|
||||
(*ComputedFailoverDestination)(nil), // 14: hashicorp.consul.mesh.v1alpha1.ComputedFailoverDestination
|
||||
nil, // 15: hashicorp.consul.mesh.v1alpha1.ComputedRoutes.PortedConfigsEntry
|
||||
nil, // 16: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.TargetsEntry
|
||||
(*ParentReference)(nil), // 17: hashicorp.consul.mesh.v1alpha1.ParentReference
|
||||
(v1alpha1.Protocol)(0), // 18: hashicorp.consul.catalog.v1alpha1.Protocol
|
||||
(*HTTPRouteMatch)(nil), // 19: hashicorp.consul.mesh.v1alpha1.HTTPRouteMatch
|
||||
(*HTTPRouteFilter)(nil), // 20: hashicorp.consul.mesh.v1alpha1.HTTPRouteFilter
|
||||
(*HTTPRouteTimeouts)(nil), // 21: hashicorp.consul.mesh.v1alpha1.HTTPRouteTimeouts
|
||||
(*HTTPRouteRetries)(nil), // 22: hashicorp.consul.mesh.v1alpha1.HTTPRouteRetries
|
||||
(*GRPCRouteMatch)(nil), // 23: hashicorp.consul.mesh.v1alpha1.GRPCRouteMatch
|
||||
(*GRPCRouteFilter)(nil), // 24: hashicorp.consul.mesh.v1alpha1.GRPCRouteFilter
|
||||
(*BackendReference)(nil), // 25: hashicorp.consul.mesh.v1alpha1.BackendReference
|
||||
(*DestinationConfig)(nil), // 26: hashicorp.consul.mesh.v1alpha1.DestinationConfig
|
||||
(*pbresource.ID)(nil), // 27: hashicorp.consul.resource.ID
|
||||
(*v1alpha1.ServiceEndpoints)(nil), // 28: hashicorp.consul.catalog.v1alpha1.ServiceEndpoints
|
||||
(*pbresource.Reference)(nil), // 29: hashicorp.consul.resource.Reference
|
||||
(v1alpha1.FailoverMode)(0), // 30: hashicorp.consul.catalog.v1alpha1.FailoverMode
|
||||
}
|
||||
var file_pbmesh_v1alpha1_computed_routes_proto_depIdxs = []int32{
|
||||
12, // 0: hashicorp.consul.mesh.v1alpha1.ComputedRoutes.ported_configs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedRoutes.PortedConfigsEntry
|
||||
2, // 1: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.http:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedHTTPRoute
|
||||
5, // 2: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.grpc:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedGRPCRoute
|
||||
8, // 3: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.tcp:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedTCPRoute
|
||||
14, // 4: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.parent_ref:type_name -> hashicorp.consul.mesh.v1alpha1.ParentReference
|
||||
15, // 5: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.protocol:type_name -> hashicorp.consul.catalog.v1alpha1.Protocol
|
||||
13, // 6: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.targets:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.TargetsEntry
|
||||
3, // 7: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRoute.rules:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule
|
||||
16, // 8: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.matches:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteMatch
|
||||
17, // 9: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.filters:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteFilter
|
||||
4, // 10: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.backend_refs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedHTTPBackendRef
|
||||
18, // 11: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.timeouts:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteTimeouts
|
||||
19, // 12: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.retries:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteRetries
|
||||
17, // 13: hashicorp.consul.mesh.v1alpha1.ComputedHTTPBackendRef.filters:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteFilter
|
||||
6, // 14: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRoute.rules:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule
|
||||
20, // 15: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.matches:type_name -> hashicorp.consul.mesh.v1alpha1.GRPCRouteMatch
|
||||
21, // 16: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.filters:type_name -> hashicorp.consul.mesh.v1alpha1.GRPCRouteFilter
|
||||
7, // 17: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.backend_refs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedGRPCBackendRef
|
||||
18, // 18: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.timeouts:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteTimeouts
|
||||
19, // 19: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.retries:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteRetries
|
||||
21, // 20: hashicorp.consul.mesh.v1alpha1.ComputedGRPCBackendRef.filters:type_name -> hashicorp.consul.mesh.v1alpha1.GRPCRouteFilter
|
||||
9, // 21: hashicorp.consul.mesh.v1alpha1.ComputedTCPRoute.rules:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedTCPRouteRule
|
||||
10, // 22: hashicorp.consul.mesh.v1alpha1.ComputedTCPRouteRule.backend_refs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedTCPBackendRef
|
||||
22, // 23: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.backend_ref:type_name -> hashicorp.consul.mesh.v1alpha1.BackendReference
|
||||
23, // 24: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.failover_config:type_name -> hashicorp.consul.catalog.v1alpha1.FailoverConfig
|
||||
24, // 25: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.destination_config:type_name -> hashicorp.consul.mesh.v1alpha1.DestinationConfig
|
||||
25, // 26: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.service_endpoints_id:type_name -> hashicorp.consul.resource.ID
|
||||
26, // 27: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.service_endpoints:type_name -> hashicorp.consul.catalog.v1alpha1.ServiceEndpoints
|
||||
27, // 28: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.identity_refs:type_name -> hashicorp.consul.resource.Reference
|
||||
1, // 29: hashicorp.consul.mesh.v1alpha1.ComputedRoutes.PortedConfigsEntry.value:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes
|
||||
11, // 30: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.TargetsEntry.value:type_name -> hashicorp.consul.mesh.v1alpha1.BackendTargetDetails
|
||||
31, // [31:31] is the sub-list for method output_type
|
||||
31, // [31:31] is the sub-list for method input_type
|
||||
31, // [31:31] is the sub-list for extension type_name
|
||||
31, // [31:31] is the sub-list for extension extendee
|
||||
0, // [0:31] is the sub-list for field type_name
|
||||
15, // 0: hashicorp.consul.mesh.v1alpha1.ComputedRoutes.ported_configs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedRoutes.PortedConfigsEntry
|
||||
3, // 1: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.http:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedHTTPRoute
|
||||
6, // 2: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.grpc:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedGRPCRoute
|
||||
9, // 3: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.tcp:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedTCPRoute
|
||||
17, // 4: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.parent_ref:type_name -> hashicorp.consul.mesh.v1alpha1.ParentReference
|
||||
18, // 5: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.protocol:type_name -> hashicorp.consul.catalog.v1alpha1.Protocol
|
||||
16, // 6: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.targets:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.TargetsEntry
|
||||
4, // 7: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRoute.rules:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule
|
||||
19, // 8: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.matches:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteMatch
|
||||
20, // 9: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.filters:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteFilter
|
||||
5, // 10: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.backend_refs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedHTTPBackendRef
|
||||
21, // 11: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.timeouts:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteTimeouts
|
||||
22, // 12: hashicorp.consul.mesh.v1alpha1.ComputedHTTPRouteRule.retries:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteRetries
|
||||
20, // 13: hashicorp.consul.mesh.v1alpha1.ComputedHTTPBackendRef.filters:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteFilter
|
||||
7, // 14: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRoute.rules:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule
|
||||
23, // 15: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.matches:type_name -> hashicorp.consul.mesh.v1alpha1.GRPCRouteMatch
|
||||
24, // 16: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.filters:type_name -> hashicorp.consul.mesh.v1alpha1.GRPCRouteFilter
|
||||
8, // 17: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.backend_refs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedGRPCBackendRef
|
||||
21, // 18: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.timeouts:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteTimeouts
|
||||
22, // 19: hashicorp.consul.mesh.v1alpha1.ComputedGRPCRouteRule.retries:type_name -> hashicorp.consul.mesh.v1alpha1.HTTPRouteRetries
|
||||
24, // 20: hashicorp.consul.mesh.v1alpha1.ComputedGRPCBackendRef.filters:type_name -> hashicorp.consul.mesh.v1alpha1.GRPCRouteFilter
|
||||
10, // 21: hashicorp.consul.mesh.v1alpha1.ComputedTCPRoute.rules:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedTCPRouteRule
|
||||
11, // 22: hashicorp.consul.mesh.v1alpha1.ComputedTCPRouteRule.backend_refs:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedTCPBackendRef
|
||||
0, // 23: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.type:type_name -> hashicorp.consul.mesh.v1alpha1.BackendTargetDetailsType
|
||||
25, // 24: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.backend_ref:type_name -> hashicorp.consul.mesh.v1alpha1.BackendReference
|
||||
13, // 25: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.failover_config:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedFailoverConfig
|
||||
26, // 26: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.destination_config:type_name -> hashicorp.consul.mesh.v1alpha1.DestinationConfig
|
||||
27, // 27: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.service_endpoints_id:type_name -> hashicorp.consul.resource.ID
|
||||
28, // 28: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.service_endpoints:type_name -> hashicorp.consul.catalog.v1alpha1.ServiceEndpoints
|
||||
29, // 29: hashicorp.consul.mesh.v1alpha1.BackendTargetDetails.identity_refs:type_name -> hashicorp.consul.resource.Reference
|
||||
14, // 30: hashicorp.consul.mesh.v1alpha1.ComputedFailoverConfig.destinations:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedFailoverDestination
|
||||
30, // 31: hashicorp.consul.mesh.v1alpha1.ComputedFailoverConfig.mode:type_name -> hashicorp.consul.catalog.v1alpha1.FailoverMode
|
||||
2, // 32: hashicorp.consul.mesh.v1alpha1.ComputedRoutes.PortedConfigsEntry.value:type_name -> hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes
|
||||
12, // 33: hashicorp.consul.mesh.v1alpha1.ComputedPortRoutes.TargetsEntry.value:type_name -> hashicorp.consul.mesh.v1alpha1.BackendTargetDetails
|
||||
34, // [34:34] is the sub-list for method output_type
|
||||
34, // [34:34] is the sub-list for method input_type
|
||||
34, // [34:34] is the sub-list for extension type_name
|
||||
34, // [34:34] is the sub-list for extension extendee
|
||||
0, // [0:34] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pbmesh_v1alpha1_computed_routes_proto_init() }
|
||||
|
@ -1343,6 +1567,30 @@ func file_pbmesh_v1alpha1_computed_routes_proto_init() {
|
|||
return nil
|
||||
}
|
||||
}
|
||||
file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ComputedFailoverConfig); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ComputedFailoverDestination); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
file_pbmesh_v1alpha1_computed_routes_proto_msgTypes[1].OneofWrappers = []interface{}{
|
||||
(*ComputedPortRoutes_Http)(nil),
|
||||
|
@ -1354,13 +1602,14 @@ func file_pbmesh_v1alpha1_computed_routes_proto_init() {
|
|||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_pbmesh_v1alpha1_computed_routes_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 14,
|
||||
NumEnums: 1,
|
||||
NumMessages: 16,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pbmesh_v1alpha1_computed_routes_proto_goTypes,
|
||||
DependencyIndexes: file_pbmesh_v1alpha1_computed_routes_proto_depIdxs,
|
||||
EnumInfos: file_pbmesh_v1alpha1_computed_routes_proto_enumTypes,
|
||||
MessageInfos: file_pbmesh_v1alpha1_computed_routes_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pbmesh_v1alpha1_computed_routes_proto = out.File
|
||||
|
|
|
@ -114,14 +114,14 @@ message ComputedTCPBackendRef {
|
|||
}
|
||||
|
||||
message BackendTargetDetails {
|
||||
// identity info
|
||||
BackendReference backend_ref = 1;
|
||||
BackendTargetDetailsType type = 1;
|
||||
BackendReference backend_ref = 2;
|
||||
|
||||
string mesh_port = 2;
|
||||
hashicorp.consul.catalog.v1alpha1.FailoverConfig failover_config = 3;
|
||||
DestinationConfig destination_config = 4;
|
||||
string mesh_port = 3;
|
||||
ComputedFailoverConfig failover_config = 4;
|
||||
DestinationConfig destination_config = 5;
|
||||
|
||||
reserved 5 to 20; // leaving a gap between computed and retroactively added fields.
|
||||
reserved 6 to 20; // leaving a gap between computed and retroactively added fields.
|
||||
|
||||
// ServiceEndpointsID is not populated naturally and the field exists only for
|
||||
// downstream consumers.
|
||||
|
@ -135,3 +135,30 @@ message BackendTargetDetails {
|
|||
// downstream consumers.
|
||||
repeated hashicorp.consul.resource.Reference identity_refs = 23;
|
||||
}
|
||||
|
||||
enum BackendTargetDetailsType {
|
||||
BACKEND_TARGET_DETAILS_TYPE_UNSPECIFIED = 0;
|
||||
|
||||
// Direct means that the target is directly routable from a route. This does
|
||||
// not mean that the target is not also indirect though.
|
||||
BACKEND_TARGET_DETAILS_TYPE_DIRECT = 1;
|
||||
|
||||
// Indirect means that the target is not directly routable from a route.
|
||||
//
|
||||
// One example would be for a FailoverPolicy destination.
|
||||
BACKEND_TARGET_DETAILS_TYPE_INDIRECT = 2;
|
||||
}
|
||||
|
||||
message ComputedFailoverConfig {
|
||||
repeated ComputedFailoverDestination destinations = 1;
|
||||
hashicorp.consul.catalog.v1alpha1.FailoverMode mode = 2;
|
||||
repeated string regions = 3;
|
||||
|
||||
// SamenessGroup specifies the sameness group to failover to.
|
||||
string sameness_group = 4;
|
||||
}
|
||||
|
||||
message ComputedFailoverDestination {
|
||||
// This must be a Service.
|
||||
string backend_target = 1;
|
||||
}
|
||||
|
|
|
@ -307,6 +307,8 @@ type EndpointGroup struct {
|
|||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// name is used to name the cluster created. This is only required when used inside of a FailoverGroup.
|
||||
Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
|
||||
// Types that are assignable to Group:
|
||||
//
|
||||
// *EndpointGroup_Dynamic
|
||||
|
@ -348,6 +350,13 @@ func (*EndpointGroup) Descriptor() ([]byte, []int) {
|
|||
return file_pbmesh_v1alpha1_pbproxystate_cluster_proto_rawDescGZIP(), []int{3}
|
||||
}
|
||||
|
||||
func (x *EndpointGroup) GetName() string {
|
||||
if x != nil {
|
||||
return x.Name
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *EndpointGroup) GetGroup() isEndpointGroup_Group {
|
||||
if m != nil {
|
||||
return m.Group
|
||||
|
@ -1798,355 +1807,356 @@ var file_pbmesh_v1alpha1_pbproxystate_cluster_proto_rawDesc = []byte{
|
|||
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
|
||||
0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x91, 0x03, 0x0a, 0x0d, 0x45, 0x6e,
|
||||
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5d, 0x0a, 0x07, 0x64,
|
||||
0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62,
|
||||
0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d,
|
||||
0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48,
|
||||
0x00, 0x52, 0x07, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x12, 0x5a, 0x0a, 0x06, 0x73, 0x74,
|
||||
0x61, 0x74, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65,
|
||||
0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72,
|
||||
0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45,
|
||||
0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x06,
|
||||
0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x12, 0x51, 0x0a, 0x03, 0x64, 0x6e, 0x73, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
|
||||
0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x2e, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f,
|
||||
0x75, 0x70, 0x48, 0x00, 0x52, 0x03, 0x64, 0x6e, 0x73, 0x12, 0x69, 0x0a, 0x0b, 0x70, 0x61, 0x73,
|
||||
0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45,
|
||||
0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
|
||||
0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x61, 0x73,
|
||||
0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
|
||||
0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72,
|
||||
0x6f, 0x75, 0x67, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xd8, 0x01,
|
||||
0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e,
|
||||
0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
|
||||
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73,
|
||||
0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70,
|
||||
0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
|
||||
0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5f, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x62, 0x6f,
|
||||
0x75, 0x6e, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e,
|
||||
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70,
|
||||
0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e,
|
||||
0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0b, 0x6f, 0x75, 0x74,
|
||||
0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6c, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x73,
|
||||
0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
|
||||
0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x63, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74,
|
||||
0x61, 0x74, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45,
|
||||
0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5f, 0x0a, 0x0c, 0x6f, 0x75,
|
||||
0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54,
|
||||
0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0b,
|
||||
0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6c, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x10,
|
||||
0x44, 0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70,
|
||||
0x12, 0x5b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x43, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xa5, 0x03, 0x0a, 0x0d, 0x45, 0x6e,
|
||||
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e,
|
||||
0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
|
||||
0x5d, 0x0a, 0x07, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x41, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44,
|
||||
0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5f, 0x0a,
|
||||
0x0c, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x18, 0x02, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
|
||||
0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65,
|
||||
0x74, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6c, 0x73, 0x22, 0x75,
|
||||
0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
|
||||
0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74,
|
||||
0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69,
|
||||
0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x28, 0x0a, 0x12, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e,
|
||||
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
|
||||
0x7f, 0x0a, 0x16, 0x4c, 0x34, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75,
|
||||
0x73, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x65, 0x0a, 0x08, 0x63, 0x6c, 0x75,
|
||||
0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x68, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x34, 0x57, 0x65, 0x69, 0x67,
|
||||
0x68, 0x74, 0x65, 0x64, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73,
|
||||
0x22, 0x7f, 0x0a, 0x16, 0x4c, 0x37, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x43, 0x6c,
|
||||
0x75, 0x73, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x65, 0x0a, 0x08, 0x63, 0x6c,
|
||||
0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x68,
|
||||
0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72,
|
||||
0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x07, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x12, 0x5a,
|
||||
0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40,
|
||||
0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
|
||||
0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70,
|
||||
0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x12, 0x51, 0x0a, 0x03, 0x64, 0x6e,
|
||||
0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e,
|
||||
0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x03, 0x64, 0x6e, 0x73, 0x12, 0x69, 0x0a,
|
||||
0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x18, 0x04, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x45, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
|
||||
0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||
0x2e, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x64, 0x70,
|
||||
0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x73,
|
||||
0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75,
|
||||
0x70, 0x22, 0xd8, 0x01, 0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x45, 0x6e, 0x64,
|
||||
0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x06, 0x63, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x68, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65,
|
||||
0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72,
|
||||
0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63,
|
||||
0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5f, 0x0a, 0x0c, 0x6f,
|
||||
0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
|
||||
0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52,
|
||||
0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6c, 0x73, 0x22, 0xe0, 0x01, 0x0a,
|
||||
0x18, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x64, 0x70,
|
||||
0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x63, 0x0a, 0x06, 0x63, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73,
|
||||
0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f,
|
||||
0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f,
|
||||
0x75, 0x67, 0x68, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5f,
|
||||
0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x6c, 0x73, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b,
|
||||
0x65, 0x74, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6c, 0x73, 0x22,
|
||||
0xd0, 0x01, 0x0a, 0x10, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47,
|
||||
0x72, 0x6f, 0x75, 0x70, 0x12, 0x5b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x2e, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72,
|
||||
0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x12, 0x5f, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x6c,
|
||||
0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53,
|
||||
0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54,
|
||||
0x6c, 0x73, 0x22, 0x75, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70,
|
||||
0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5e, 0x0a, 0x06, 0x63, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73,
|
||||
0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f,
|
||||
0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45, 0x6e,
|
||||
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x28, 0x0a, 0x12, 0x44, 0x65, 0x73,
|
||||
0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12,
|
||||
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
|
||||
0x61, 0x6d, 0x65, 0x22, 0x7f, 0x0a, 0x16, 0x4c, 0x34, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65,
|
||||
0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x65, 0x0a,
|
||||
0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x49, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
||||
0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x34,
|
||||
0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73,
|
||||
0x74, 0x65, 0x72, 0x73, 0x22, 0x7f, 0x0a, 0x16, 0x4c, 0x37, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74,
|
||||
0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x65,
|
||||
0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x32, 0x49, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c,
|
||||
0x37, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75,
|
||||
0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x68, 0x0a, 0x1c, 0x4c, 0x34, 0x57, 0x65, 0x69, 0x67, 0x68,
|
||||
0x74, 0x65, 0x64, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c,
|
||||
0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x77, 0x65, 0x69,
|
||||
0x67, 0x68, 0x74, 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, 0x55, 0x49, 0x6e, 0x74,
|
||||
0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22,
|
||||
0xd0, 0x01, 0x0a, 0x1c, 0x4c, 0x37, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x44, 0x65,
|
||||
0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
|
||||
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x66, 0x0a, 0x10, 0x68, 0x65,
|
||||
0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x52, 0x0f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x22, 0x88, 0x08, 0x0a, 0x1a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x45, 0x6e,
|
||||
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d,
|
||||
0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69,
|
||||
0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
|
||||
0x5f, 0x70, 0x61, 0x6e, 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50,
|
||||
0x61, 0x6e, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x68, 0x0a,
|
||||
0x0d, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x73, 0x74,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x62, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x6e, 0x64,
|
||||
0x5f, 0x72, 0x6f, 0x62, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62,
|
||||
0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x37, 0x57, 0x65, 0x69,
|
||||
0x67, 0x68, 0x74, 0x65, 0x64, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x73, 0x22, 0x68, 0x0a, 0x1c, 0x4c, 0x34, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x44,
|
||||
0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
|
||||
0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x1c,
|
||||
0x4c, 0x37, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
|
||||
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x12, 0x34, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06,
|
||||
0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x66, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
|
||||
0x5f, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c,
|
||||
0x69, 0x63, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x48, 0x00, 0x52,
|
||||
0x0a, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x12, 0x55, 0x0a, 0x06, 0x72,
|
||||
0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x68, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69,
|
||||
0x63, 0x79, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x64,
|
||||
0x6f, 0x6d, 0x12, 0x5c, 0x0a, 0x09, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18,
|
||||
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74,
|
||||
0x61, 0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x69, 0x6e, 0x67,
|
||||
0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x08, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68,
|
||||
0x12, 0x55, 0x0a, 0x06, 0x6d, 0x61, 0x67, 0x6c, 0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x48,
|
||||
0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x68,
|
||||
0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x88,
|
||||
0x08, 0x0a, 0x1a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c,
|
||||
0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x61, 0x67, 0x6c, 0x65, 0x76, 0x48, 0x00, 0x52,
|
||||
0x06, 0x6d, 0x61, 0x67, 0x6c, 0x65, 0x76, 0x12, 0x67, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75,
|
||||
0x69, 0x74, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
|
||||
0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x52,
|
||||
0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73,
|
||||
0x12, 0x6a, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65,
|
||||
0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c,
|
||||
0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x86, 0x01, 0x0a,
|
||||
0x1b, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x46, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
|
||||
0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||
0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x19, 0x75, 0x70, 0x73, 0x74,
|
||||
0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74,
|
||||
0x5f, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08,
|
||||
0x52, 0x0e, 0x75, 0x73, 0x65, 0x41, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65,
|
||||
0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x57, 0x0a,
|
||||
0x14, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0c, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f,
|
||||
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
|
||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49,
|
||||
0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x68, 0x6f, 0x69, 0x63,
|
||||
0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69,
|
||||
0x63, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x22, 0x10, 0x0a, 0x0e,
|
||||
0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x22, 0xa6,
|
||||
0x01, 0x0a, 0x10, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x48,
|
||||
0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72,
|
||||
0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
|
||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
||||
0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x6d, 0x69,
|
||||
0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x48, 0x0a,
|
||||
0x11, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69,
|
||||
0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36,
|
||||
0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x52,
|
||||
0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x4c, 0x42, 0x50, 0x6f, 0x6c,
|
||||
0x69, 0x63, 0x79, 0x4d, 0x61, 0x67, 0x6c, 0x65, 0x76, 0x22, 0x77, 0x0a, 0x0f, 0x43, 0x69, 0x72,
|
||||
0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x64, 0x0a, 0x0f,
|
||||
0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74,
|
||||
0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x6d, 0x69,
|
||||
0x74, 0x73, 0x52, 0x0e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x6d, 0x69,
|
||||
0x74, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c,
|
||||
0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e,
|
||||
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
|
||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
||||
0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x6d, 0x61,
|
||||
0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x14,
|
||||
0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x73, 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, 0x55, 0x49, 0x6e,
|
||||
0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e,
|
||||
0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x17,
|
||||
0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
|
||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||
0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x61, 0x78,
|
||||
0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x73, 0x22, 0x83, 0x03, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65,
|
||||
0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 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, 0x12, 0x45,
|
||||
0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78,
|
||||
0x78, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
|
||||
0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69,
|
||||
0x76, 0x65, 0x35, 0x78, 0x78, 0x12, 0x58, 0x0a, 0x19, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x69,
|
||||
0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35,
|
||||
0x78, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
|
||||
0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e,
|
||||
0x67, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x35, 0x78, 0x78, 0x12,
|
||||
0x4e, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||
0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
|
||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||
0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78,
|
||||
0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12,
|
||||
0x47, 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 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, 0x10, 0x62, 0x61, 0x73, 0x65, 0x45, 0x6a, 0x65, 0x63,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8b, 0x02, 0x0a, 0x19, 0x55, 0x70, 0x73,
|
||||
0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f,
|
||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 0x0a, 0x12, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65,
|
||||
0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x52, 0x10, 0x74, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x54, 0x69,
|
||||
0x6d, 0x65, 0x12, 0x52, 0x0a, 0x16, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x52, 0x14, 0x74, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e,
|
||||
0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x4e, 0x0a, 0x14, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65,
|
||||
0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x52, 0x12, 0x74, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65,
|
||||
0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x22, 0x64, 0x0a, 0x1e, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68,
|
||||
0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f,
|
||||
0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e,
|
||||
0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f,
|
||||
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x80, 0x05, 0x0a,
|
||||
0x16, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75,
|
||||
0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
|
||||
0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e,
|
||||
0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x64,
|
||||
0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x6e, 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72,
|
||||
0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x69,
|
||||
0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x6e, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
|
||||
0x6f, 0x6c, 0x64, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79,
|
||||
0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x68, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76,
|
||||
0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69,
|
||||
0x74, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43,
|
||||
0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x0f,
|
||||
0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12,
|
||||
0x6a, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65,
|
||||
0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72,
|
||||
0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72,
|
||||
0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c, 0x69,
|
||||
0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x86, 0x01, 0x0a, 0x1b,
|
||||
0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x46, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
|
||||
0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x19, 0x75, 0x70, 0x73, 0x74, 0x72,
|
||||
0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f,
|
||||
0x73, 0x74, 0x61, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||
0x0e, 0x75, 0x73, 0x65, 0x41, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22,
|
||||
0xc8, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69,
|
||||
0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a,
|
||||
0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
|
||||
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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75,
|
||||
0x74, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x6e,
|
||||
0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x08, 0x52, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x6e, 0x69, 0x63,
|
||||
0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x68, 0x0a, 0x0d, 0x6c, 0x65, 0x61,
|
||||
0x73, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x41, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||
0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c,
|
||||
0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x12, 0x62, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x72, 0x6f, 0x62,
|
||||
0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x74, 0x12, 0x67, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x62, 0x72, 0x65,
|
||||
0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69,
|
||||
0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75,
|
||||
0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x2a, 0x46, 0x0a, 0x0d, 0x44, 0x69,
|
||||
0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x44,
|
||||
0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f,
|
||||
0x47, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x49, 0x53, 0x43, 0x4f,
|
||||
0x56, 0x45, 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54,
|
||||
0x10, 0x01, 0x42, 0xd8, 0x02, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68,
|
||||
0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78,
|
||||
0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52,
|
||||
0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x6f, 0x75,
|
||||
0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x12, 0x55, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f,
|
||||
0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x61,
|
||||
0x6e, 0x64, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x5c,
|
||||
0x0a, 0x09, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
|
||||
0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68,
|
||||
0x48, 0x00, 0x52, 0x08, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x12, 0x55, 0x0a, 0x06,
|
||||
0x6d, 0x61, 0x67, 0x6c, 0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62,
|
||||
0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x42, 0x50, 0x6f, 0x6c,
|
||||
0x69, 0x63, 0x79, 0x4d, 0x61, 0x67, 0x6c, 0x65, 0x76, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x61, 0x67,
|
||||
0x6c, 0x65, 0x76, 0x12, 0x67, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x62,
|
||||
0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e,
|
||||
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70,
|
||||
0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x69, 0x72, 0x63,
|
||||
0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x63, 0x69, 0x72,
|
||||
0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x6a, 0x0a, 0x11,
|
||||
0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74,
|
||||
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44,
|
||||
0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x86, 0x01, 0x0a, 0x1b, 0x75, 0x70, 0x73,
|
||||
0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46,
|
||||
0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
|
||||
0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x73,
|
||||
0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f,
|
||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x19, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,
|
||||
0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x73, 0x12, 0x29, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x61,
|
||||
0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x73,
|
||||
0x65, 0x41, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a, 0x09,
|
||||
0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x57, 0x0a, 0x14, 0x4c, 0x42, 0x50,
|
||||
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x12, 0x3f, 0x0a, 0x0c, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
|
||||
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
|
||||
0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x75,
|
||||
0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x6f,
|
||||
0x75, 0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x22, 0x10, 0x0a, 0x0e, 0x4c, 0x42, 0x50, 0x6f,
|
||||
0x6c, 0x69, 0x63, 0x79, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x22, 0xa6, 0x01, 0x0a, 0x10, 0x4c,
|
||||
0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x12,
|
||||
0x48, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f,
|
||||
0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
|
||||
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
|
||||
0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75,
|
||||
0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x48, 0x0a, 0x11, 0x6d, 0x61, 0x78,
|
||||
0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53,
|
||||
0x69, 0x7a, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x4c, 0x42, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d,
|
||||
0x61, 0x67, 0x6c, 0x65, 0x76, 0x22, 0x77, 0x0a, 0x0f, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74,
|
||||
0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x64, 0x0a, 0x0f, 0x75, 0x70, 0x73, 0x74,
|
||||
0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
|
||||
0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x0e,
|
||||
0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xfd,
|
||||
0x01, 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x6d, 0x69, 0x74,
|
||||
0x73, 0x12, 0x45, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
|
||||
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
|
||||
0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e,
|
||||
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f,
|
||||
0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73,
|
||||
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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f,
|
||||
0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
|
||||
0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63,
|
||||
0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x83,
|
||||
0x03, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 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, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x35, 0x78,
|
||||
0x78, 0x12, 0x58, 0x0a, 0x19, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x52, 0x17, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x35, 0x78, 0x78, 0x12, 0x4e, 0x0a, 0x14, 0x6d,
|
||||
0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x63,
|
||||
0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
|
||||
0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x45, 0x6a, 0x65, 0x63,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x12, 0x62,
|
||||
0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d,
|
||||
0x65, 0x18, 0x05, 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, 0x10, 0x62, 0x61, 0x73, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x22, 0x8b, 0x02, 0x0a, 0x19, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61,
|
||||
0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x12, 0x4a, 0x0a, 0x12, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
|
||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
||||
0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x74, 0x63,
|
||||
0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x52,
|
||||
0x0a, 0x16, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f,
|
||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x74, 0x63,
|
||||
0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,
|
||||
0x61, 0x6c, 0x12, 0x4e, 0x0a, 0x14, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||
0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12,
|
||||
0x74, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x62,
|
||||
0x65, 0x73, 0x22, 0x64, 0x0a, 0x1e, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67,
|
||||
0x68, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f,
|
||||
0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||
0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x80, 0x05, 0x0a, 0x16, 0x44, 0x4e, 0x53,
|
||||
0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74,
|
||||
0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x61, 0x62,
|
||||
0x6c, 0x65, 0x5f, 0x70, 0x61, 0x6e, 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
|
||||
0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
|
||||
0x65, 0x50, 0x61, 0x6e, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12,
|
||||
0x61, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x79, 0x70,
|
||||
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54,
|
||||
0x79, 0x70, 0x65, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x79,
|
||||
0x70, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x62, 0x72,
|
||||
0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62,
|
||||
0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75,
|
||||
0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x63, 0x69, 0x72, 0x63,
|
||||
0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x6a, 0x0a, 0x11, 0x6f,
|
||||
0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
|
||||
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73,
|
||||
0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65,
|
||||
0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x86, 0x01, 0x0a, 0x1b, 0x75, 0x70, 0x73, 0x74,
|
||||
0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||
0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e,
|
||||
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70,
|
||||
0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x73, 0x74,
|
||||
0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x19, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43,
|
||||
0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x12, 0x29, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74,
|
||||
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x73, 0x65,
|
||||
0x41, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x19,
|
||||
0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72,
|
||||
0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e,
|
||||
0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63,
|
||||
0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x67, 0x0a,
|
||||
0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72,
|
||||
0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
|
||||
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65,
|
||||
0x61, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72,
|
||||
0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x2a, 0x46, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76,
|
||||
0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x43, 0x4f,
|
||||
0x56, 0x45, 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41,
|
||||
0x4c, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x59,
|
||||
0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x10, 0x01, 0x42, 0xd8,
|
||||
0x02, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
|
||||
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x50, 0x01, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d,
|
||||
0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x70, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa2, 0x02, 0x05, 0x48, 0x43, 0x4d, 0x56,
|
||||
0x50, 0xaa, 0x02, 0x2b, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x2e, 0x50, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0xca,
|
||||
0x02, 0x2b, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
||||
0x5c, 0x50, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0xe2, 0x02, 0x37,
|
||||
0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x50,
|
||||
0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d,
|
||||
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2f, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x65, 0x73,
|
||||
0x68, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3a, 0x3a, 0x50, 0x62, 0x70,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
|
||||
0x2f, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
||||
0x2f, 0x70, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0xa2, 0x02, 0x05,
|
||||
0x48, 0x43, 0x4d, 0x56, 0x50, 0xaa, 0x02, 0x2b, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x31,
|
||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74,
|
||||
0x61, 0x74, 0x65, 0xca, 0x02, 0x2b, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c,
|
||||
0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c,
|
||||
0x70, 0x68, 0x61, 0x31, 0x5c, 0x50, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0xe2, 0x02, 0x37, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||
0x61, 0x31, 0x5c, 0x50, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5c,
|
||||
0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2f, 0x48, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a,
|
||||
0x3a, 0x4d, 0x65, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3a,
|
||||
0x3a, 0x50, 0x62, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
|
@ -38,6 +38,8 @@ message FailoverGroupConfig {
|
|||
}
|
||||
|
||||
message EndpointGroup {
|
||||
// name is used to name the cluster created. This is only required when used inside of a FailoverGroup.
|
||||
string name = 5;
|
||||
oneof group {
|
||||
// dynamic endpoint group is used to reach mesh destinations that are dynamically configured from Consul's catalog.
|
||||
DynamicEndpointGroup dynamic = 1;
|
||||
|
|
Loading…
Reference in New Issue