get.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package deployment_target
  2. import (
  3. "context"
  4. "connectrpc.com/connect"
  5. porterv1 "github.com/porter-dev/api-contracts/generated/go/porter/v1"
  6. "github.com/porter-dev/api-contracts/generated/go/porter/v1/porterv1connect"
  7. "github.com/porter-dev/porter/internal/telemetry"
  8. )
  9. // DeploymentTargetDetailsInput is the input to the DeploymentTargetDetails function
  10. type DeploymentTargetDetailsInput struct {
  11. ProjectID int64
  12. ClusterID int64
  13. DeploymentTargetID string
  14. CCPClient porterv1connect.ClusterControlPlaneServiceClient
  15. }
  16. // DeploymentTarget is a struct representing the unique cluster, namespace pair for a deployment target
  17. type DeploymentTarget struct {
  18. ClusterID int64 `json:"cluster_id"`
  19. Namespace string `json:"namespace"`
  20. Preview bool `json:"preview"`
  21. }
  22. // DeploymentTargetDetails gets the deployment target details from CCP
  23. func DeploymentTargetDetails(ctx context.Context, inp DeploymentTargetDetailsInput) (DeploymentTarget, error) {
  24. ctx, span := telemetry.NewSpan(ctx, "deployment-target-details")
  25. defer span.End()
  26. var deploymentTarget DeploymentTarget
  27. if inp.ClusterID == 0 {
  28. return deploymentTarget, telemetry.Error(ctx, span, nil, "cluster id is empty")
  29. }
  30. if inp.ProjectID == 0 {
  31. return deploymentTarget, telemetry.Error(ctx, span, nil, "project id is empty")
  32. }
  33. if inp.DeploymentTargetID == "" {
  34. return deploymentTarget, telemetry.Error(ctx, span, nil, "deployment target id is empty")
  35. }
  36. if inp.CCPClient == nil {
  37. return deploymentTarget, telemetry.Error(ctx, span, nil, "cluster control plane client is nil")
  38. }
  39. deploymentTargetDetailsReq := connect.NewRequest(&porterv1.DeploymentTargetDetailsRequest{
  40. ProjectId: inp.ProjectID,
  41. DeploymentTargetId: inp.DeploymentTargetID,
  42. })
  43. deploymentTargetDetailsResp, err := inp.CCPClient.DeploymentTargetDetails(ctx, deploymentTargetDetailsReq)
  44. if err != nil {
  45. return deploymentTarget, telemetry.Error(ctx, span, err, "error getting deployment target details from cluster control plane client")
  46. }
  47. if deploymentTargetDetailsResp == nil || deploymentTargetDetailsResp.Msg == nil {
  48. return deploymentTarget, telemetry.Error(ctx, span, err, "deployment target details resp is nil")
  49. }
  50. if deploymentTargetDetailsResp.Msg.ClusterId != inp.ClusterID {
  51. return deploymentTarget, telemetry.Error(ctx, span, err, "deployment target details resp cluster id does not match cluster id")
  52. }
  53. deploymentTarget = DeploymentTarget{
  54. Namespace: deploymentTargetDetailsResp.Msg.Namespace,
  55. ClusterID: deploymentTargetDetailsResp.Msg.ClusterId,
  56. Preview: deploymentTargetDetailsResp.Msg.IsPreview,
  57. }
  58. return deploymentTarget, nil
  59. }