// parseVolumesFrom ensure that the supplied volumes-from is valid. func parseVolumesFrom(spec string) (string, string, error) { if len(spec) == 0 { return "", "", fmt.Errorf("malformed volumes-from specification: %s", spec) } specParts := strings.SplitN(spec, ":", 2) id := specParts[0] mode := "rw" if len(specParts) == 2 { mode = specParts[1] if !volume.ValidMountMode(mode) { return "", "", fmt.Errorf("invalid mode for volumes-from: %s", mode) } } return id, mode, nil }
// parseVolumesFrom ensure that the supplied volumes-from is valid. func parseVolumesFrom(spec string) (string, string, error) { if len(spec) == 0 { return "", "", derr.ErrorCodeVolumeFromBlank.WithArgs(spec) } specParts := strings.SplitN(spec, ":", 2) id := specParts[0] mode := "rw" if len(specParts) == 2 { mode = specParts[1] if !volume.ValidMountMode(mode) { return "", "", derr.ErrorCodeVolumeMode.WithArgs(mode) } } return id, mode, nil }
// parseBindMount validates the configuration of mount information in runconfig is valid. func parseBindMount(spec, volumeDriver string) (*mountPoint, error) { bind := &mountPoint{ RW: true, } arr := strings.Split(spec, ":") switch len(arr) { case 2: bind.Destination = arr[1] case 3: bind.Destination = arr[1] mode := arr[2] if !volume.ValidMountMode(mode) { return nil, fmt.Errorf("invalid mode for volumes-from: %s", mode) } bind.RW = volume.ReadWrite(mode) // Mode field is used by SELinux to decide whether to apply label bind.Mode = mode default: return nil, fmt.Errorf("Invalid volume specification: %s", spec) } //validate the volumes destination path if !filepath.IsAbs(bind.Destination) { return nil, fmt.Errorf("Invalid volume destination path: %s mount path must be absolute.", bind.Destination) } name, source, err := parseVolumeSource(arr[0]) if err != nil { return nil, err } if len(source) == 0 { bind.Driver = volumeDriver if len(bind.Driver) == 0 { bind.Driver = volume.DefaultDriverName } } else { bind.Source = filepath.Clean(source) } bind.Name = name bind.Destination = filepath.Clean(bind.Destination) return bind, nil }