func()

in commands/generate.go [145:221]


func (c GenerateCommand) fromExamplePath() int {
	wd := c.workingDir
	if c.overwrite {
		logrus.Infof("overwriting existing terraform configurations...")
		_ = os.RemoveAll(path.Join(wd, "testing.tf"))
		_ = os.RemoveAll(path.Join(wd, "dependency.tf"))
	}
	err := os.WriteFile(path.Join(wd, "provider.tf"), hclwrite.Format([]byte(resource.DefaultProviderConfig)), 0644)
	if err != nil {
		logrus.Errorf("writing provider.tf: %+v", err)
	}
	logrus.Infof("provider configuration is written to %s", path.Join(wd, "provider.tf"))

	// load example
	logrus.Infof("loading example: %s", c.path)
	example, err := resource.NewAzapiDefinitionFromExample(c.path, c.resourceType)
	if err != nil {
		logrus.Fatalf("loading example: %+v", err)
	}
	if c.useRawJsonPayload {
		logrus.Infof("using raw json payload in 'body'...")
		example.BodyFormat = types.BodyFormatJson
	}

	// load dependencies
	logrus.Infof("loading dependencies...")
	referenceResolvers := []resolver.ReferenceResolver{
		resolver.NewExistingDependencyResolver(wd),
		resolver.NewAzapiDependencyResolver(),
		resolver.NewAzurermDependencyResolver(),
		resolver.NewProviderIDResolver(),
		resolver.NewLocationIDResolver(),
		resolver.NewAzapiResourcePlaceholderResolver(),
	}
	context := resource.NewContext(referenceResolvers)
	err = context.InitFile(allTerraformConfig(wd))
	if err != nil {
		logrus.Errorf("initializing terraform configurations: %+v", err)
		return 1
	}

	logrus.Infof("generating terraform configurations...")
	err = context.AddAzapiDefinition(example)
	if err != nil {
		return 0
	}

	logrus.Infof("writing terraform configurations...")
	blockMap := blockFileMap(wd)
	contentToAppend := make(map[string]string)
	len := len(context.File.Body().Blocks())
	for i, block := range context.File.Body().Blocks() {
		switch block.Type() {
		case "terraform", "provider", "variable":
			continue
		default:
			key := fmt.Sprintf("%s.%s", block.Type(), strings.Join(block.Labels(), "."))
			if _, ok := blockMap[key]; ok {
				continue
			}
			outputFilename := "dependency.tf"
			if i == len-1 {
				outputFilename = "testing.tf"
			}
			contentToAppend[outputFilename] = contentToAppend[outputFilename] + "\n" + string(block.BuildTokens(nil).Bytes())
		}
	}

	for filename, content := range contentToAppend {
		err := appendContent(path.Join(wd, filename), content)
		if err != nil {
			logrus.Errorf("writing %s: %+v", filename, err)
		}
		logrus.Infof("configuration is written to %s", path.Join(wd, filename))
	}
	return 0
}