2
0

apply.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package stack
  2. import (
  3. "fmt"
  4. api "github.com/porter-dev/porter/api/client"
  5. "github.com/porter-dev/porter/cli/cmd/config"
  6. "github.com/porter-dev/switchboard/pkg/types"
  7. "gopkg.in/yaml.v2"
  8. )
  9. type StackConf struct {
  10. apiClient *api.Client
  11. rawBytes []byte
  12. parsed *PorterStackYAML
  13. }
  14. func CreateV1BuildResources(client *api.Client, raw []byte) (*types.ResourceGroup, error) {
  15. stackConf, err := createStackConf(client, raw)
  16. if err != nil {
  17. return nil, err
  18. }
  19. v1File := &types.ResourceGroup{
  20. Version: "v1",
  21. Resources: []*types.Resource{
  22. {
  23. Name: "get-env",
  24. Driver: "os-env",
  25. },
  26. },
  27. }
  28. if stackConf.parsed.Build != nil {
  29. bi, err := stackConf.parsed.Build.getV1BuildImage(stackConf.parsed.Env)
  30. if err != nil {
  31. return nil, err
  32. }
  33. pi, err := stackConf.parsed.Build.getV1PushImage()
  34. if err != nil {
  35. return nil, err
  36. }
  37. v1File.Resources = append(v1File.Resources, bi, pi)
  38. }
  39. return v1File, nil
  40. }
  41. func createStackConf(client *api.Client, raw []byte) (*StackConf, error) {
  42. parsed := &PorterStackYAML{}
  43. err := yaml.Unmarshal(raw, parsed)
  44. if err != nil {
  45. errMsg := composePreviewMessage("error parsing porter.yaml", Error)
  46. return nil, fmt.Errorf("%s: %w", errMsg, err)
  47. }
  48. err = config.ValidateCLIEnvironment()
  49. if err != nil {
  50. errMsg := composePreviewMessage("porter CLI is not configured correctly", Error)
  51. return nil, fmt.Errorf("%s: %w", errMsg, err)
  52. }
  53. return &StackConf{
  54. apiClient: client,
  55. rawBytes: raw,
  56. parsed: parsed,
  57. }, nil
  58. }
  59. func CreateV1ApplicationResources(client *api.Client, raw []byte) (*types.ResourceGroup, error) {
  60. stackConf, err := createStackConf(client, raw)
  61. if err != nil {
  62. return nil, err
  63. }
  64. v1File := &types.ResourceGroup{}
  65. for name, app := range stackConf.parsed.Apps {
  66. if app == nil {
  67. continue
  68. }
  69. ai, err := app.getV1Resource(name, stackConf.parsed.Build, stackConf.parsed.Env)
  70. if err != nil {
  71. return nil, err
  72. }
  73. v1File.Resources = append(v1File.Resources, ai)
  74. }
  75. return v1File, nil
  76. }