func BuildDependency()

in tpgtools/sample.go [174:220]


func BuildDependency(fileName string, product SnakeCaseProductName, localname, version string, hasGAEquivalent, makeLongForm bool, b []byte) (*Dependency, error) {
	// Miscellaneous name rather than "resource name" because this is the name in the sample json file - which might not match the TF name!
	// we have to account for that.
	var resourceName miscellaneousNameSnakeCase
	var packageName DCLPackageName
	fileParts := strings.Split(fileName, ".")
	if len(fileParts) == 4 {
		p, rn := fileParts[1], fileParts[2]
		packageName = DCLPackageName(p)
		resourceName = miscellaneousNameSnakeCase(rn)
	} else if len(fileParts) == 3 {
		resourceName = miscellaneousNameSnakeCase(fileParts[1])
		var err error
		packageName, err = findDCLReferencePackage(product)
		if err != nil {
			return nil, err
		}
	} else {
		return nil, fmt.Errorf("Invalid sample dependency file name: %s", fileName)
	}

	if localname == "" {
		localname = fileParts[0]
	}
	terraformResourceType, err := DCLToTerraformReference(packageName, resourceName, version)
	if err != nil {
		return nil, fmt.Errorf("Error generating sample dependency reference %s: %s", fileName, err)
	}

	block, err := ConvertSampleJSONToHCL(packageName, resourceName, version, hasGAEquivalent, makeLongForm, b)
	if err != nil {
		glog.Errorf("failed to convert %q", fileName)
		return nil, fmt.Errorf("Error generating sample dependency %s: %s", fileName, err)
	}

	// Find all instances of `resource "foo" "bar"` and replace `bar` with localname.
	re := regexp.MustCompile(`(resource "` + terraformResourceType + `" ")(\w*)`)
	block = re.ReplaceAllString(block, "${1}"+localname)

	d := &Dependency{
		FileName:              fileName,
		HCLLocalName:          localname,
		TerraformResourceType: terraformResourceType,
		HCLBlock:              block,
	}
	return d, nil
}