func()

in validators/docker_validator.go [97:138]


func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info dockerInfo) ([]error, []error) {
	// Validate docker version.
	if info.ServerErrors != nil {
		return nil, []error{errors.Errorf("error verifying Docker info: %q", strings.Join(info.ServerErrors, `", "`))}
	}

	matched := false
	for _, v := range spec.Version {
		r := regexp.MustCompile(v)
		if r.MatchString(info.ServerVersion) {
			d.Reporter.Report(dockerConfigPrefix+"VERSION", info.ServerVersion, good)
			matched = true
		}
	}
	if !matched {
		// If it's of the new Docker version scheme but didn't match above, it
		// must be a newer version than the most recently validated one.
		ver := `\d{2}\.\d+\.\d+(?:-[a-z]{2})?`
		r := regexp.MustCompile(ver)
		if r.MatchString(info.ServerVersion) {
			d.Reporter.Report(dockerConfigPrefix+"VERSION", info.ServerVersion, good)
			w := errors.Errorf(
				"this Docker version is not on the list of validated versions: %s. Latest validated version: %s",
				info.ServerVersion,
				latestValidatedDockerVersion,
			)
			return []error{w}, nil
		}
		d.Reporter.Report(dockerConfigPrefix+"VERSION", info.ServerVersion, bad)
		return nil, []error{errors.Errorf("unsupported docker version: %s", info.ServerVersion)}
	}
	// Validate graph driver.
	item := dockerConfigPrefix + "GRAPH_DRIVER"
	for _, gd := range spec.GraphDriver {
		if info.Driver == gd {
			d.Reporter.Report(item, info.Driver, good)
			return nil, nil
		}
	}
	d.Reporter.Report(item, info.Driver, bad)
	return nil, []error{errors.Errorf("unsupported graph driver: %s", info.Driver)}
}