get_state.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package grpc
  2. import (
  3. "fmt"
  4. "github.com/porter-dev/porter/provisioner/integrations/redis_stream"
  5. "github.com/porter-dev/porter/provisioner/pb"
  6. ptypes "github.com/porter-dev/porter/provisioner/types"
  7. )
  8. func (s *ProvisionerServer) GetStateUpdate(infra *pb.Infra, server pb.Provisioner_GetStateUpdateServer) error {
  9. name, ok := verifyStaticTokenContext(s.config, server.Context())
  10. if !ok {
  11. return fmt.Errorf("unauthorized")
  12. }
  13. modelInfra, err := s.config.Repo.Infra().ReadInfra(name.ProjectID, name.InfraID)
  14. if err != nil {
  15. return err
  16. }
  17. operation, err := s.config.Repo.Infra().ReadOperation(name.InfraID, name.OperationUID)
  18. if err != nil {
  19. return err
  20. }
  21. sendFnc := func(update *ptypes.TFResourceState) error {
  22. res := &pb.StateUpdate{
  23. ResourceId: update.ID,
  24. Status: string(update.Status),
  25. }
  26. res.Error = ""
  27. if update != nil && update.Error != nil {
  28. res.Error = *update.Error
  29. }
  30. return server.Send(res)
  31. }
  32. return redis_stream.StreamStateUpdate(server.Context(), s.config.RedisClient, modelInfra, operation, sendFnc)
  33. }