func parseOSRelease()

in providers/linux/os.go [121:154]


func parseOSRelease(content []byte) (*types.OSInfo, error) {
	fields := map[string]string{}

	s := bufio.NewScanner(bytes.NewReader(content))
	for s.Scan() {
		line := bytes.TrimSpace(s.Bytes())

		// Skip blank lines and comments.
		if len(line) == 0 || bytes.HasPrefix(line, []byte("#")) {
			continue
		}

		parts := bytes.SplitN(s.Bytes(), []byte("="), 2)
		if len(parts) != 2 {
			continue
		}

		key := string(bytes.TrimSpace(parts[0]))
		val := string(bytes.TrimSpace(parts[1]))
		fields[key] = val

		// Trim quotes.
		val, err := strconv.Unquote(val)
		if err == nil {
			fields[key] = strings.TrimSpace(val)
		}
	}

	if s.Err() != nil {
		return nil, s.Err()
	}

	return makeOSInfo(fields)
}