in src/app/backend/resource/pod/detail.go [360:408]
func evalValueFrom(src *v1.EnvVarSource, container *v1.Container, pod *v1.Pod,
configMaps *v1.ConfigMapList, secrets *v1.SecretList) string {
switch {
case src.ConfigMapKeyRef != nil:
name := src.ConfigMapKeyRef.LocalObjectReference.Name
for _, configMap := range configMaps.Items {
if configMap.ObjectMeta.Name == name {
return configMap.Data[src.ConfigMapKeyRef.Key]
}
}
case src.SecretKeyRef != nil:
name := src.SecretKeyRef.LocalObjectReference.Name
for _, secret := range secrets.Items {
if secret.ObjectMeta.Name == name {
return base64.StdEncoding.EncodeToString([]byte(
secret.Data[src.SecretKeyRef.Key]))
}
}
case src.ResourceFieldRef != nil:
valueFrom, err := extractContainerResourceValue(src.ResourceFieldRef, container)
if err != nil {
valueFrom = ""
}
resource := src.ResourceFieldRef.Resource
if valueFrom == "0" && (resource == "limits.cpu" || resource == "limits.memory") {
valueFrom = "node allocatable"
}
return valueFrom
case src.FieldRef != nil:
gv, err := schema.ParseGroupVersion(src.FieldRef.APIVersion)
if err != nil {
log.Println(err)
return ""
}
gvk := gv.WithKind("Pod")
internalFieldPath, _, err := runtime.NewScheme().ConvertFieldLabel(gvk, src.FieldRef.FieldPath, "")
if err != nil {
log.Println(err)
return ""
}
valueFrom, err := ExtractFieldPathAsString(pod, internalFieldPath)
if err != nil {
log.Println(err)
return ""
}
return valueFrom
}
return ""
}