github.com/octohelm/wagon@v0.0.0-20240308040401-88662650dc0b/pkg/engine/plan/task/client_env.go (about) 1 package task 2 3 import ( 4 "context" 5 "encoding/json" 6 "os" 7 "strings" 8 9 "github.com/pkg/errors" 10 11 "dagger.io/dagger" 12 13 "github.com/octohelm/wagon/pkg/engine/daggerutil" 14 "github.com/octohelm/wagon/pkg/engine/plan/task/core" 15 ) 16 17 func init() { 18 core.DefaultFactory.Register(&ClientEnv{}) 19 } 20 21 type ClientEnv struct { 22 core.Task 23 Env map[string]core.SecretOrString `json:",inline" wagon:"generated"` 24 } 25 26 func (s *ClientEnv) UnmarshalJSON(data []byte) error { 27 if err := json.Unmarshal(data, &s.Env); err != nil { 28 return err 29 } 30 delete(s.Env, "$wagon") 31 return nil 32 } 33 34 func (s *ClientEnv) MarshalJSON() ([]byte, error) { 35 return json.Marshal(s.Env) 36 } 37 38 func (v *ClientEnv) Do(ctx context.Context) error { 39 clientEnvs := getClientEnvs() 40 41 return daggerutil.Do(ctx, func(c *dagger.Client) error { 42 env := map[string]core.SecretOrString{} 43 44 for key := range v.Env { 45 e := v.Env[key] 46 47 if envVar, ok := clientEnvs[key]; ok { 48 if secret := e.Secret; secret != nil { 49 envSecret := c.SetSecret(key, envVar) 50 51 if err := secret.SetSecretIDBy(ctx, envSecret); err != nil { 52 return err 53 } 54 55 env[key] = core.SecretOrString{ 56 Secret: secret, 57 } 58 } else { 59 env[key] = core.SecretOrString{ 60 Value: envVar, 61 } 62 } 63 } else { 64 if secret := e.Secret; secret != nil { 65 return errors.Errorf("EnvVar %s is not defined.", key) 66 } 67 68 env[key] = e 69 } 70 } 71 72 v.Env = env 73 74 return nil 75 }) 76 } 77 78 func getClientEnvs() map[string]string { 79 clientEnvs := map[string]string{} 80 81 for _, i := range os.Environ() { 82 parts := strings.SplitN(i, "=", 2) 83 if len(parts) == 2 { 84 clientEnvs[parts[0]] = parts[1] 85 } else { 86 clientEnvs[parts[0]] = "" 87 } 88 } 89 90 return clientEnvs 91 }