Minor refactoring.
Move the code that injects 'external' environment variables into a separate method. Also, inject those for Scalyr containers.
This commit is contained in:
parent
a62cae175c
commit
df7c12ba71
|
|
@ -411,59 +411,7 @@ func (c *Cluster) generatePodTemplate(
|
|||
envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...)
|
||||
}
|
||||
|
||||
var names []string
|
||||
// handle environment variables from the PodEnvironmentConfigMap. We don't use envSource here as it is impossible
|
||||
// to track any changes to the object envSource points to. In order to emulate the envSource behavior, however, we
|
||||
// need to make sure that PodConfigMap variables doesn't override those we set explicitly from the configuration
|
||||
// parameters
|
||||
envVarsMap := make(map[string]string)
|
||||
for _, envVar := range envVars {
|
||||
envVarsMap[envVar.Name] = envVar.Value
|
||||
}
|
||||
for name := range customPodEnvVars {
|
||||
if _, ok := envVarsMap[name]; !ok {
|
||||
names = append(names, name)
|
||||
} else {
|
||||
c.logger.Warningf("variable %q value from %q is ignored: conflict with the definition from the operator",
|
||||
name, c.OpConfig.PodEnvironmentConfigMap)
|
||||
}
|
||||
}
|
||||
|
||||
sort.Strings(names)
|
||||
for _, name := range names {
|
||||
envVars = append(envVars, v1.EnvVar{Name: name, Value: customPodEnvVars[name]})
|
||||
}
|
||||
|
||||
//TODO: move the variable comparing and sorting code to a sepatate function
|
||||
var secretVarNames []string
|
||||
// include references to the secrets provided in the operator configuration.
|
||||
// TODO: what happens with the secrets located in a different namespace?
|
||||
if c.OpConfig.PodEnvironmentSecret != "" {
|
||||
for secretVarName := range customPodSecrets {
|
||||
// environment variable names have scricter rules than secrets
|
||||
if !k8sutil.EnvironmentVariableNameIsValid(secretVarName) {
|
||||
c.logger.Warningf("Secret key %s cannot be a name of an environment variable")
|
||||
continue
|
||||
}
|
||||
if _, ok := envVarsMap[secretVarName]; !ok {
|
||||
secretVarNames = append(secretVarNames, secretVarName)
|
||||
} else {
|
||||
c.logger.Warningf("variable %q value from %q is ignored: conflict with the definition from the operator",
|
||||
secretVarNames, c.OpConfig.PodEnvironmentConfigMap)
|
||||
}
|
||||
}
|
||||
sort.Strings(secretVarNames)
|
||||
for _, name := range secretVarNames {
|
||||
envVars = append(envVars, v1.EnvVar{Name: name, ValueFrom: &v1.EnvVarSource{
|
||||
SecretKeyRef: &v1.SecretKeySelector{
|
||||
LocalObjectReference: v1.LocalObjectReference{
|
||||
Name: c.OpConfig.PodEnvironmentSecret,
|
||||
},
|
||||
Key: name,
|
||||
},
|
||||
}})
|
||||
}
|
||||
}
|
||||
envVars = c.injectPodEnvironment(customPodSecrets, customPodEnvVars, envVars)
|
||||
|
||||
privilegedMode := true
|
||||
containerImage := c.OpConfig.DockerImage
|
||||
|
|
@ -523,38 +471,7 @@ func (c *Cluster) generatePodTemplate(
|
|||
ImagePullPolicy: v1.PullIfNotPresent,
|
||||
Resources: *resourceRequirementsScalyrSidecar,
|
||||
VolumeMounts: volumeMounts,
|
||||
Env: []v1.EnvVar{
|
||||
{
|
||||
Name: "POD_NAME",
|
||||
ValueFrom: &v1.EnvVarSource{
|
||||
FieldRef: &v1.ObjectFieldSelector{
|
||||
APIVersion: "v1",
|
||||
FieldPath: "metadata.name",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "POD_NAMESPACE",
|
||||
ValueFrom: &v1.EnvVarSource{
|
||||
FieldRef: &v1.ObjectFieldSelector{
|
||||
APIVersion: "v1",
|
||||
FieldPath: "metadata.namespace",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "SCALYR_API_KEY",
|
||||
Value: c.OpConfig.ScalyrAPIKey,
|
||||
},
|
||||
{
|
||||
Name: "SCALYR_SERVER_HOST",
|
||||
Value: c.Name,
|
||||
},
|
||||
{
|
||||
Name: "SCALYR_SERVER_URL",
|
||||
Value: c.OpConfig.ScalyrServerURL,
|
||||
},
|
||||
},
|
||||
Env: c.produceScalyrSidecarEnvironment(customPodSecrets, customPodEnvVars),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
@ -573,6 +490,105 @@ func (c *Cluster) generatePodTemplate(
|
|||
return &template
|
||||
}
|
||||
|
||||
// injectPodEnvironment adds variables from podEnvironmentConfigMap and PodEnvironmentSecret
|
||||
func (c *Cluster) injectPodEnvironment(customPodSecrets map[string][]byte, customPodEnvVars map[string]string, envVars []v1.EnvVar) []v1.EnvVar {
|
||||
var (
|
||||
variablesToInject []string
|
||||
)
|
||||
// handle environment variables from the PodEnvironmentConfigMap. We don't use envSource here as it is impossible
|
||||
// to track any changes to the object envSource points to. In order to emulate the envSource behavior, however, we
|
||||
// need to make sure that PodConfigMap variables doesn't override those we set explicitly from the configuration
|
||||
// parameters
|
||||
envVarsMap := make(map[string]string)
|
||||
for _, envVar := range envVars {
|
||||
envVarsMap[envVar.Name] = envVar.Value
|
||||
}
|
||||
|
||||
for secretKey := range customPodSecrets {
|
||||
// environment variable names have stricter rules than secrets
|
||||
if !k8sutil.EnvironmentVariableNameIsValid(secretKey) {
|
||||
c.logger.Warningf("Secret key %s cannot be a name of an environment variable")
|
||||
continue
|
||||
}
|
||||
if _, ok := envVarsMap[secretKey]; !ok {
|
||||
variablesToInject = append(variablesToInject, secretKey)
|
||||
} else {
|
||||
c.logger.Warningf("variable %q value from %q is ignored: conflict with the definition from the operator",
|
||||
secretKey, c.OpConfig.PodEnvironmentSecret)
|
||||
}
|
||||
}
|
||||
|
||||
for podEnvironmentVariable := range customPodEnvVars {
|
||||
if _, ok := envVarsMap[podEnvironmentVariable]; !ok {
|
||||
if _, ok = customPodSecrets[podEnvironmentVariable]; !ok {
|
||||
variablesToInject = append(variablesToInject, podEnvironmentVariable)
|
||||
} else {
|
||||
c.logger.Warningf("variable %q value from %q is ignored: conflict with the pod_environment_secret",
|
||||
podEnvironmentVariable, c.OpConfig.PodEnvironmentConfigMap)
|
||||
}
|
||||
} else {
|
||||
c.logger.Warningf("variable %q value from %q is ignored: conflict with the definition from the operator",
|
||||
podEnvironmentVariable, c.OpConfig.PodEnvironmentConfigMap)
|
||||
}
|
||||
}
|
||||
|
||||
sort.Strings(variablesToInject)
|
||||
for _, name := range variablesToInject {
|
||||
if _, ok := customPodSecrets[name]; ok {
|
||||
envVars = append(envVars, v1.EnvVar{Name: name, ValueFrom: &v1.EnvVarSource{
|
||||
SecretKeyRef: &v1.SecretKeySelector{
|
||||
LocalObjectReference: v1.LocalObjectReference{
|
||||
Name: c.OpConfig.PodEnvironmentSecret,
|
||||
},
|
||||
Key: name,
|
||||
},
|
||||
}})
|
||||
} else if val, ok := customPodEnvVars[name]; ok {
|
||||
envVars = append(envVars, v1.EnvVar{Name: name, Value: val})
|
||||
} else {
|
||||
c.logger.Warningf("could not determine the source of the variable %q definition", name)
|
||||
}
|
||||
}
|
||||
|
||||
return envVars
|
||||
}
|
||||
|
||||
func (c *Cluster) produceScalyrSidecarEnvironment(customPodSecrets map[string][]byte, customPodEnvVars map[string]string) []v1.EnvVar {
|
||||
podEnv := []v1.EnvVar{
|
||||
{
|
||||
Name: "POD_NAME",
|
||||
ValueFrom: &v1.EnvVarSource{
|
||||
FieldRef: &v1.ObjectFieldSelector{
|
||||
APIVersion: "v1",
|
||||
FieldPath: "metadata.name",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "POD_NAMESPACE",
|
||||
ValueFrom: &v1.EnvVarSource{
|
||||
FieldRef: &v1.ObjectFieldSelector{
|
||||
APIVersion: "v1",
|
||||
FieldPath: "metadata.namespace",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "SCALYR_API_KEY",
|
||||
Value: c.OpConfig.ScalyrAPIKey,
|
||||
},
|
||||
{
|
||||
Name: "SCALYR_SERVER_HOST",
|
||||
Value: c.Name,
|
||||
},
|
||||
{
|
||||
Name: "SCALYR_SERVER_URL",
|
||||
Value: c.OpConfig.ScalyrServerURL,
|
||||
},
|
||||
}
|
||||
return c.injectPodEnvironment(customPodSecrets, customPodEnvVars, podEnv)
|
||||
}
|
||||
|
||||
func getBucketScopeSuffix(uid string) string {
|
||||
if uid != "" {
|
||||
return fmt.Sprintf("/%s", uid)
|
||||
|
|
|
|||
Loading…
Reference in New Issue