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 {
|
for _, s := range cfg.Service {
|
||||||
st := task.NewServiceTask(s.Name).SetCommand(s.Command...).SetEnv(s.Environ...)
|
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.SetUser(s.User).SetGroup(s.Group).SetStartSecs(s.StartSecs).SetPidFile(s.PidFile)
|
||||||
st.SetConfig(cfg)
|
st.SetConfig(cfg)
|
||||||
retval.tasks.AddService(st)
|
retval.tasks.AddService(st)
|
||||||
@ -52,7 +52,8 @@ func convert(cfg *config.Config) *wConfig {
|
|||||||
schedule = configToTaskCronSchedule(c.CronSchedule)
|
schedule = configToTaskCronSchedule(c.CronSchedule)
|
||||||
|
|
||||||
ct := task.NewCronTask(c.Name).SetCommand(c.Command...).SetEnv(c.Environ...)
|
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.SetSchedule(c.Schedule, schedule)
|
||||||
ct.SetConfig(cfg)
|
ct.SetConfig(cfg)
|
||||||
|
|
||||||
|
|||||||
@ -44,6 +44,7 @@ type Config struct {
|
|||||||
type Task struct {
|
type Task struct {
|
||||||
Command []string `mapstructure:"command"`
|
Command []string `mapstructure:"command"`
|
||||||
Environ []string `mapstructure:"environ"`
|
Environ []string `mapstructure:"environ"`
|
||||||
|
FallbackEnv []string `mapstructure:"fallback_env"`
|
||||||
Setsid bool `mapstructure:"setsid"`
|
Setsid bool `mapstructure:"setsid"`
|
||||||
User string `mapstructure:"user"`
|
User string `mapstructure:"user"`
|
||||||
Group string `mapstructure:"group"`
|
Group string `mapstructure:"group"`
|
||||||
|
|||||||
10
task/cron.go
10
task/cron.go
@ -81,6 +81,7 @@ type CronTask struct {
|
|||||||
command []string
|
command []string
|
||||||
cmdLine []string
|
cmdLine []string
|
||||||
environ []string
|
environ []string
|
||||||
|
fallbackEnv []string
|
||||||
setsid bool
|
setsid bool
|
||||||
workingDir string
|
workingDir string
|
||||||
lastRun time.Time
|
lastRun time.Time
|
||||||
@ -107,6 +108,12 @@ func (c *CronTask) SetEnv(envs ...string) *CronTask {
|
|||||||
return c
|
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 {
|
func (c *CronTask) SetFlagSetsid(flag bool) *CronTask {
|
||||||
c.setsid = flag
|
c.setsid = flag
|
||||||
return c
|
return c
|
||||||
@ -257,7 +264,8 @@ func (c *CronTask) Environ() []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *CronTask) PatchEnv(env []string) []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 {
|
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
|
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
|
command []string
|
||||||
cmdLine []string
|
cmdLine []string
|
||||||
environ []string
|
environ []string
|
||||||
|
fallbackEnv []string
|
||||||
setsid bool
|
setsid bool
|
||||||
background bool
|
background bool
|
||||||
workingDir string
|
workingDir string
|
||||||
@ -103,6 +104,12 @@ func (t *ServiceTask) SetEnv(envs ...string) *ServiceTask {
|
|||||||
return t
|
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 {
|
func (t *ServiceTask) SetFlagSetsid(flag bool) *ServiceTask {
|
||||||
t.setsid = flag
|
t.setsid = flag
|
||||||
return t
|
return t
|
||||||
@ -311,7 +318,8 @@ func (t *ServiceTask) Environ() []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *ServiceTask) PatchEnv(env []string) []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 {
|
func (t *ServiceTask) Setsid() bool {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user