shared.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package deploy
  2. import (
  3. "context"
  4. "fmt"
  5. api "github.com/porter-dev/porter/api/client"
  6. "github.com/porter-dev/porter/api/types"
  7. )
  8. // SharedOpts are common options for build, create, and deploy agents
  9. type SharedOpts struct {
  10. ProjectID uint
  11. ClusterID uint
  12. Namespace string
  13. LocalPath string
  14. LocalDockerfile string
  15. OverrideTag string
  16. Method DeployBuildType
  17. AdditionalEnv map[string]string
  18. EnvGroups []types.EnvGroupMeta
  19. UseCache bool
  20. }
  21. func coalesceEnvGroups(
  22. client *api.Client,
  23. projectID, clusterID uint,
  24. namespace string,
  25. envGroups []types.EnvGroupMeta,
  26. config map[string]interface{},
  27. ) error {
  28. for _, group := range envGroups {
  29. if group.Name == "" {
  30. return fmt.Errorf("env group name cannot be empty")
  31. }
  32. envGroup, err := client.GetEnvGroup(
  33. context.Background(),
  34. projectID,
  35. clusterID,
  36. namespace,
  37. &types.GetEnvGroupRequest{
  38. Name: group.Name,
  39. Version: group.Version,
  40. },
  41. )
  42. if err != nil {
  43. return err
  44. }
  45. envConfig, err := getNestedMap(config, "container", "env", "normal")
  46. if err != nil || envConfig == nil {
  47. envConfig = make(map[string]interface{})
  48. }
  49. for k, v := range envGroup.Variables {
  50. envConfig[k] = v
  51. }
  52. containerMap, _ := config["container"].(map[string]interface{})
  53. envMap, _ := containerMap["env"].(map[string]interface{})
  54. envMap["normal"] = envConfig
  55. }
  56. return nil
  57. }