// writeEnvFile creates an environment file for given app name, the minimum // required environment variables by the appc spec will be set to sensible // defaults here if they're not provided by env. func writeEnvFile(p *stage1commontypes.Pod, env types.Environment, appName types.ACName, privateUsers string) error { ef := bytes.Buffer{} for dk, dv := range defaultEnv { if _, exists := env.Get(dk); !exists { fmt.Fprintf(&ef, "%s=%s\000", dk, dv) } } for _, e := range env { fmt.Fprintf(&ef, "%s=%s\000", e.Name, e.Value) } uidRange := uid.NewBlankUidRange() if err := uidRange.Deserialize([]byte(privateUsers)); err != nil { return err } envFilePath := EnvFilePath(p.Root, appName) if err := ioutil.WriteFile(envFilePath, ef.Bytes(), 0644); err != nil { return err } if uidRange.Shift != 0 && uidRange.Count != 0 { if err := os.Chown(envFilePath, int(uidRange.Shift), int(uidRange.Shift)); err != nil { return err } } return nil }
// writeEnvFile creates an environment file for given app id // the minimum required environment variables by the appc spec will be set to sensible // defaults here if they're not provided by env. func (p *Pod) writeEnvFile(env types.Environment, id types.Hash) error { ef := bytes.Buffer{} for dk, dv := range defaultEnv { if _, exists := env.Get(dk); !exists { fmt.Fprintf(&ef, "%s=%s\000", dk, dv) } } for _, e := range env { fmt.Fprintf(&ef, "%s=%s\000", e.Name, e.Value) } return ioutil.WriteFile(EnvFilePath(p.Root, id), ef.Bytes(), 0640) }
// MergeEnvs amends appEnv setting variables in setEnv before setting anything new from os.Environ if inheritEnv = true // setEnv is expected to be in the os.Environ() key=value format func MergeEnvs(appEnv *types.Environment, inheritEnv bool, setEnv []string) { for _, ev := range setEnv { pair := strings.SplitN(ev, "=", 2) appEnv.Set(pair[0], pair[1]) } if inheritEnv { for _, ev := range os.Environ() { pair := strings.SplitN(ev, "=", 2) if _, exists := appEnv.Get(pair[0]); !exists { appEnv.Set(pair[0], pair[1]) } } } }