addons.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package v2
  2. import (
  3. "context"
  4. porterv1 "github.com/porter-dev/api-contracts/generated/go/porter/v1"
  5. "github.com/porter-dev/porter/internal/telemetry"
  6. )
  7. // ProtoFromAddon converts an Addon to the Addon proto type
  8. func ProtoFromAddon(ctx context.Context, addon Addon) (*porterv1.Addon, error) {
  9. ctx, span := telemetry.NewSpan(ctx, "proto-from-addon")
  10. defer span.End()
  11. addonProto := &porterv1.Addon{
  12. Name: addon.Name,
  13. }
  14. addonType, err := addonEnumProtoFromType(ctx, addon.Type)
  15. if err != nil {
  16. return addonProto, telemetry.Error(ctx, span, err, "error getting addon type")
  17. }
  18. switch addonType {
  19. case porterv1.AddonType_ADDON_TYPE_POSTGRES:
  20. addonProto.Type = addonType
  21. postgres := postgresConfigProtoFromAddon(addon)
  22. addonProto.Config = &porterv1.Addon_Postgres{
  23. Postgres: postgres,
  24. }
  25. default:
  26. return addonProto, telemetry.Error(ctx, span, nil, "specified addon type not supported")
  27. }
  28. var envGroups []*porterv1.EnvGroup
  29. for _, envGroup := range addon.EnvGroups {
  30. eg := &porterv1.EnvGroup{
  31. Name: envGroup,
  32. Version: 0, // this is updated to latest when applied to cluster
  33. }
  34. envGroups = append(envGroups, eg)
  35. }
  36. addonProto.EnvGroups = envGroups
  37. return addonProto, nil
  38. }
  39. func addonEnumProtoFromType(ctx context.Context, addonType string) (porterv1.AddonType, error) {
  40. ctx, span := telemetry.NewSpan(ctx, "addon-enum-proto-from-type")
  41. defer span.End()
  42. var addonTypeEnum porterv1.AddonType
  43. switch addonType {
  44. case "postgres":
  45. addonTypeEnum = porterv1.AddonType_ADDON_TYPE_POSTGRES
  46. default:
  47. return addonTypeEnum, telemetry.Error(ctx, span, nil, "invalid addon type")
  48. }
  49. return addonTypeEnum, nil
  50. }
  51. func postgresConfigProtoFromAddon(addon Addon) *porterv1.Postgres {
  52. return &porterv1.Postgres{
  53. RamMegabytes: int32(addon.RamMegabytes),
  54. CpuCores: addon.CpuCores,
  55. StorageGigabytes: int32(addon.StorageGigabytes),
  56. }
  57. }