shared.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package deploy
  2. import (
  3. "context"
  4. "strconv"
  5. "strings"
  6. api "github.com/porter-dev/porter/api/client"
  7. "github.com/porter-dev/porter/api/types"
  8. )
  9. // SharedOpts are common options for build, create, and deploy agents
  10. type SharedOpts struct {
  11. ProjectID uint
  12. ClusterID uint
  13. Namespace string
  14. LocalPath string
  15. LocalDockerfile string
  16. OverrideTag string
  17. Method DeployBuildType
  18. AdditionalEnv map[string]string
  19. EnvGroups []string
  20. }
  21. func getEnvGroupNameVersion(group string) (string, uint, error) {
  22. if !strings.Contains(group, "@") {
  23. return group, 0, nil
  24. }
  25. envGroupSpl := strings.Split(group, "@")
  26. envGroupName := envGroupSpl[0]
  27. envGroupVersion := uint64(0)
  28. envGroupVersion, err := strconv.ParseUint(envGroupSpl[1], 10, 32)
  29. if err != nil {
  30. return "", 0, err
  31. }
  32. return envGroupName, uint(envGroupVersion), nil
  33. }
  34. func coalesceEnvGroups(
  35. client *api.Client,
  36. projectID, clusterID uint,
  37. namespace string,
  38. envGroups []string,
  39. config map[string]interface{},
  40. ) error {
  41. for _, group := range envGroups {
  42. if group == "" {
  43. continue
  44. }
  45. envGroupName, envGroupVersion, err := getEnvGroupNameVersion(group)
  46. if err != nil {
  47. return err
  48. }
  49. envGroup, err := client.GetEnvGroup(
  50. context.Background(),
  51. projectID,
  52. clusterID,
  53. namespace,
  54. &types.GetEnvGroupRequest{
  55. Name: envGroupName,
  56. Version: envGroupVersion,
  57. },
  58. )
  59. if err != nil {
  60. return err
  61. }
  62. envConfig, err := getNestedMap(config, "container", "env", "normal")
  63. if err != nil || envConfig == nil {
  64. envConfig = make(map[string]interface{})
  65. }
  66. for k, v := range envGroup.Variables {
  67. envConfig[k] = v
  68. }
  69. containerMap, _ := config["container"].(map[string]interface{})
  70. envMap, _ := containerMap["env"].(map[string]interface{})
  71. envMap["normal"] = envConfig
  72. }
  73. return nil
  74. }