...
1 package services
2
3 import (
4 "context"
5
6 "edge-infra.dev/pkg/edge/api/services/gcp"
7 "edge-infra.dev/pkg/edge/api/types"
8 "edge-infra.dev/pkg/lib/gcp/pubsub"
9 secretMgrApi "edge-infra.dev/pkg/lib/gcp/secretmanager"
10 )
11
12
13 type GcpClientService interface {
14 GetComputeClient(ctx context.Context, projectID string) (types.ComputeService, error)
15 GetContainerClient(ctx context.Context, projectID string) (types.ContainerService, error)
16 GetSecretClient(ctx context.Context, projectID string) (types.SecretManagerService, error)
17 GetPubSubClient(ctx context.Context, projectID string) (types.PubSubService, error)
18 }
19
20 type gcpClientService struct {
21 PubSubClientMap map[string]types.PubSubService
22 }
23
24 func (s *gcpClientService) GetComputeClient(ctx context.Context, projectID string) (types.ComputeService, error) {
25 return gcp.NewCompute(ctx, projectID)
26 }
27
28 func (s *gcpClientService) GetContainerClient(ctx context.Context, projectID string) (types.ContainerService, error) {
29 return gcp.NewContainer(ctx, projectID)
30 }
31
32 func (s *gcpClientService) GetSecretClient(ctx context.Context, projectID string) (types.SecretManagerService, error) {
33 return secretMgrApi.NewWithOptions(ctx, projectID)
34 }
35
36 func (s *gcpClientService) GetPubSubClient(ctx context.Context, projectID string) (types.PubSubService, error) {
37 if pubSubService := s.PubSubClientMap[projectID]; pubSubService != nil {
38 return pubSubService, nil
39 }
40 pubSubService, err := pubsub.NewWithOptions(ctx, projectID)
41 if err == nil {
42 s.PubSubClientMap[projectID] = pubSubService
43 }
44 return pubSubService, err
45 }
46
47 func NewGcpClientService() *gcpClientService {
48 return &gcpClientService{
49 PubSubClientMap: map[string]types.PubSubService{},
50 }
51 }
52
View as plain text