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
}