2
0

get.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. DeploymentTargetName string
  15. CCPClient porterv1connect.ClusterControlPlaneServiceClient
  16. }
  17. // DeploymentTarget is a struct representing the unique cluster, namespace pair for a deployment target
  18. type DeploymentTarget struct {
  19. ID string `json:"id"`
  20. Name string `json:"name"`
  21. ClusterID int64 `json:"cluster_id"`
  22. Namespace string `json:"namespace"`
  23. IsPreview bool `json:"is_preview"`
  24. IsDefault bool `json:"is_default"`
  25. }
  26. // DeploymentTargetDetails gets the deployment target details from CCP
  27. func DeploymentTargetDetails(ctx context.Context, inp DeploymentTargetDetailsInput) (DeploymentTarget, error) {
  28. ctx, span := telemetry.NewSpan(ctx, "deployment-target-details")
  29. defer span.End()
  30. var deploymentTarget DeploymentTarget
  31. if inp.ClusterID == 0 {
  32. return deploymentTarget, telemetry.Error(ctx, span, nil, "cluster id is empty")
  33. }
  34. if inp.ProjectID == 0 {
  35. return deploymentTarget, telemetry.Error(ctx, span, nil, "project id is empty")
  36. }
  37. if inp.CCPClient == nil {
  38. return deploymentTarget, telemetry.Error(ctx, span, nil, "cluster control plane client is nil")
  39. }
  40. deploymentTargetDetailsReq := connect.NewRequest(&porterv1.DeploymentTargetDetailsRequest{
  41. ProjectId: inp.ProjectID,
  42. DeploymentTargetIdentifier: &porterv1.DeploymentTargetIdentifier{
  43. Id: inp.DeploymentTargetID,
  44. Name: inp.DeploymentTargetName,
  45. },
  46. })
  47. deploymentTargetDetailsResp, err := inp.CCPClient.DeploymentTargetDetails(ctx, deploymentTargetDetailsReq)
  48. if err != nil {
  49. return deploymentTarget, telemetry.Error(ctx, span, err, "error getting deployment target details from cluster control plane client")
  50. }
  51. if deploymentTargetDetailsResp == nil || deploymentTargetDetailsResp.Msg == nil {
  52. return deploymentTarget, telemetry.Error(ctx, span, nil, "deployment target details resp is nil")
  53. }
  54. target := deploymentTargetDetailsResp.Msg.DeploymentTarget
  55. if target.ClusterId != inp.ClusterID {
  56. return deploymentTarget, telemetry.Error(ctx, span, nil, "deployment target details resp cluster id does not match cluster id")
  57. }
  58. deploymentTarget = DeploymentTarget{
  59. ID: target.Id,
  60. Name: target.Name,
  61. Namespace: target.Namespace,
  62. ClusterID: target.ClusterId,
  63. IsPreview: target.IsPreview,
  64. IsDefault: target.IsDefault,
  65. }
  66. return deploymentTarget, nil
  67. }