You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

62 lines
1.6 KiB

package config
import (
"gerrit.wikimedia.org/r/blubber/build"
)
// RunsConfig holds configuration fields related to the application's
// runtime environment.
//
type RunsConfig struct {
UserConfig `json:",inline"`
Insecurely Flag `json:"insecurely"` // runs user owns application files
Environment map[string]string `json:"environment" validate:"envvars"` // environment variables
}
// Merge takes another RunsConfig and overwrites this struct's fields. All
// fields except Environment are overwritten if set. The latter is an additive
// merge.
//
func (run *RunsConfig) Merge(run2 RunsConfig) {
run.UserConfig.Merge(run2.UserConfig)
run.Insecurely.Merge(run2.Insecurely)
if run.Environment == nil {
run.Environment = make(map[string]string)
}
for name, value := range run2.Environment {
run.Environment[name] = value
}
}
// InstructionsForPhase injects build instructions related to the runtime
// configuration.
//
// PhasePrivileged
//
// Creates LocalLibPrefix directory and unprivileged user home directory,
// creates the unprivileged user and its group, and sets up directory
// permissions.
//
// PhasePrivilegeDropped
//
// Injects build.Env instructions for all names/values defined by
// RunsConfig.Environment.
//
func (run RunsConfig) InstructionsForPhase(phase build.Phase) []build.Instruction {
switch phase {
case build.PhasePrivileged:
return []build.Instruction{build.RunAll{
build.CreateUser(run.As, run.UID, run.GID),
}}
case build.PhasePrivilegeDropped:
if len(run.Environment) > 0 {
return []build.Instruction{
build.Env{run.Environment},
}
}
}
return []build.Instruction{}
}