func TerraformVet()

in helpers/foundation-deployer/stages/vet.go [33:75]


func TerraformVet(t testing.TB, terraformDir, policyPath, project string) error {

	fmt.Println("")
	fmt.Println("# Running gcloud terraform vet")
	fmt.Println("")

	options := &terraform.Options{
		TerraformDir: terraformDir,
		Logger:       logger.Discard,
		NoColor:      true,
		PlanFilePath: filepath.Join(os.TempDir(), "plan.tfplan"),
	}
	_, err := terraform.PlanE(t, options)
	if err != nil {
		return err
	}
	jsonPlan, err := terraform.ShowE(t, options)
	if err != nil {
		return err
	}
	jsonFile, err := utils.WriteTmpFileWithExtension(jsonPlan, "json")
	defer os.Remove(jsonFile)
	defer os.Remove(options.PlanFilePath)
	if err != nil {
		return err
	}
	command := fmt.Sprintf("beta terraform vet %s --policy-library=%s --project=%s --quiet", jsonFile, policyPath, project)
	result, err := gcloud.RunCmdE(t, command)
	if err != nil && !(strings.Contains(err.Error(), "Validating resources") && strings.Contains(err.Error(), "done")) {
		return err
	}
	if !gjson.Valid(result) {
		return fmt.Errorf("Error parsing output, invalid json: %s", result)
	}

	if len(gjson.Parse(result).Array()) > 0 {
		return fmt.Errorf("Policy violations found: %s", result)
	}
	fmt.Println("")
	fmt.Println("# The configuration passed tf vet.")
	fmt.Println("")
	return nil
}