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
}