func FromGcloudOSArgument()

in cli_tools/common/distro/distro.go [206:235]


func FromGcloudOSArgument(osFlagValue string) (r Release, e error) {
	if legacyFlags[osFlagValue] != "" {
		osFlagValue = legacyFlags[osFlagValue]
	}
	match := osFlagExpression.FindStringSubmatch(strings.ToLower(osFlagValue))
	if match == nil {
		return r, fmt.Errorf("expected pattern of `distro-version`. Actual: `%s`", osFlagValue)
	}
	components := make(map[string]string)
	for i, name := range osFlagExpression.SubexpNames() {
		if i != 0 && name != "" {
			components[name] = match[i]
		}
	}
	distro, version, arch := components["distro"], components["version"], components["arch"]

	var major, minor string
	if distro == ubuntu {
		// In gcloud, major and minor are combined as MMmm, such as ubuntu-1804
		if len(version) != 4 {
			return r, fmt.Errorf("expected version with length four. Actual: `%s`", version)
		}
		major, minor = version[:2], version[2:]
	} else if distro == windows && strings.HasSuffix(version, r2) {
		major, minor = version[:len(version)-2], r2
	} else {
		major, minor = version, ""
	}
	return FromComponents(distro, major, minor, arch)
}