// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package resource import ( "context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/storage" "github.com/hashicorp/consul/proto-public/pbresource" ) type Server struct { Config } type Config struct { registry Registry // Backend is the storage backend that will be used for resource persistence. Backend Backend } //go:generate mockery --name Registry --inpackage type Registry interface { resource.Registry } //go:generate mockery --name Backend --inpackage type Backend interface { storage.Backend } func NewServer(cfg Config) *Server { return &Server{cfg} } var _ pbresource.ResourceServiceServer = (*Server)(nil) func (s *Server) Register(grpcServer *grpc.Server) { pbresource.RegisterResourceServiceServer(grpcServer, s) } func (s *Server) Write(ctx context.Context, req *pbresource.WriteRequest) (*pbresource.WriteResponse, error) { // TODO return &pbresource.WriteResponse{}, nil } func (s *Server) WriteStatus(ctx context.Context, req *pbresource.WriteStatusRequest) (*pbresource.WriteStatusResponse, error) { // TODO return &pbresource.WriteStatusResponse{}, nil } func (s *Server) Delete(ctx context.Context, req *pbresource.DeleteRequest) (*pbresource.DeleteResponse, error) { // TODO return &pbresource.DeleteResponse{}, nil } //nolint:unparam func (s *Server) resolveType(typ *pbresource.Type) (*resource.Registration, error) { v, ok := s.registry.Resolve(typ) if ok { return &v, nil } return nil, status.Errorf( codes.InvalidArgument, "resource type %s not registered", resource.ToGVK(typ), ) } func readConsistencyFrom(ctx context.Context) storage.ReadConsistency { md, ok := metadata.FromIncomingContext(ctx) if !ok { return storage.EventualConsistency } vals := md.Get("x-consul-consistency-mode") if len(vals) == 0 { return storage.EventualConsistency } if vals[0] == "consistent" { return storage.StrongConsistency } return storage.EventualConsistency }