// containerResourceRuntimeValue returns the value of the provided container resource func containerResourceRuntimeValue(fs *api.ResourceFieldSelector, pod *api.Pod, container *api.Container) (string, error) { containerName := fs.ContainerName if len(containerName) == 0 { return fieldpath.ExtractContainerResourceValue(fs, container) } else { return fieldpath.ExtractResourceValueByContainerName(fs, pod, containerName) } }
// collectData collects requested downwardAPI in data map. // Map's key is the requested name of file to dump // Map's value is the (sorted) content of the field to be dumped in the file. func (d *downwardAPIVolume) collectData() (map[string][]byte, error) { errlist := []error{} data := make(map[string][]byte) for _, fileInfo := range d.items { if fileInfo.FieldRef != nil { if values, err := fieldpath.ExtractFieldPathAsString(d.pod, fileInfo.FieldRef.FieldPath); err != nil { glog.Errorf("Unable to extract field %s: %s", fileInfo.FieldRef.FieldPath, err.Error()) errlist = append(errlist, err) } else { data[path.Clean(fileInfo.Path)] = []byte(sortLines(values)) } } else if fileInfo.ResourceFieldRef != nil { containerName := fileInfo.ResourceFieldRef.ContainerName if values, err := fieldpath.ExtractResourceValueByContainerName(fileInfo.ResourceFieldRef, d.pod, containerName); err != nil { glog.Errorf("Unable to extract field %s: %s", fileInfo.ResourceFieldRef.Resource, err.Error()) errlist = append(errlist, err) } else { data[path.Clean(fileInfo.Path)] = []byte(sortLines(values)) } } } return data, utilerrors.NewAggregate(errlist) }