addons.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. case porterv1.AddonType_ADDON_TYPE_REDIS:
  26. addonProto.Type = addonType
  27. redis := redisConfigProtoFromAddon(addon)
  28. addonProto.Config = &porterv1.Addon_Redis{
  29. Redis: redis,
  30. }
  31. default:
  32. return addonProto, telemetry.Error(ctx, span, nil, "specified addon type not supported")
  33. }
  34. var envGroups []*porterv1.EnvGroup
  35. for _, envGroup := range addon.EnvGroups {
  36. eg := &porterv1.EnvGroup{
  37. Name: envGroup,
  38. Version: 0, // this is updated to latest when applied to cluster
  39. }
  40. envGroups = append(envGroups, eg)
  41. }
  42. addonProto.EnvGroups = envGroups
  43. return addonProto, nil
  44. }
  45. func addonEnumProtoFromType(ctx context.Context, addonType string) (porterv1.AddonType, error) {
  46. ctx, span := telemetry.NewSpan(ctx, "addon-enum-proto-from-type")
  47. defer span.End()
  48. var addonTypeEnum porterv1.AddonType
  49. switch addonType {
  50. case "postgres":
  51. addonTypeEnum = porterv1.AddonType_ADDON_TYPE_POSTGRES
  52. case "redis":
  53. addonTypeEnum = porterv1.AddonType_ADDON_TYPE_REDIS
  54. default:
  55. return addonTypeEnum, telemetry.Error(ctx, span, nil, "invalid addon type")
  56. }
  57. return addonTypeEnum, nil
  58. }
  59. func postgresConfigProtoFromAddon(addon Addon) *porterv1.Postgres {
  60. return &porterv1.Postgres{
  61. RamMegabytes: int32(addon.RamMegabytes),
  62. CpuCores: addon.CpuCores,
  63. StorageGigabytes: int32(addon.StorageGigabytes),
  64. }
  65. }
  66. func redisConfigProtoFromAddon(addon Addon) *porterv1.Redis {
  67. return &porterv1.Redis{
  68. RamMegabytes: int32(addon.RamMegabytes),
  69. CpuCores: addon.CpuCores,
  70. StorageGigabytes: int32(addon.StorageGigabytes),
  71. }
  72. }