func processTestInfra()

in kinder/ci/tools/update-workflows/pkg/testinfra.go [32:125]


func processTestInfra(settings *Settings, cfg *jobGroup, oldestVer, minVer *versionutil.Version) error {
	log.Infof("processing test-infra jobs for jobGroup %q", cfg.Name)

	if len(cfg.TestInfraJobSpec.Template) == 0 {
		log.Infof("empty TestInfra.Template; skipping test-infra jobs for jobGroup %q", cfg.Name)
		return nil
	}

	// prepare job template
	var templateJob *template.Template
	tPath := cfg.TestInfraJobSpec.Template
	if !path.IsAbs(tPath) {
		tPath = filepath.Join(filepath.Dir(settings.PathConfig), tPath)
	}
	tBytes, err := ioutil.ReadFile(tPath)
	if err != nil {
		return err
	}
	templateJob, err = template.New("job-template").Funcs(template.FuncMap{
		"dashVer":       dashVer,
		"ciLabelFor":    ciLabelFor,
		"imageVer":      imageVer,
		"branchFor":     branchFor,
		"sigReleaseVer": sigReleaseVer,
	}).Parse(string(tBytes))
	if err != nil {
		return err
	}

	// prepare output file name template
	templateFileName, err := template.New("file-name").Parse(cfg.KinderWorkflowSpec.TargetFile)
	if err != nil {
		return err
	}

	str := autogeneratedHeader + "\nperiodics:\n"

	for i, job := range cfg.Jobs {
		log.Infof("processing Job index %d, %#v", i, job)

		if skipVersion(oldestVer, minVer, job.KubernetesVersion) {
			log.Infof("skipping Job index %d, %#v", i, job)
			continue
		}

		// prepare variables for template replacement
		vars := templateVars{
			KubernetesVersion: job.KubernetesVersion,
			KubeadmVersion:    job.KubeadmVersion,
			KubeletVersion:    job.KubeletVersion,
			InitVersion:       job.InitVersion,
			TargetFile:        cfg.TestInfraJobSpec.TargetFile,

			TestInfraImage: settings.ImageTestInfra,
		}

		// update file to run in the test-infra job
		buf := bytes.Buffer{}
		if err := templateFileName.Execute(&buf, vars); err != nil {
			return err
		}
		vars.WorkflowFile = "\"" + strings.TrimSuffix(buf.String(), ".yaml") + "\""

		// set job period and alerts
		var failures, staleResults int
		if job.KubernetesVersion == latestVersion || job.KubeadmVersion == latestVersion {
			vars.JobInterval = "2h"
			failures = 8
			staleResults = 16
		} else {
			vars.JobInterval = "12h"
			failures = 4
			staleResults = 48

		}
		vars.AlertAnnotations = fmt.Sprintf("    testgrid-num-failures-to-alert: \"%d\"\n"+
			"    testgrid-alert-stale-results-hours: \"%d\"", failures, staleResults)

		// execute main template
		buf.Reset()
		if err := templateJob.Execute(&buf, vars); err != nil {
			return err
		}
		str += "\n" + buf.String()
	}

	// write testinfra job file
	outPath := filepath.Join(settings.PathTestInfra, path.Base(cfg.TestInfraJobSpec.TargetFile))
	log.Infof("writing %q", outPath)
	if err := ioutil.WriteFile(outPath, []byte(str), 0644); err != nil {
		return err
	}
	return nil
}