func()

in tpgtools/resource.go [895:1007]


func (r *Resource) loadDCLSamples() []Sample {
	sampleAccessoryFolder := r.getSampleAccessoryFolder()
	packagePath := r.productMetadata.PackagePath
	version := r.versionMetadata.V
	resourceType := r.DCLTitle()
	sampleFriendlyMetaPath := path.Join(string(sampleAccessoryFolder), "meta.yaml")
	samples := []Sample{}

	if mode != nil && *mode == "serialization" {
		return samples
	}

	// Samples appear in the root product folder
	packagePath = Filepath(strings.Split(string(packagePath), "/")[0])
	samplesPath := Filepath(path.Join(*fPath, string(packagePath), "samples"))
	files, err := ioutil.ReadDir(string(samplesPath))
	if err != nil {
		// ignore the error if the file just doesn't exist
		if !os.IsNotExist(err) {
			glog.Exit(err)
		}
	}
	for _, file := range files {
		if !strings.HasSuffix(file.Name(), ".yaml") {
			continue
		}
		sample := Sample{}
		sampleOGFilePath := path.Join(string(samplesPath), file.Name())
		var tc []byte
		if pathExists(sampleFriendlyMetaPath) {
			tc, err = mergeYaml(sampleOGFilePath, sampleFriendlyMetaPath)
		} else {
			glog.Errorf("warning : sample meta does not exist for %v at %q", r.TerraformName(), sampleFriendlyMetaPath)
			tc, err = ioutil.ReadFile(path.Join(string(samplesPath), file.Name()))
		}
		if err != nil {
			glog.Exit(err)
		}

		err = yaml.UnmarshalStrict(tc, &sample)
		if err != nil {
			glog.Exit(err)
		}

		versionMatch := false
		for _, v := range sample.Versions {
			if v == version {
				versionMatch = true
			}
			if v == "ga" {
				sample.HasGAEquivalent = true
				versionMatch = true
			}
		}

		primaryResource := *sample.PrimaryResource
		var parts []miscellaneousNameSnakeCase
		parts = assertSnakeArray(strings.Split(primaryResource, "."))
		primaryResourceName := snakeToTitleCase(parts[len(parts)-2])

		if !versionMatch {
			continue
		} else if !strings.EqualFold(primaryResourceName.titlecase(), resourceType.titlecase()) {
			// This scenario will occur for product folders with multiple resources
			continue
		}

		sample.SamplesPath = samplesPath
		sample.resourceReference = r
		sample.FileName = file.Name()

		var dependencies []Dependency
		mainResource := sample.generateSampleDependencyWithName(primaryResource, "primary")
		dependencies = append(dependencies, mainResource)
		for _, dFileName := range sample.DependencyFileNames {
			dependency := sample.generateSampleDependency(dFileName)
			dependencies = append(dependencies, dependency)
		}
		sample.DependencyList = dependencies
		sample.TestSlug = RenderedString(sampleNameToTitleCase(*sample.Name).titlecase())

		// The "labels" and "annotations" fields in the state are decided by the configuration.
		// During importing, as the configuration is unavailable, the "labels" and "annotations" fields in the state will be empty.
		// So add the "labels" and the "annotations" fields to the ImportStateVerifyIgnore list.
		if r.HasLabels() {
			sample.IgnoreRead = append(sample.IgnoreRead, "labels", "terraform_labels")
		}

		if r.HasAnnotations() {
			sample.IgnoreRead = append(sample.IgnoreRead, "annotations")
		}

		if r.GenerateLongFormTests {
			longFormSample := sample
			longFormSample.LongForm = true
			var longFormDependencies []Dependency
			mainResourceLongForm := longFormSample.generateSampleDependencyWithName(primaryResource, "primary")
			longFormDependencies = append(longFormDependencies, mainResourceLongForm)
			for _, dFileName := range longFormSample.DependencyFileNames {
				longFormDependency := sample.generateSampleDependency(dFileName)
				longFormDependencies = append(longFormDependencies, longFormDependency)
			}
			longFormSample.DependencyList = longFormDependencies
			longFormSample.TestSlug += "LongForm"
			samples = append(samples, longFormSample)
		}

		samples = append(samples, sample)

	}

	return samples
}