mirror of https://github.com/status-im/consul.git
dataplane: Allow getting bootstrap parameters when using V2 APIs (#18504)
This PR enables the GetEnvoyBootstrapParams endpoint to construct envoy bootstrap parameters from v2 catalog and mesh resources. * Make bootstrap request and response parameters less specific to services so that we can re-use them for workloads or service instances. * Remove ServiceKind from bootstrap params response. This value was unused previously and is not needed for V2. * Make access logs generation generic so that we can generate them using v1 or v2 resources.
This commit is contained in:
parent
80d72e71c1
commit
4eb2197e82
|
@ -0,0 +1,3 @@
|
|||
```release-note:feature
|
||||
dataplane: Allow getting bootstrap parameters when using V2 APIs
|
||||
```
|
|
@ -28,6 +28,11 @@ issues:
|
|||
- linters: [staticcheck]
|
||||
text: 'SA1019: "io/ioutil" has been deprecated since Go 1.16'
|
||||
|
||||
# Allow usage of deprecated values.
|
||||
- linters: [ staticcheck ]
|
||||
text: 'SA1019:'
|
||||
path: "(agent/grpc-external)"
|
||||
|
||||
# An argument that always receives the same value is often not a problem.
|
||||
- linters: [unparam]
|
||||
text: "always receives"
|
||||
|
|
|
@ -816,16 +816,7 @@ func NewServer(config *Config, flat Deps, externalGRPCServer *grpc.Server,
|
|||
s.reportingManager = reporting.NewReportingManager(s.logger, getEnterpriseReportingDeps(flat), s, s.fsm.State())
|
||||
go s.reportingManager.Run(&lib.StopChannelContext{StopCh: s.shutdownCh})
|
||||
|
||||
// Initialize external gRPC server
|
||||
s.setupExternalGRPC(config, flat.Registry, logger)
|
||||
|
||||
// Initialize internal gRPC server.
|
||||
//
|
||||
// Note: some "external" gRPC services are also exposed on the internal gRPC server
|
||||
// to enable RPC forwarding.
|
||||
s.grpcHandler = newGRPCHandlerFromConfig(flat, config, s)
|
||||
s.grpcLeaderForwarder = flat.LeaderForwarder
|
||||
|
||||
// Setup resource service clients.
|
||||
if err := s.setupSecureResourceServiceClient(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -834,6 +825,16 @@ func NewServer(config *Config, flat Deps, externalGRPCServer *grpc.Server,
|
|||
return nil, err
|
||||
}
|
||||
|
||||
// Initialize external gRPC server
|
||||
s.setupExternalGRPC(config, flat, logger)
|
||||
|
||||
// Initialize internal gRPC server.
|
||||
//
|
||||
// Note: some "external" gRPC services are also exposed on the internal gRPC server
|
||||
// to enable RPC forwarding.
|
||||
s.grpcHandler = newGRPCHandlerFromConfig(flat, config, s)
|
||||
s.grpcLeaderForwarder = flat.LeaderForwarder
|
||||
|
||||
s.controllerManager = controller.NewManager(
|
||||
s.insecureResourceServiceClient,
|
||||
logger.Named(logging.ControllerRuntime),
|
||||
|
@ -1309,7 +1310,7 @@ func (s *Server) setupRPC() error {
|
|||
}
|
||||
|
||||
// Initialize and register services on external gRPC server.
|
||||
func (s *Server) setupExternalGRPC(config *Config, typeRegistry resource.Registry, logger hclog.Logger) {
|
||||
func (s *Server) setupExternalGRPC(config *Config, deps Deps, logger hclog.Logger) {
|
||||
s.externalACLServer = aclgrpc.NewServer(aclgrpc.Config{
|
||||
ACLsEnabled: s.config.ACLsEnabled,
|
||||
ForwardRPC: func(info structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) {
|
||||
|
@ -1342,10 +1343,12 @@ func (s *Server) setupExternalGRPC(config *Config, typeRegistry resource.Registr
|
|||
s.externalConnectCAServer.Register(s.externalGRPCServer)
|
||||
|
||||
dataplane.NewServer(dataplane.Config{
|
||||
GetStore: func() dataplane.StateStore { return s.FSM().State() },
|
||||
Logger: logger.Named("grpc-api.dataplane"),
|
||||
ACLResolver: s.ACLResolver,
|
||||
Datacenter: s.config.Datacenter,
|
||||
GetStore: func() dataplane.StateStore { return s.FSM().State() },
|
||||
Logger: logger.Named("grpc-api.dataplane"),
|
||||
ACLResolver: s.ACLResolver,
|
||||
Datacenter: s.config.Datacenter,
|
||||
EnableV2: stringslice.Contains(deps.Experiments, CatalogResourceExperimentName),
|
||||
ResourceAPIClient: s.insecureResourceServiceClient,
|
||||
}).Register(s.externalGRPCServer)
|
||||
|
||||
serverdiscovery.NewServer(serverdiscovery.Config{
|
||||
|
@ -1375,7 +1378,7 @@ func (s *Server) setupExternalGRPC(config *Config, typeRegistry resource.Registr
|
|||
s.peerStreamServer.Register(s.externalGRPCServer)
|
||||
|
||||
s.resourceServiceServer = resourcegrpc.NewServer(resourcegrpc.Config{
|
||||
Registry: typeRegistry,
|
||||
Registry: deps.Registry,
|
||||
Backend: s.raftStorageBackend,
|
||||
ACLResolver: s.ACLResolver,
|
||||
Logger: logger.Named("grpc-api.resource"),
|
||||
|
|
|
@ -8,11 +8,19 @@ import (
|
|||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/hashicorp/go-hclog"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
|
||||
"github.com/hashicorp/consul/internal/catalog"
|
||||
"github.com/hashicorp/consul/internal/mesh"
|
||||
pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v1alpha1"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/agent/configentry"
|
||||
"github.com/hashicorp/consul/agent/consul/state"
|
||||
|
@ -23,7 +31,11 @@ import (
|
|||
)
|
||||
|
||||
func (s *Server) GetEnvoyBootstrapParams(ctx context.Context, req *pbdataplane.GetEnvoyBootstrapParamsRequest) (*pbdataplane.GetEnvoyBootstrapParamsResponse, error) {
|
||||
logger := s.Logger.Named("get-envoy-bootstrap-params").With("service_id", req.GetServiceId(), "request_id", external.TraceID())
|
||||
proxyID := req.ProxyId
|
||||
if req.GetServiceId() != "" {
|
||||
proxyID = req.GetServiceId()
|
||||
}
|
||||
logger := s.Logger.Named("get-envoy-bootstrap-params").With("proxy_id", proxyID, "request_id", external.TraceID())
|
||||
|
||||
logger.Trace("Started processing request")
|
||||
defer logger.Trace("Finished processing request")
|
||||
|
@ -40,9 +52,84 @@ func (s *Server) GetEnvoyBootstrapParams(ctx context.Context, req *pbdataplane.G
|
|||
return nil, status.Error(codes.Unauthenticated, err.Error())
|
||||
}
|
||||
|
||||
if s.EnableV2 {
|
||||
// Get the workload.
|
||||
workloadId := &pbresource.ID{
|
||||
Name: proxyID,
|
||||
Tenancy: &pbresource.Tenancy{
|
||||
Namespace: req.Namespace,
|
||||
Partition: req.Partition,
|
||||
PeerName: "local",
|
||||
},
|
||||
Type: catalog.WorkloadType,
|
||||
}
|
||||
workloadRsp, err := s.ResourceAPIClient.Read(ctx, &pbresource.ReadRequest{
|
||||
Id: workloadId,
|
||||
})
|
||||
if err != nil {
|
||||
// This error should already include the gRPC status code and so we don't need to wrap it
|
||||
// in status.Error.
|
||||
return nil, err
|
||||
}
|
||||
var workload pbcatalog.Workload
|
||||
err = workloadRsp.Resource.Data.UnmarshalTo(&workload)
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Internal, "failed to parse workload data")
|
||||
}
|
||||
|
||||
// Only workloads that have an associated identity can ask for proxy bootstrap parameters.
|
||||
if workload.Identity == "" {
|
||||
return nil, status.Errorf(codes.InvalidArgument, "workload %q doesn't have identity associated with it", req.ProxyId)
|
||||
}
|
||||
|
||||
// todo (ishustava): ACL enforcement ensuring there's identity:write permissions.
|
||||
|
||||
// Get all proxy configurations for this workload. Currently we're only looking
|
||||
// for proxy configurations in the same tenancy as the workload.
|
||||
// todo (ishustava): we need to support wildcard proxy configurations as well.
|
||||
|
||||
proxyCfgList, err := s.ResourceAPIClient.List(ctx, &pbresource.ListRequest{
|
||||
Tenancy: workloadRsp.Resource.Id.GetTenancy(),
|
||||
Type: mesh.ProxyConfigurationType,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Collect and merge proxy configs.
|
||||
// todo (ishustava): sorting and conflict resolution.
|
||||
bootstrapCfg := &pbmesh.BootstrapConfig{}
|
||||
dynamicCfg := &pbmesh.DynamicConfig{}
|
||||
for _, cfgResource := range proxyCfgList.Resources {
|
||||
var proxyCfg pbmesh.ProxyConfiguration
|
||||
err = cfgResource.Data.UnmarshalTo(&proxyCfg)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to parse proxy configuration data: %q", cfgResource.Id.Name)
|
||||
}
|
||||
if isWorkloadSelected(req.ProxyId, proxyCfg.Workloads) {
|
||||
proto.Merge(bootstrapCfg, proxyCfg.BootstrapConfig)
|
||||
proto.Merge(dynamicCfg, proxyCfg.DynamicConfig)
|
||||
}
|
||||
}
|
||||
|
||||
accessLogs := makeAccessLogs(dynamicCfg.GetAccessLogs(), logger)
|
||||
|
||||
return &pbdataplane.GetEnvoyBootstrapParamsResponse{
|
||||
Identity: workload.Identity,
|
||||
Partition: workloadRsp.Resource.Id.Tenancy.Partition,
|
||||
Namespace: workloadRsp.Resource.Id.Tenancy.Namespace,
|
||||
BootstrapConfig: bootstrapCfg,
|
||||
Datacenter: s.Datacenter,
|
||||
NodeName: workload.NodeName,
|
||||
AccessLogs: accessLogs,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// The remainder of this file focuses on v1 implementation of this endpoint.
|
||||
|
||||
store := s.GetStore()
|
||||
|
||||
_, svc, err := store.ServiceNode(req.GetNodeId(), req.GetNodeName(), req.GetServiceId(), &entMeta, structs.DefaultPeerKeyword)
|
||||
_, svc, err := store.ServiceNode(req.GetNodeId(), req.GetNodeName(), proxyID, &entMeta, structs.DefaultPeerKeyword)
|
||||
if err != nil {
|
||||
logger.Error("Error looking up service", "error", err)
|
||||
if errors.Is(err, state.ErrNodeNotFound) {
|
||||
|
@ -81,8 +168,34 @@ func (s *Server) GetEnvoyBootstrapParams(ctx context.Context, req *pbdataplane.G
|
|||
// Inspect access logging
|
||||
// This is non-essential, and don't want to return an error unless there is a more serious issue
|
||||
var accessLogs []string
|
||||
if ns != nil && ns.Proxy.AccessLogs.Enabled {
|
||||
envoyLoggers, err := accesslogs.MakeAccessLogs(&ns.Proxy.AccessLogs, false)
|
||||
if ns != nil {
|
||||
accessLogs = makeAccessLogs(&ns.Proxy.AccessLogs, logger)
|
||||
}
|
||||
|
||||
// Build out the response
|
||||
var serviceName string
|
||||
if svc.ServiceKind == structs.ServiceKindConnectProxy {
|
||||
serviceName = svc.ServiceProxy.DestinationServiceName
|
||||
} else {
|
||||
serviceName = svc.ServiceName
|
||||
}
|
||||
|
||||
return &pbdataplane.GetEnvoyBootstrapParamsResponse{
|
||||
Identity: serviceName,
|
||||
Service: serviceName,
|
||||
Partition: svc.EnterpriseMeta.PartitionOrDefault(),
|
||||
Namespace: svc.EnterpriseMeta.NamespaceOrDefault(),
|
||||
Config: bootstrapConfig,
|
||||
Datacenter: s.Datacenter,
|
||||
NodeName: svc.Node,
|
||||
AccessLogs: accessLogs,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func makeAccessLogs(logs structs.AccessLogs, logger hclog.Logger) []string {
|
||||
var accessLogs []string
|
||||
if logs.GetEnabled() {
|
||||
envoyLoggers, err := accesslogs.MakeAccessLogs(logs, false)
|
||||
if err != nil {
|
||||
logger.Warn("Error creating the envoy access log config", "error", err)
|
||||
}
|
||||
|
@ -98,41 +211,21 @@ func (s *Server) GetEnvoyBootstrapParams(ctx context.Context, req *pbdataplane.G
|
|||
}
|
||||
}
|
||||
|
||||
// Build out the response
|
||||
var serviceName string
|
||||
if svc.ServiceKind == structs.ServiceKindConnectProxy {
|
||||
serviceName = svc.ServiceProxy.DestinationServiceName
|
||||
} else {
|
||||
serviceName = svc.ServiceName
|
||||
}
|
||||
|
||||
return &pbdataplane.GetEnvoyBootstrapParamsResponse{
|
||||
Service: serviceName,
|
||||
Partition: svc.EnterpriseMeta.PartitionOrDefault(),
|
||||
Namespace: svc.EnterpriseMeta.NamespaceOrDefault(),
|
||||
Config: bootstrapConfig,
|
||||
Datacenter: s.Datacenter,
|
||||
ServiceKind: convertToResponseServiceKind(svc.ServiceKind),
|
||||
NodeName: svc.Node,
|
||||
NodeId: string(svc.ID),
|
||||
AccessLogs: accessLogs,
|
||||
}, nil
|
||||
return accessLogs
|
||||
}
|
||||
|
||||
func convertToResponseServiceKind(serviceKind structs.ServiceKind) (respKind pbdataplane.ServiceKind) {
|
||||
switch serviceKind {
|
||||
case structs.ServiceKindConnectProxy:
|
||||
respKind = pbdataplane.ServiceKind_SERVICE_KIND_CONNECT_PROXY
|
||||
case structs.ServiceKindMeshGateway:
|
||||
respKind = pbdataplane.ServiceKind_SERVICE_KIND_MESH_GATEWAY
|
||||
case structs.ServiceKindTerminatingGateway:
|
||||
respKind = pbdataplane.ServiceKind_SERVICE_KIND_TERMINATING_GATEWAY
|
||||
case structs.ServiceKindIngressGateway:
|
||||
respKind = pbdataplane.ServiceKind_SERVICE_KIND_INGRESS_GATEWAY
|
||||
case structs.ServiceKindAPIGateway:
|
||||
respKind = pbdataplane.ServiceKind_SERVICE_KIND_API_GATEWAY
|
||||
case structs.ServiceKindTypical:
|
||||
respKind = pbdataplane.ServiceKind_SERVICE_KIND_TYPICAL
|
||||
func isWorkloadSelected(name string, selector *pbcatalog.WorkloadSelector) bool {
|
||||
for _, prefix := range selector.Prefixes {
|
||||
if strings.Contains(name, prefix) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
for _, selectorName := range selector.Names {
|
||||
if name == selectorName {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ package dataplane
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/go-hclog"
|
||||
|
@ -14,13 +15,22 @@ import (
|
|||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
|
||||
svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing"
|
||||
"github.com/hashicorp/consul/internal/catalog"
|
||||
"github.com/hashicorp/consul/internal/mesh"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v1alpha1"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"github.com/hashicorp/consul/proto/private/prototest"
|
||||
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/acl/resolver"
|
||||
external "github.com/hashicorp/consul/agent/grpc-external"
|
||||
"github.com/hashicorp/consul/agent/grpc-external/testutils"
|
||||
"github.com/hashicorp/consul/agent/structs"
|
||||
"github.com/hashicorp/consul/proto-public/pbdataplane"
|
||||
"github.com/hashicorp/consul/types"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -41,13 +51,15 @@ const (
|
|||
proxyDefaultsRequestTimeout = 1111
|
||||
serviceDefaultsProtocol = "tcp"
|
||||
serviceDefaultsConnectTimeout = 4444
|
||||
|
||||
testAccessLogs = "{\"name\":\"Consul Listener Filter Log\",\"typedConfig\":{\"@type\":\"type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog\",\"logFormat\":{\"jsonFormat\":{\"custom_field\":\"%START_TIME%\"}}}}"
|
||||
)
|
||||
|
||||
func testRegisterRequestProxy(t *testing.T) *structs.RegisterRequest {
|
||||
return &structs.RegisterRequest{
|
||||
Datacenter: serverDC,
|
||||
Node: nodeName,
|
||||
ID: types.NodeID(nodeID),
|
||||
ID: nodeID,
|
||||
Address: "127.0.0.1",
|
||||
Service: &structs.NodeService{
|
||||
Kind: structs.ServiceKindConnectProxy,
|
||||
|
@ -68,7 +80,7 @@ func testRegisterRequestProxy(t *testing.T) *structs.RegisterRequest {
|
|||
|
||||
func testRegisterIngressGateway(t *testing.T) *structs.RegisterRequest {
|
||||
registerReq := structs.TestRegisterIngressGateway(t)
|
||||
registerReq.ID = types.NodeID("2980b72b-bd9d-9d7b-d4f9-951bf7508d95")
|
||||
registerReq.ID = "2980b72b-bd9d-9d7b-d4f9-951bf7508d95"
|
||||
registerReq.Service.ID = registerReq.Service.Service
|
||||
registerReq.Service.Proxy.Config = map[string]interface{}{
|
||||
proxyConfigKey: proxyConfigValue,
|
||||
|
@ -167,9 +179,7 @@ func TestGetEnvoyBootstrapParams_Success(t *testing.T) {
|
|||
require.Equal(t, tc.registerReq.EnterpriseMeta.PartitionOrDefault(), resp.Partition)
|
||||
require.Equal(t, tc.registerReq.EnterpriseMeta.NamespaceOrDefault(), resp.Namespace)
|
||||
requireConfigField(t, resp, proxyConfigKey, structpb.NewStringValue(proxyConfigValue))
|
||||
require.Equal(t, convertToResponseServiceKind(tc.registerReq.Service.Kind), resp.ServiceKind)
|
||||
require.Equal(t, tc.registerReq.Node, resp.NodeName)
|
||||
require.Equal(t, string(tc.registerReq.ID), resp.NodeId)
|
||||
|
||||
if tc.serviceDefaults != nil && tc.proxyDefaults != nil {
|
||||
// service-defaults take precedence over proxy-defaults
|
||||
|
@ -242,6 +252,158 @@ func TestGetEnvoyBootstrapParams_Success(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestGetEnvoyBootstrapParams_Success_EnableV2(t *testing.T) {
|
||||
type testCase struct {
|
||||
name string
|
||||
workloadData *pbcatalog.Workload
|
||||
proxyCfgs []*pbmesh.ProxyConfiguration
|
||||
expBootstrapCfg *pbmesh.BootstrapConfig
|
||||
expAccessLogs string
|
||||
}
|
||||
|
||||
run := func(t *testing.T, tc testCase) {
|
||||
resourceClient := svctest.RunResourceService(t, catalog.RegisterTypes, mesh.RegisterTypes)
|
||||
|
||||
options := structs.QueryOptions{Token: testToken}
|
||||
ctx, err := external.ContextWithQueryOptions(context.Background(), options)
|
||||
require.NoError(t, err)
|
||||
|
||||
aclResolver := &MockACLResolver{}
|
||||
|
||||
server := NewServer(Config{
|
||||
Logger: hclog.NewNullLogger(),
|
||||
ACLResolver: aclResolver,
|
||||
Datacenter: serverDC,
|
||||
EnableV2: true,
|
||||
ResourceAPIClient: resourceClient,
|
||||
})
|
||||
client := testClient(t, server)
|
||||
|
||||
// Add required fields to workload data.
|
||||
tc.workloadData.Addresses = []*pbcatalog.WorkloadAddress{
|
||||
{
|
||||
Host: "127.0.0.1",
|
||||
},
|
||||
}
|
||||
tc.workloadData.Ports = map[string]*pbcatalog.WorkloadPort{
|
||||
"tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP},
|
||||
}
|
||||
workloadResource := resourcetest.Resource(catalog.WorkloadType, "test-workload").
|
||||
WithData(t, tc.workloadData).
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
Write(t, resourceClient)
|
||||
|
||||
// Create any proxy cfg resources.
|
||||
for i, cfg := range tc.proxyCfgs {
|
||||
resourcetest.Resource(mesh.ProxyConfigurationType, fmt.Sprintf("proxy-cfg-%d", i)).
|
||||
WithData(t, cfg).
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
Write(t, resourceClient)
|
||||
}
|
||||
|
||||
req := &pbdataplane.GetEnvoyBootstrapParamsRequest{
|
||||
ProxyId: workloadResource.Id.Name,
|
||||
Namespace: workloadResource.Id.Tenancy.Namespace,
|
||||
Partition: workloadResource.Id.Tenancy.Partition,
|
||||
}
|
||||
|
||||
aclResolver.On("ResolveTokenAndDefaultMeta", testToken, mock.Anything, mock.Anything).
|
||||
Return(testutils.ACLServiceRead(t, workloadResource.Id.Name), nil)
|
||||
|
||||
resp, err := client.GetEnvoyBootstrapParams(ctx, req)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, tc.workloadData.Identity, resp.Identity)
|
||||
require.Equal(t, serverDC, resp.Datacenter)
|
||||
require.Equal(t, workloadResource.Id.Tenancy.Partition, resp.Partition)
|
||||
require.Equal(t, workloadResource.Id.Tenancy.Namespace, resp.Namespace)
|
||||
require.Equal(t, resp.NodeName, tc.workloadData.NodeName)
|
||||
prototest.AssertDeepEqual(t, tc.expBootstrapCfg, resp.BootstrapConfig)
|
||||
if tc.expAccessLogs != "" {
|
||||
require.JSONEq(t, tc.expAccessLogs, resp.AccessLogs[0])
|
||||
}
|
||||
}
|
||||
|
||||
testCases := []testCase{
|
||||
{
|
||||
name: "workload without node",
|
||||
workloadData: &pbcatalog.Workload{
|
||||
Identity: "test-identity",
|
||||
},
|
||||
expBootstrapCfg: &pbmesh.BootstrapConfig{},
|
||||
},
|
||||
{
|
||||
name: "workload with node",
|
||||
workloadData: &pbcatalog.Workload{
|
||||
Identity: "test-identity",
|
||||
NodeName: "test-node",
|
||||
},
|
||||
expBootstrapCfg: &pbmesh.BootstrapConfig{},
|
||||
},
|
||||
{
|
||||
name: "single proxy configuration",
|
||||
workloadData: &pbcatalog.Workload{
|
||||
Identity: "test-identity",
|
||||
},
|
||||
proxyCfgs: []*pbmesh.ProxyConfiguration{
|
||||
{
|
||||
Workloads: &pbcatalog.WorkloadSelector{Names: []string{"test-workload"}},
|
||||
BootstrapConfig: &pbmesh.BootstrapConfig{
|
||||
DogstatsdUrl: "dogstats-url",
|
||||
},
|
||||
},
|
||||
},
|
||||
expBootstrapCfg: &pbmesh.BootstrapConfig{
|
||||
DogstatsdUrl: "dogstats-url",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "multiple proxy configurations",
|
||||
workloadData: &pbcatalog.Workload{
|
||||
Identity: "test-identity",
|
||||
},
|
||||
proxyCfgs: []*pbmesh.ProxyConfiguration{
|
||||
{
|
||||
Workloads: &pbcatalog.WorkloadSelector{Names: []string{"test-workload"}},
|
||||
BootstrapConfig: &pbmesh.BootstrapConfig{
|
||||
DogstatsdUrl: "dogstats-url",
|
||||
},
|
||||
},
|
||||
{
|
||||
Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"test-"}},
|
||||
BootstrapConfig: &pbmesh.BootstrapConfig{
|
||||
StatsdUrl: "stats-url",
|
||||
},
|
||||
DynamicConfig: &pbmesh.DynamicConfig{
|
||||
AccessLogs: &pbmesh.AccessLogsConfig{
|
||||
Enabled: true,
|
||||
JsonFormat: "{ \"custom_field\": \"%START_TIME%\" }",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Workloads: &pbcatalog.WorkloadSelector{Names: []string{"not-test-workload"}},
|
||||
BootstrapConfig: &pbmesh.BootstrapConfig{
|
||||
PrometheusBindAddr: "prom-addr",
|
||||
},
|
||||
},
|
||||
},
|
||||
expBootstrapCfg: &pbmesh.BootstrapConfig{
|
||||
DogstatsdUrl: "dogstats-url",
|
||||
StatsdUrl: "stats-url",
|
||||
},
|
||||
expAccessLogs: testAccessLogs,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetEnvoyBootstrapParams_Error(t *testing.T) {
|
||||
type testCase struct {
|
||||
name string
|
||||
|
@ -323,6 +485,98 @@ func TestGetEnvoyBootstrapParams_Error(t *testing.T) {
|
|||
|
||||
}
|
||||
|
||||
func TestGetEnvoyBootstrapParams_Error_EnableV2(t *testing.T) {
|
||||
type testCase struct {
|
||||
name string
|
||||
expectedErrCode codes.Code
|
||||
expecteErrMsg string
|
||||
workload *pbresource.Resource
|
||||
}
|
||||
|
||||
run := func(t *testing.T, tc testCase) {
|
||||
resourceClient := svctest.RunResourceService(t, catalog.RegisterTypes, mesh.RegisterTypes)
|
||||
|
||||
options := structs.QueryOptions{Token: testToken}
|
||||
ctx, err := external.ContextWithQueryOptions(context.Background(), options)
|
||||
require.NoError(t, err)
|
||||
|
||||
aclResolver := &MockACLResolver{}
|
||||
aclResolver.On("ResolveTokenAndDefaultMeta", testToken, mock.Anything, mock.Anything).
|
||||
Return(testutils.ACLServiceRead(t, "doesn't matter"), nil)
|
||||
|
||||
server := NewServer(Config{
|
||||
Logger: hclog.NewNullLogger(),
|
||||
ACLResolver: aclResolver,
|
||||
Datacenter: serverDC,
|
||||
EnableV2: true,
|
||||
ResourceAPIClient: resourceClient,
|
||||
})
|
||||
client := testClient(t, server)
|
||||
|
||||
var req pbdataplane.GetEnvoyBootstrapParamsRequest
|
||||
// Write the workload resource.
|
||||
if tc.workload != nil {
|
||||
_, err = resourceClient.Write(context.Background(), &pbresource.WriteRequest{
|
||||
Resource: tc.workload,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
req = pbdataplane.GetEnvoyBootstrapParamsRequest{
|
||||
ProxyId: tc.workload.Id.Name,
|
||||
Namespace: tc.workload.Id.Tenancy.Namespace,
|
||||
Partition: tc.workload.Id.Tenancy.Partition,
|
||||
}
|
||||
} else {
|
||||
req = pbdataplane.GetEnvoyBootstrapParamsRequest{
|
||||
ProxyId: "not-found",
|
||||
Namespace: "default",
|
||||
Partition: "default",
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := client.GetEnvoyBootstrapParams(ctx, &req)
|
||||
require.Nil(t, resp)
|
||||
require.Error(t, err)
|
||||
errStatus, ok := status.FromError(err)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, tc.expectedErrCode.String(), errStatus.Code().String())
|
||||
require.Equal(t, tc.expecteErrMsg, errStatus.Message())
|
||||
}
|
||||
|
||||
workload := resourcetest.Resource(catalog.WorkloadType, "test-workload").
|
||||
WithData(t, &pbcatalog.Workload{
|
||||
Addresses: []*pbcatalog.WorkloadAddress{
|
||||
{Host: "127.0.0.1"},
|
||||
},
|
||||
Ports: map[string]*pbcatalog.WorkloadPort{
|
||||
"tcp": {Port: 8080},
|
||||
},
|
||||
}).
|
||||
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||||
Build()
|
||||
|
||||
testCases := []testCase{
|
||||
{
|
||||
name: "workload doesn't exist",
|
||||
expectedErrCode: codes.NotFound,
|
||||
expecteErrMsg: "resource not found",
|
||||
},
|
||||
{
|
||||
name: "workload without identity",
|
||||
expectedErrCode: codes.InvalidArgument,
|
||||
expecteErrMsg: "workload \"test-workload\" doesn't have identity associated with it",
|
||||
workload: workload,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestGetEnvoyBootstrapParams_Unauthenticated(t *testing.T) {
|
||||
// Mock the ACL resolver to return ErrNotFound.
|
||||
aclResolver := &MockACLResolver{}
|
||||
|
|
|
@ -14,7 +14,7 @@ import (
|
|||
"github.com/hashicorp/consul/version"
|
||||
)
|
||||
|
||||
func (s *Server) GetSupportedDataplaneFeatures(ctx context.Context, req *pbdataplane.GetSupportedDataplaneFeaturesRequest) (*pbdataplane.GetSupportedDataplaneFeaturesResponse, error) {
|
||||
func (s *Server) GetSupportedDataplaneFeatures(ctx context.Context, _ *pbdataplane.GetSupportedDataplaneFeaturesRequest) (*pbdataplane.GetSupportedDataplaneFeaturesResponse, error) {
|
||||
logger := s.Logger.Named("get-supported-dataplane-features").With("request_id", external.TraceID())
|
||||
|
||||
logger.Trace("Started processing request")
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
package dataplane
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/hashicorp/go-hclog"
|
||||
|
@ -26,6 +27,10 @@ type Config struct {
|
|||
ACLResolver ACLResolver
|
||||
// Datacenter of the Consul server this gRPC server is hosted on
|
||||
Datacenter string
|
||||
|
||||
// EnableV2 indicates whether a feature flag for v2 APIs is provided.
|
||||
EnableV2 bool
|
||||
ResourceAPIClient pbresource.ResourceServiceClient
|
||||
}
|
||||
|
||||
type StateStore interface {
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/hashicorp/consul/lib"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -180,6 +181,39 @@ type AccessLogsConfig struct {
|
|||
TextFormat string `json:",omitempty" alias:"text_format"`
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) GetEnabled() bool {
|
||||
return c.Enabled
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) GetDisableListenerLogs() bool {
|
||||
return c.DisableListenerLogs
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) GetType() pbmesh.LogSinkType {
|
||||
switch c.Type {
|
||||
case FileLogSinkType:
|
||||
return pbmesh.LogSinkType_LOG_SINK_TYPE_FILE
|
||||
case StdErrLogSinkType:
|
||||
return pbmesh.LogSinkType_LOG_SINK_TYPE_STDERR
|
||||
case StdOutLogSinkType:
|
||||
return pbmesh.LogSinkType_LOG_SINK_TYPE_STDOUT
|
||||
}
|
||||
|
||||
return pbmesh.LogSinkType_LOG_SINK_TYPE_DEFAULT
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) GetPath() string {
|
||||
return c.Path
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) GetJsonFormat() string {
|
||||
return c.JSONFormat
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) GetTextFormat() string {
|
||||
return c.TextFormat
|
||||
}
|
||||
|
||||
func (c *AccessLogsConfig) IsZero() bool {
|
||||
if c == nil {
|
||||
return true
|
||||
|
@ -805,3 +839,12 @@ func (e *ExposeConfig) Finalize() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
type AccessLogs interface {
|
||||
GetEnabled() bool
|
||||
GetDisableListenerLogs() bool
|
||||
GetType() pbmesh.LogSinkType
|
||||
GetPath() string
|
||||
GetJsonFormat() string
|
||||
GetTextFormat() string
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
|
||||
envoy_fileaccesslog_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/access_loggers/file/v3"
|
||||
envoy_streamaccesslog_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/access_loggers/stream/v3"
|
||||
pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
"google.golang.org/protobuf/types/known/anypb"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
|
||||
|
@ -52,12 +53,12 @@ const (
|
|||
// on the proxy-defaults settings. Currently only one access logger is supported.
|
||||
// Listeners (as opposed to listener filters) can trigger an access log filter with the boolean.
|
||||
// Tests are located in agent/xds/listeners_test.go.
|
||||
func MakeAccessLogs(logs *structs.AccessLogsConfig, isListener bool) ([]*envoy_accesslog_v3.AccessLog, error) {
|
||||
if logs == nil || !logs.Enabled {
|
||||
func MakeAccessLogs(logs structs.AccessLogs, isListener bool) ([]*envoy_accesslog_v3.AccessLog, error) {
|
||||
if logs == nil || !logs.GetEnabled() {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
if isListener && logs.DisableListenerLogs {
|
||||
if isListener && logs.GetDisableListenerLogs() {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
@ -85,37 +86,37 @@ func MakeAccessLogs(logs *structs.AccessLogsConfig, isListener bool) ([]*envoy_a
|
|||
}
|
||||
|
||||
// getLogger returns an individual instance of an Envoy logger based on proxy-defaults
|
||||
func getLogger(logs *structs.AccessLogsConfig) (*anypb.Any, error) {
|
||||
func getLogger(logs structs.AccessLogs) (*anypb.Any, error) {
|
||||
logFormat, err := getLogFormat(logs)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not get envoy log format: %w", err)
|
||||
}
|
||||
|
||||
switch logs.Type {
|
||||
case structs.DefaultLogSinkType, structs.StdOutLogSinkType:
|
||||
switch logs.GetType() {
|
||||
case pbmesh.LogSinkType_LOG_SINK_TYPE_DEFAULT, pbmesh.LogSinkType_LOG_SINK_TYPE_STDOUT:
|
||||
return getStdoutLogger(logFormat)
|
||||
case structs.StdErrLogSinkType:
|
||||
case pbmesh.LogSinkType_LOG_SINK_TYPE_STDERR:
|
||||
return getStderrLogger(logFormat)
|
||||
case structs.FileLogSinkType:
|
||||
return getFileLogger(logFormat, logs.Path)
|
||||
case pbmesh.LogSinkType_LOG_SINK_TYPE_FILE:
|
||||
return getFileLogger(logFormat, logs.GetPath())
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported log format: %s", logs.Type)
|
||||
return nil, fmt.Errorf("unsupported log format: %s", logs.GetType())
|
||||
}
|
||||
}
|
||||
|
||||
// getLogFormat returns an Envoy log format object that is compatible with all log sinks.
|
||||
// If a format is not provided in the proxy-defaults, the default JSON format is used.
|
||||
func getLogFormat(logs *structs.AccessLogsConfig) (*envoy_core_v3.SubstitutionFormatString, error) {
|
||||
func getLogFormat(logs structs.AccessLogs) (*envoy_core_v3.SubstitutionFormatString, error) {
|
||||
|
||||
var format, formatType string
|
||||
if logs.TextFormat == "" && logs.JSONFormat == "" {
|
||||
if logs.GetTextFormat() == "" && logs.GetJsonFormat() == "" {
|
||||
format = defaultJSONFormat
|
||||
formatType = "json"
|
||||
} else if logs.JSONFormat != "" {
|
||||
format = logs.JSONFormat
|
||||
} else if logs.GetJsonFormat() != "" {
|
||||
format = logs.GetJsonFormat()
|
||||
formatType = "json"
|
||||
} else {
|
||||
format = logs.TextFormat
|
||||
format = logs.GetTextFormat()
|
||||
formatType = "text"
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ package pbdataplane
|
|||
|
||||
import (
|
||||
_ "github.com/hashicorp/consul/proto-public/annotations/ratelimit"
|
||||
v1alpha1 "github.com/hashicorp/consul/proto-public/pbmesh/v1alpha1"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
structpb "google.golang.org/protobuf/types/known/structpb"
|
||||
|
@ -313,7 +314,10 @@ type GetEnvoyBootstrapParamsRequest struct {
|
|||
// *GetEnvoyBootstrapParamsRequest_NodeName
|
||||
NodeSpec isGetEnvoyBootstrapParamsRequest_NodeSpec `protobuf_oneof:"node_spec"`
|
||||
// The proxy service ID
|
||||
//
|
||||
// Deprecated: Marked as deprecated in pbdataplane/dataplane.proto.
|
||||
ServiceId string `protobuf:"bytes,3,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
|
||||
ProxyId string `protobuf:"bytes,6,opt,name=proxy_id,json=proxyId,proto3" json:"proxy_id,omitempty"`
|
||||
Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"`
|
||||
Namespace string `protobuf:"bytes,5,opt,name=namespace,proto3" json:"namespace,omitempty"`
|
||||
}
|
||||
|
@ -371,6 +375,7 @@ func (x *GetEnvoyBootstrapParamsRequest) GetNodeName() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
// Deprecated: Marked as deprecated in pbdataplane/dataplane.proto.
|
||||
func (x *GetEnvoyBootstrapParamsRequest) GetServiceId() string {
|
||||
if x != nil {
|
||||
return x.ServiceId
|
||||
|
@ -378,6 +383,13 @@ func (x *GetEnvoyBootstrapParamsRequest) GetServiceId() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsRequest) GetProxyId() string {
|
||||
if x != nil {
|
||||
return x.ProxyId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsRequest) GetPartition() string {
|
||||
if x != nil {
|
||||
return x.Partition
|
||||
|
@ -413,19 +425,28 @@ type GetEnvoyBootstrapParamsResponse struct {
|
|||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
ServiceKind ServiceKind `protobuf:"varint,1,opt,name=service_kind,json=serviceKind,proto3,enum=hashicorp.consul.dataplane.ServiceKind" json:"service_kind,omitempty"`
|
||||
// service is be used to identify the service (as the local cluster name and
|
||||
// deprecated: use identity instead.
|
||||
// service is used to identify the service (as the local cluster name and
|
||||
// in metric tags). If the service is a connect proxy it will be the name of
|
||||
// the proxy's destination service, for gateways it will be the gateway
|
||||
// service's name.
|
||||
Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"`
|
||||
Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"`
|
||||
Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"`
|
||||
Datacenter string `protobuf:"bytes,5,opt,name=datacenter,proto3" json:"datacenter,omitempty"`
|
||||
Config *structpb.Struct `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"`
|
||||
NodeId string `protobuf:"bytes,7,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
|
||||
NodeName string `protobuf:"bytes,8,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"`
|
||||
AccessLogs []string `protobuf:"bytes,9,rep,name=access_logs,json=accessLogs,proto3" json:"access_logs,omitempty"`
|
||||
//
|
||||
// Deprecated: Marked as deprecated in pbdataplane/dataplane.proto.
|
||||
Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"`
|
||||
// identity is used to identify this proxy (as the local cluster name and
|
||||
// in metric tags). For v1, this should be the service name.
|
||||
// If the service is a connect proxy it will be the name of
|
||||
// the proxy's destination service, for gateways it will be the gateway
|
||||
// service's name.
|
||||
// For v2, this should be the workload identity name.
|
||||
Identity string `protobuf:"bytes,10,opt,name=identity,proto3" json:"identity,omitempty"`
|
||||
Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"`
|
||||
Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"`
|
||||
Datacenter string `protobuf:"bytes,5,opt,name=datacenter,proto3" json:"datacenter,omitempty"`
|
||||
Config *structpb.Struct `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"`
|
||||
BootstrapConfig *v1alpha1.BootstrapConfig `protobuf:"bytes,11,opt,name=bootstrap_config,json=bootstrapConfig,proto3" json:"bootstrap_config,omitempty"`
|
||||
NodeName string `protobuf:"bytes,8,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"`
|
||||
AccessLogs []string `protobuf:"bytes,9,rep,name=access_logs,json=accessLogs,proto3" json:"access_logs,omitempty"`
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsResponse) Reset() {
|
||||
|
@ -460,13 +481,7 @@ func (*GetEnvoyBootstrapParamsResponse) Descriptor() ([]byte, []int) {
|
|||
return file_pbdataplane_dataplane_proto_rawDescGZIP(), []int{4}
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetServiceKind() ServiceKind {
|
||||
if x != nil {
|
||||
return x.ServiceKind
|
||||
}
|
||||
return ServiceKind_SERVICE_KIND_UNSPECIFIED
|
||||
}
|
||||
|
||||
// Deprecated: Marked as deprecated in pbdataplane/dataplane.proto.
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetService() string {
|
||||
if x != nil {
|
||||
return x.Service
|
||||
|
@ -474,6 +489,13 @@ func (x *GetEnvoyBootstrapParamsResponse) GetService() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetIdentity() string {
|
||||
if x != nil {
|
||||
return x.Identity
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetNamespace() string {
|
||||
if x != nil {
|
||||
return x.Namespace
|
||||
|
@ -502,11 +524,11 @@ func (x *GetEnvoyBootstrapParamsResponse) GetConfig() *structpb.Struct {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetNodeId() string {
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetBootstrapConfig() *v1alpha1.BootstrapConfig {
|
||||
if x != nil {
|
||||
return x.NodeId
|
||||
return x.BootstrapConfig
|
||||
}
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *GetEnvoyBootstrapParamsResponse) GetNodeName() string {
|
||||
|
@ -533,131 +555,138 @@ var file_pbdataplane_dataplane_proto_rawDesc = []byte{
|
|||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
|
||||
0x2f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||
0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26,
|
||||
0x0a, 0x24, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61,
|
||||
0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x70,
|
||||
0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6f,
|
||||
0x72, 0x74, 0x12, 0x50, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61,
|
||||
0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46,
|
||||
0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65,
|
||||
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x65, 0x64, 0x22, 0x9e, 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72,
|
||||
0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74,
|
||||
0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c,
|
||||
0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c,
|
||||
0x61, 0x6e, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x33, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
|
||||
0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||
0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75,
|
||||
0x72, 0x65, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79,
|
||||
0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69,
|
||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49,
|
||||
0x64, 0x12, 0x1d, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65,
|
||||
0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12,
|
||||
0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a,
|
||||
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x6e,
|
||||
0x6f, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0xeb, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74,
|
||||
0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61,
|
||||
0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0c,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0e, 0x32, 0x27, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0b, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
|
||||
0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e,
|
||||
0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2f,
|
||||
0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
|
||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
||||
0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
|
||||
0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65,
|
||||
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f,
|
||||
0x6c, 0x6f, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65,
|
||||
0x73, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x2a, 0xe4, 0x01, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x70,
|
||||
0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x1e,
|
||||
0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52,
|
||||
0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
|
||||
0x12, 0x24, 0x0a, 0x20, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45,
|
||||
0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x52,
|
||||
0x56, 0x45, 0x52, 0x53, 0x10, 0x01, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c,
|
||||
0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x45, 0x44, 0x47,
|
||||
0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41,
|
||||
0x4e, 0x41, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x41,
|
||||
0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53,
|
||||
0x5f, 0x45, 0x4e, 0x56, 0x4f, 0x59, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x53, 0x54, 0x52, 0x41, 0x50,
|
||||
0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03,
|
||||
0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45,
|
||||
0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x46, 0x49, 0x50, 0x53, 0x10, 0x04, 0x2a, 0xea, 0x01,
|
||||
0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a,
|
||||
0x18, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e,
|
||||
0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53,
|
||||
0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x49,
|
||||
0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45,
|
||||
0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x52,
|
||||
0x4f, 0x58, 0x59, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45,
|
||||
0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57,
|
||||
0x41, 0x59, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f,
|
||||
0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4e, 0x47,
|
||||
0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45,
|
||||
0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45,
|
||||
0x53, 0x53, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18,
|
||||
0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, 0x49,
|
||||
0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x06, 0x32, 0xe2, 0x02, 0x0a, 0x10, 0x44,
|
||||
0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
|
||||
0xae, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,
|
||||
0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||
0x73, 0x12, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70,
|
||||
0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29,
|
||||
0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f,
|
||||
0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x24, 0x47, 0x65, 0x74,
|
||||
0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
|
||||
0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x22, 0x89, 0x01, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46,
|
||||
0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x50, 0x0a,
|
||||
0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74,
|
||||
0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xe2, 0x86, 0x04, 0x04, 0x08, 0x02, 0x10, 0x07,
|
||||
0x12, 0x9c, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f,
|
||||
0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3a, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76,
|
||||
0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61,
|
||||
0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f,
|
||||
0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xe2, 0x86, 0x04, 0x04, 0x08, 0x02, 0x10, 0x07, 0x42,
|
||||
0xf0, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72,
|
||||
0x65, 0x73, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
|
||||
0x1c, 0x0a, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x9e, 0x01,
|
||||
0x0a, 0x25, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61,
|
||||
0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x73, 0x75, 0x70, 0x70, 0x6f,
|
||||
0x72, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x66,
|
||||
0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e,
|
||||
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70,
|
||||
0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6f,
|
||||
0x72, 0x74, 0x52, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74,
|
||||
0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xe1,
|
||||
0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73,
|
||||
0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x12, 0x19, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09,
|
||||
0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48,
|
||||
0x00, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0a, 0x73,
|
||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42,
|
||||
0x02, 0x18, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x19,
|
||||
0x0a, 0x08, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61,
|
||||
0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
|
||||
0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x70,
|
||||
0x65, 0x63, 0x22, 0x8e, 0x03, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42,
|
||||
0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||
0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||
0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a,
|
||||
0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06,
|
||||
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67,
|
||||
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53,
|
||||
0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5a, 0x0a,
|
||||
0x10, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 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, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72,
|
||||
0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74,
|
||||
0x72, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73,
|
||||
0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63,
|
||||
0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08,
|
||||
0x07, 0x10, 0x08, 0x2a, 0xe4, 0x01, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e,
|
||||
0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x41, 0x54,
|
||||
0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f,
|
||||
0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a,
|
||||
0x20, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55,
|
||||
0x52, 0x45, 0x53, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52,
|
||||
0x53, 0x10, 0x01, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45,
|
||||
0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x43,
|
||||
0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47,
|
||||
0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x41, 0x54, 0x41, 0x50,
|
||||
0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x45, 0x4e,
|
||||
0x56, 0x4f, 0x59, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x53, 0x54, 0x52, 0x41, 0x50, 0x5f, 0x43, 0x4f,
|
||||
0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x1b, 0x0a,
|
||||
0x17, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55,
|
||||
0x52, 0x45, 0x53, 0x5f, 0x46, 0x49, 0x50, 0x53, 0x10, 0x04, 0x2a, 0xea, 0x01, 0x0a, 0x0b, 0x53,
|
||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45,
|
||||
0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
|
||||
0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x52, 0x56,
|
||||
0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x49, 0x43, 0x41, 0x4c,
|
||||
0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49,
|
||||
0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59,
|
||||
0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49,
|
||||
0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10,
|
||||
0x03, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e,
|
||||
0x44, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x47, 0x41,
|
||||
0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49,
|
||||
0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x5f,
|
||||
0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, 0x52,
|
||||
0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x47, 0x41,
|
||||
0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x06, 0x32, 0xe2, 0x02, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61,
|
||||
0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a,
|
||||
0x1d, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74,
|
||||
0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x40,
|
||||
0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53,
|
||||
0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e,
|
||||
0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x41, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65,
|
||||
0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c,
|
||||
0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x22, 0x08, 0xe2, 0x86, 0x04, 0x04, 0x08, 0x02, 0x10, 0x07, 0x12, 0x9c, 0x01,
|
||||
0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74,
|
||||
0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74,
|
||||
0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42,
|
||||
0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
|
||||
0x6e, 0x65, 0x42, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x50, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 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, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x44,
|
||||
0xaa, 0x02, 0x1a, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x1a,
|
||||
0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xe2, 0x02, 0x26, 0x48, 0x61, 0x73,
|
||||
0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73,
|
||||
0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x08, 0xe2, 0x86, 0x04, 0x04, 0x08, 0x02, 0x10, 0x07, 0x42, 0xf0, 0x01, 0x0a,
|
||||
0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x42,
|
||||
0x0e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
||||
0x01, 0x5a, 0x34, 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, 0x64, 0x61,
|
||||
0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x44, 0xaa, 0x02, 0x1a,
|
||||
0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x1a, 0x48, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x44, 0x61,
|
||||
0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
|
||||
0x61, 0x74, 0x61, 0xea, 0x02, 0x1c, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a,
|
||||
0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
|
||||
0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xe2, 0x02, 0x26, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70,
|
||||
0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
|
||||
0xea, 0x02, 0x1c, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -683,12 +712,13 @@ var file_pbdataplane_dataplane_proto_goTypes = []interface{}{
|
|||
(*GetEnvoyBootstrapParamsRequest)(nil), // 5: hashicorp.consul.dataplane.GetEnvoyBootstrapParamsRequest
|
||||
(*GetEnvoyBootstrapParamsResponse)(nil), // 6: hashicorp.consul.dataplane.GetEnvoyBootstrapParamsResponse
|
||||
(*structpb.Struct)(nil), // 7: google.protobuf.Struct
|
||||
(*v1alpha1.BootstrapConfig)(nil), // 8: hashicorp.consul.mesh.v1alpha1.BootstrapConfig
|
||||
}
|
||||
var file_pbdataplane_dataplane_proto_depIdxs = []int32{
|
||||
0, // 0: hashicorp.consul.dataplane.DataplaneFeatureSupport.feature_name:type_name -> hashicorp.consul.dataplane.DataplaneFeatures
|
||||
3, // 1: hashicorp.consul.dataplane.GetSupportedDataplaneFeaturesResponse.supported_dataplane_features:type_name -> hashicorp.consul.dataplane.DataplaneFeatureSupport
|
||||
1, // 2: hashicorp.consul.dataplane.GetEnvoyBootstrapParamsResponse.service_kind:type_name -> hashicorp.consul.dataplane.ServiceKind
|
||||
7, // 3: hashicorp.consul.dataplane.GetEnvoyBootstrapParamsResponse.config:type_name -> google.protobuf.Struct
|
||||
7, // 2: hashicorp.consul.dataplane.GetEnvoyBootstrapParamsResponse.config:type_name -> google.protobuf.Struct
|
||||
8, // 3: hashicorp.consul.dataplane.GetEnvoyBootstrapParamsResponse.bootstrap_config:type_name -> hashicorp.consul.mesh.v1alpha1.BootstrapConfig
|
||||
2, // 4: hashicorp.consul.dataplane.DataplaneService.GetSupportedDataplaneFeatures:input_type -> hashicorp.consul.dataplane.GetSupportedDataplaneFeaturesRequest
|
||||
5, // 5: hashicorp.consul.dataplane.DataplaneService.GetEnvoyBootstrapParams:input_type -> hashicorp.consul.dataplane.GetEnvoyBootstrapParamsRequest
|
||||
4, // 6: hashicorp.consul.dataplane.DataplaneService.GetSupportedDataplaneFeatures:output_type -> hashicorp.consul.dataplane.GetSupportedDataplaneFeaturesResponse
|
||||
|
|
|
@ -9,6 +9,7 @@ package hashicorp.consul.dataplane;
|
|||
|
||||
import "annotations/ratelimit/ratelimit.proto";
|
||||
import "google/protobuf/struct.proto";
|
||||
import "pbmesh/v1alpha1/proxy_configuration.proto";
|
||||
|
||||
message GetSupportedDataplaneFeaturesRequest {}
|
||||
|
||||
|
@ -35,7 +36,8 @@ message GetEnvoyBootstrapParamsRequest {
|
|||
string node_name = 2;
|
||||
}
|
||||
// The proxy service ID
|
||||
string service_id = 3;
|
||||
string service_id = 3 [deprecated = true];
|
||||
string proxy_id = 6;
|
||||
string partition = 4;
|
||||
string namespace = 5;
|
||||
}
|
||||
|
@ -76,17 +78,30 @@ enum ServiceKind {
|
|||
}
|
||||
|
||||
message GetEnvoyBootstrapParamsResponse {
|
||||
ServiceKind service_kind = 1;
|
||||
// service is be used to identify the service (as the local cluster name and
|
||||
reserved 1;
|
||||
|
||||
// deprecated: use identity instead.
|
||||
// service is used to identify the service (as the local cluster name and
|
||||
// in metric tags). If the service is a connect proxy it will be the name of
|
||||
// the proxy's destination service, for gateways it will be the gateway
|
||||
// service's name.
|
||||
string service = 2;
|
||||
string service = 2 [deprecated = true];
|
||||
|
||||
// identity is used to identify this proxy (as the local cluster name and
|
||||
// in metric tags). For v1, this should be the service name.
|
||||
// If the service is a connect proxy it will be the name of
|
||||
// the proxy's destination service, for gateways it will be the gateway
|
||||
// service's name.
|
||||
// For v2, this should be the workload identity name.
|
||||
string identity = 10;
|
||||
string namespace = 3;
|
||||
string partition = 4;
|
||||
string datacenter = 5;
|
||||
google.protobuf.Struct config = 6;
|
||||
string node_id = 7;
|
||||
hashicorp.consul.mesh.v1alpha1.BootstrapConfig bootstrap_config = 11;
|
||||
|
||||
reserved 7;
|
||||
|
||||
string node_name = 8;
|
||||
repeated string access_logs = 9;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue