WIP: added fallback env

This commit is contained in:
2025-05-26 21:05:12 +10:00
parent 1827cf2e3e
commit 438e48c6fe
5 changed files with 68 additions and 20 deletions

View File

@@ -81,6 +81,7 @@ type CronTask struct {
command []string
cmdLine []string
environ []string
fallbackEnv []string
setsid bool
workingDir string
lastRun time.Time
@@ -107,6 +108,12 @@ func (c *CronTask) SetEnv(envs ...string) *CronTask {
return c
}
func (c *CronTask) SetFallbackEnv(envs ...string) *CronTask {
c.fallbackEnv = make([]string, len(envs))
copy(c.fallbackEnv, envs)
return c
}
func (c *CronTask) SetFlagSetsid(flag bool) *CronTask {
c.setsid = flag
return c
@@ -257,7 +264,8 @@ func (c *CronTask) Environ() []string {
}
func (c *CronTask) PatchEnv(env []string) []string {
return wmenv.PatchEnv(env, c.environ)
env = wmenv.PatchEnv(env, c.environ)
return wmenv.FallbackEnv(env, c.fallbackEnv)
}
func (c *CronTask) Setsid() bool {

30
task/env/env.go vendored
View File

@@ -95,3 +95,33 @@ func ExpandEnv(env []string, input []string) []string {
}
return input
}
func FallbackEnv(env []string, fallbacks []string) []string {
envMap := make(map[string]string)
for _, e := range env {
key, value, ok := strings.Cut(e, "=")
if !ok {
wingmate.Log().Warn().Msgf("removing bad environment:", e)
continue
}
envMap[key] = value
}
for _, e := range fallbacks {
key, value, ok := strings.Cut(e, "=")
if !ok {
wingmate.Log().Warn().Msgf("removing bad environment:", e)
continue
}
value = envCapture.ReplaceAllStringFunc(value, func(rep string) string {
return expandEnv(envMap, rep)
})
if _, ok = envMap[key]; !ok {
env = append(env, fmt.Sprintf("%s=%s", key, value))
}
}
return env
}

View File

@@ -72,16 +72,17 @@ func (ts *Tasks) Get(name string) (wminit.Task, error) {
}
type ServiceTask struct {
name string
command []string
cmdLine []string
environ []string
setsid bool
background bool
workingDir string
startSecs uint
pidFile string
config config
name string
command []string
cmdLine []string
environ []string
fallbackEnv []string
setsid bool
background bool
workingDir string
startSecs uint
pidFile string
config config
userGroup
}
@@ -103,6 +104,12 @@ func (t *ServiceTask) SetEnv(envs ...string) *ServiceTask {
return t
}
func (t *ServiceTask) SetFallbackEnv(envs ...string) *ServiceTask {
t.fallbackEnv = make([]string, len(envs))
copy(t.fallbackEnv, envs)
return t
}
func (t *ServiceTask) SetFlagSetsid(flag bool) *ServiceTask {
t.setsid = flag
return t
@@ -311,7 +318,8 @@ func (t *ServiceTask) Environ() []string {
}
func (t *ServiceTask) PatchEnv(env []string) []string {
return wmenv.PatchEnv(env, t.environ)
env = wmenv.PatchEnv(env, t.environ)
return wmenv.FallbackEnv(env, t.fallbackEnv)
}
func (t *ServiceTask) Setsid() bool {