in commands/generate.go [290:365]
func (c *GenerateCommand) generate(apiPaths []swagger.ApiPath) int {
wd := c.workingDir
azapiDefinitionsAll := make([]types.AzapiDefinition, 0)
for _, apiPath := range apiPaths {
azapiDefinitionsAll = append(azapiDefinitionsAll, resource.NewAzapiDefinitionsFromSwagger(apiPath)...)
}
if c.useRawJsonPayload {
logrus.Infof("using raw json payload in 'body'...")
for i := range azapiDefinitionsAll {
azapiDefinitionsAll[i].BodyFormat = types.BodyFormatJson
}
}
azapiDefinitionByResourceType := make(map[string][]types.AzapiDefinition)
for _, azapiDefinition := range azapiDefinitionsAll {
azureResourceType := azapiDefinition.AzureResourceType
// To avoid the case that there are multiple resource types with the same name but different casing
for resourceType := range azapiDefinitionByResourceType {
if strings.EqualFold(resourceType, azureResourceType) {
azureResourceType = resourceType
}
}
azapiDefinitionByResourceType[azureResourceType] = append(azapiDefinitionByResourceType[azureResourceType], azapiDefinition)
}
resourceTypes := make([]string, 0)
for resourceType := range azapiDefinitionByResourceType {
slices.SortFunc(azapiDefinitionByResourceType[resourceType], func(i, j types.AzapiDefinition) int {
return azapiDefinitionOrder(i) - azapiDefinitionOrder(j)
})
resourceTypes = append(resourceTypes, resourceType)
}
sort.Strings(resourceTypes)
referenceResolvers := []resolver.ReferenceResolver{
resolver.NewAzapiDependencyResolver(),
resolver.NewAzapiDefinitionResolver(azapiDefinitionsAll),
resolver.NewProviderIDResolver(),
resolver.NewLocationIDResolver(),
resolver.NewAzapiResourceIdResolver(),
}
for _, resourceType := range resourceTypes {
logrus.Infof("generating terraform configurations for %s...", resourceType)
azapiDefinitions := azapiDefinitionByResourceType[resourceType]
// remove existing folders by default
folderName := strings.ReplaceAll(resourceType, "/", "_")
err := os.RemoveAll(path.Join(wd, folderName))
if err != nil {
logrus.Errorf("removing existing folder: %+v", err)
}
err = os.MkdirAll(path.Join(wd, folderName), 0755)
if err != nil {
logrus.Fatalf("creating folder: %+v", err)
}
context := resource.NewContext(referenceResolvers)
for _, azapiDefinition := range azapiDefinitions {
logrus.Debugf("generating terraform configurations for %s...", azapiDefinition.Id)
err = context.AddAzapiDefinition(azapiDefinition)
if err != nil {
logrus.Warnf("adding azapi definition for %s: %+v", azapiDefinition.Id, err)
}
}
filename := path.Join(wd, folderName, "main.tf")
err = os.WriteFile(filename, hclwrite.Format([]byte(context.String())), 0644)
if err != nil {
logrus.Errorf("writing %s: %+v", filename, err)
}
}
return 0
}