Allow setting environment variables for services (#312)
Setting environment variables for services running with systemd, OSx or windows
This commit is contained in:
@@ -134,6 +134,8 @@ type Config struct {
|
|||||||
|
|
||||||
// System specific options.
|
// System specific options.
|
||||||
Option KeyValue
|
Option KeyValue
|
||||||
|
|
||||||
|
EnvVars map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -285,6 +285,13 @@ var launchdConfig = `<?xml version='1.0' encoding='UTF-8'?>
|
|||||||
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
|
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
|
||||||
<plist version='1.0'>
|
<plist version='1.0'>
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>EnvironmentVariables</key>
|
||||||
|
<dict>
|
||||||
|
{{range $k, $v := .EnvVars -}}
|
||||||
|
<key>{{html $k}}</key>
|
||||||
|
<string>{{html $v}}</string>
|
||||||
|
{{end -}}
|
||||||
|
</dict>
|
||||||
<key>Label</key>
|
<key>Label</key>
|
||||||
<string>{{html .Name}}</string>
|
<string>{{html .Name}}</string>
|
||||||
<key>ProgramArguments</key>
|
<key>ProgramArguments</key>
|
||||||
|
|||||||
@@ -318,6 +318,10 @@ StandardError=file:/var/log/{{.Name}}.err
|
|||||||
RestartSec=120
|
RestartSec=120
|
||||||
EnvironmentFile=-/etc/sysconfig/{{.Name}}
|
EnvironmentFile=-/etc/sysconfig/{{.Name}}
|
||||||
|
|
||||||
|
{{range $k, $v := .EnvVars -}}
|
||||||
|
Environment={{$k}}={{$v}}
|
||||||
|
{{end -}}
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -222,6 +222,27 @@ loop:
|
|||||||
return false, 0
|
return false, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ws *windowsService) setEnvironmentVariablesInRegistry() error {
|
||||||
|
k, _, err := registry.CreateKey(
|
||||||
|
registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Services\`+ws.Name,
|
||||||
|
registry.QUERY_VALUE|registry.SET_VALUE|registry.CREATE_SUB_KEY)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed creating env var registry key, err = %v", err)
|
||||||
|
}
|
||||||
|
envStrings := make([]string, 0, len(ws.EnvVars))
|
||||||
|
for k, v := range ws.EnvVars {
|
||||||
|
envStrings = append(envStrings, k+"="+v)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := k.SetStringsValue("Environment", envStrings); err != nil {
|
||||||
|
return fmt.Errorf("failed setting env var registry key, err = %v", err)
|
||||||
|
}
|
||||||
|
if err := k.Close(); err != nil {
|
||||||
|
return fmt.Errorf("failed closing env var registry key, err = %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (ws *windowsService) Install() error {
|
func (ws *windowsService) Install() error {
|
||||||
exepath, err := ws.execPath()
|
exepath, err := ws.execPath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -233,6 +254,11 @@ func (ws *windowsService) Install() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer m.Disconnect()
|
defer m.Disconnect()
|
||||||
|
|
||||||
|
if err := ws.setEnvironmentVariablesInRegistry(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
s, err := m.OpenService(ws.Name)
|
s, err := m.OpenService(ws.Name)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
s.Close()
|
s.Close()
|
||||||
|
|||||||
Reference in New Issue
Block a user