func parseResourcesFromFile()

in gke-deploy/core/resource/resource.go [548:590]


func parseResourcesFromFile(ctx context.Context, filename string, objs Objects, oss services.OSService) (Objects, error) {
	readStdin := filename == "-"
	var printFilename string
	if readStdin {
		printFilename = "stdin"
	} else {
		printFilename = fmt.Sprintf("file %q", filename)
	}

	in, err := oss.ReadFile(ctx, filename)
	if err != nil {
		return nil, fmt.Errorf("failed to read %s: %v", printFilename, err)
	}
	if readStdin {
		filename = "k8s.yaml" // Files parsed from stdin will have the prefix "k8s".
	}

	split := strings.Split(string(in), "\n---")

	for i, r := range split {
		lines := strings.Split(r, "\n")
		onlyCommentsAndWhitespace := true
		for _, line := range lines {
			trimmedLine := strings.TrimSpace(line)
			if trimmedLine != "" && !strings.HasPrefix(trimmedLine, "#") {
				onlyCommentsAndWhitespace = false
				break
			}
		}
		if onlyCommentsAndWhitespace {
			continue
		}

		obj, err := DecodeFromYAML(ctx, []byte(r))
		if err != nil {
			return nil, fmt.Errorf("failed to decode resource from item %d in %s: %v", i+1, printFilename, err)
		}

		objs = append(objs, obj)
	}

	return objs, nil
}