WIP: added fallback env
This commit is contained in:
parent
1827cf2e3e
commit
438e48c6fe
@ -32,7 +32,7 @@ func convert(cfg *config.Config) *wConfig {
|
||||
|
||||
for _, s := range cfg.Service {
|
||||
st := task.NewServiceTask(s.Name).SetCommand(s.Command...).SetEnv(s.Environ...)
|
||||
st.SetFlagSetsid(s.Setsid).SetWorkingDir(s.WorkingDir)
|
||||
st.SetFallbackEnv(s.FallbackEnv...).SetFlagSetsid(s.Setsid).SetWorkingDir(s.WorkingDir)
|
||||
st.SetUser(s.User).SetGroup(s.Group).SetStartSecs(s.StartSecs).SetPidFile(s.PidFile)
|
||||
st.SetConfig(cfg)
|
||||
retval.tasks.AddService(st)
|
||||
@ -52,7 +52,8 @@ func convert(cfg *config.Config) *wConfig {
|
||||
schedule = configToTaskCronSchedule(c.CronSchedule)
|
||||
|
||||
ct := task.NewCronTask(c.Name).SetCommand(c.Command...).SetEnv(c.Environ...)
|
||||
ct.SetFlagSetsid(c.Setsid).SetWorkingDir(c.WorkingDir).SetUser(c.User).SetGroup(c.Group)
|
||||
ct.SetFallbackEnv(c.FallbackEnv...).SetFlagSetsid(c.Setsid).SetWorkingDir(c.WorkingDir)
|
||||
ct.SetUser(c.User).SetGroup(c.Group)
|
||||
ct.SetSchedule(c.Schedule, schedule)
|
||||
ct.SetConfig(cfg)
|
||||
|
||||
|
||||
@ -44,6 +44,7 @@ type Config struct {
|
||||
type Task struct {
|
||||
Command []string `mapstructure:"command"`
|
||||
Environ []string `mapstructure:"environ"`
|
||||
FallbackEnv []string `mapstructure:"fallback_env"`
|
||||
Setsid bool `mapstructure:"setsid"`
|
||||
User string `mapstructure:"user"`
|
||||
Group string `mapstructure:"group"`
|
||||
|
||||
10
task/cron.go
10
task/cron.go
@ -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
30
task/env/env.go
vendored
@ -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
|
||||
}
|
||||
|
||||
10
task/task.go
10
task/task.go
@ -76,6 +76,7 @@ type ServiceTask struct {
|
||||
command []string
|
||||
cmdLine []string
|
||||
environ []string
|
||||
fallbackEnv []string
|
||||
setsid bool
|
||||
background bool
|
||||
workingDir string
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user