shared.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. }
  20. func coalesceEnvGroups(
  21. client *api.Client,
  22. projectID, clusterID uint,
  23. namespace string,
  24. envGroups []types.EnvGroupMeta,
  25. config map[string]interface{},
  26. ) error {
  27. for _, group := range envGroups {
  28. if group.Name == "" {
  29. return fmt.Errorf("env group name cannot be empty")
  30. }
  31. envGroup, err := client.GetEnvGroup(
  32. context.Background(),
  33. projectID,
  34. clusterID,
  35. namespace,
  36. &types.GetEnvGroupRequest{
  37. Name: group.Name,
  38. Version: group.Version,
  39. },
  40. )
  41. if err != nil {
  42. return err
  43. }
  44. envConfig, err := getNestedMap(config, "container", "env", "normal")
  45. if err != nil || envConfig == nil {
  46. envConfig = make(map[string]interface{})
  47. }
  48. for k, v := range envGroup.Variables {
  49. envConfig[k] = v
  50. }
  51. containerMap, _ := config["container"].(map[string]interface{})
  52. envMap, _ := containerMap["env"].(map[string]interface{})
  53. envMap["normal"] = envConfig
  54. }
  55. return nil
  56. }