// 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 nodeAllocatable, err := d.plugin.host.GetNodeAllocatable() if err != nil { errlist = append(errlist, err) } else if values, err := fieldpath.ExtractResourceValueByContainerNameAndNodeAllocatable(fileInfo.ResourceFieldRef, d.pod, containerName, nodeAllocatable); 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) }
// collectData collects requested metadata 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 (m *metadataVolume) collectData(data *map[string]string) error { errlist := []error{} for fieldReference, fileName := range m.fieldReferenceFileNames { if values, err := fieldpath.ExtractFieldPathAsString(m.pod, fieldReference); err != nil { glog.Error(err) errlist = append(errlist, err) } else { (*data)[fileName] = sortLines(values) } } return utilErrors.NewAggregate(errlist) }
func envValueFrom(pod *api.Pod, e api.EnvVar) string { internalFieldPath, _, err := api.Scheme.ConvertFieldLabel(e.ValueFrom.FieldRef.APIVersion, "Pod", e.ValueFrom.FieldRef.FieldPath, "") if err != nil { return "" // pod validation should catch this on create } valueFrom, err := fieldpath.ExtractFieldPathAsString(pod, internalFieldPath) if err != nil { return "" // pod validation should catch this on create } return valueFrom }
// 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]string, error) { errlist := []error{} data := make(map[string]string) for fieldReference, fileName := range d.fieldReferenceFileNames { if values, err := fieldpath.ExtractFieldPathAsString(d.pod, fieldReference); err != nil { glog.Errorf("Unable to extract field %s: %s", fieldReference, err.Error()) errlist = append(errlist, err) } else { data[fileName] = sortLines(values) } } return data, utilErrors.NewAggregate(errlist) }
// podFieldSelectorRuntimeValue returns the runtime value of the given // selector for a pod. func (kl *Kubelet) podFieldSelectorRuntimeValue(fs *api.ObjectFieldSelector, pod *api.Pod, podIP string) (string, error) { internalFieldPath, _, err := api.Scheme.ConvertFieldLabel(fs.APIVersion, "Pod", fs.FieldPath, "") if err != nil { return "", err } switch internalFieldPath { case "spec.nodeName": return pod.Spec.NodeName, nil case "spec.serviceAccountName": return pod.Spec.ServiceAccountName, nil case "status.podIP": return podIP, nil } return fieldpath.ExtractFieldPathAsString(pod, internalFieldPath) }
func getEnvVarRefValue(f *clientcmd.Factory, store *resourceStore, from *kapi.EnvVarSource, obj runtime.Object, c *kapi.Container) (string, error) { if from.SecretKeyRef != nil { return getSecretRefValue(f, store, from.SecretKeyRef) } if from.ConfigMapKeyRef != nil { return getConfigMapRefValue(f, store, from.ConfigMapKeyRef) } if from.FieldRef != nil { return fieldpath.ExtractFieldPathAsString(obj, from.FieldRef.FieldPath) } if from.ResourceFieldRef != nil { return fieldpath.ExtractContainerResourceValue(from.ResourceFieldRef, c) } return "", fmt.Errorf("invalid valueFrom") }
// 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(defaultMode *int32) (map[string]volumeutil.FileProjection, error) { if defaultMode == nil { return nil, fmt.Errorf("No defaultMode used, not even the default value for it") } errlist := []error{} data := make(map[string]volumeutil.FileProjection) for _, fileInfo := range d.items { var fileProjection volumeutil.FileProjection fPath := path.Clean(fileInfo.Path) if fileInfo.Mode != nil { fileProjection.Mode = *fileInfo.Mode } else { fileProjection.Mode = *defaultMode } if fileInfo.FieldRef != nil { // TODO: unify with Kubelet.podFieldSelectorRuntimeValue 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 { fileProjection.Data = []byte(sortLines(values)) } } else if fileInfo.ResourceFieldRef != nil { containerName := fileInfo.ResourceFieldRef.ContainerName nodeAllocatable, err := d.plugin.host.GetNodeAllocatable() if err != nil { errlist = append(errlist, err) } else if values, err := fieldpath.ExtractResourceValueByContainerNameAndNodeAllocatable(fileInfo.ResourceFieldRef, d.pod, containerName, nodeAllocatable); err != nil { glog.Errorf("Unable to extract field %s: %s", fileInfo.ResourceFieldRef.Resource, err.Error()) errlist = append(errlist, err) } else { fileProjection.Data = []byte(sortLines(values)) } } data[fPath] = fileProjection } return data, utilerrors.NewAggregate(errlist) }