func LoadAzapiDependencies()

in dependency/azapi.go [32:99]


func LoadAzapiDependencies() ([]Dependency, error) {
	azapiMutex.Lock()
	defer azapiMutex.Unlock()
	if len(azapiDeps) != 0 {
		return azapiDeps, nil
	}

	dir := "azapi_examples"
	entries, err := StaticFiles.ReadDir(dir)
	if err != nil {
		return nil, err
	}
	for _, entry := range entries {
		if !entry.IsDir() {
			continue
		}
		filename := path.Join(dir, entry.Name(), "main.tf")
		if _, err := StaticFiles.Open(filename); os.IsNotExist(err) {
			filename = path.Join(dir, entry.Name(), "basic", "main.tf")
		}
		if _, err := StaticFiles.Open(filename); os.IsNotExist(err) {
			continue
		}
		data, err := StaticFiles.ReadFile(filename)
		if err != nil {
			return nil, err
		}
		f, diags := hclwrite.ParseConfig(data, filename, hcl.InitialPos)
		if diags.HasErrors() {
			return nil, diags
		}
		blockTotal := len(f.Body().Blocks())
		lastBlock := f.Body().Blocks()[blockTotal-1]
		typeValue := string(lastBlock.Body().GetAttribute("type").Expr().BuildTokens(nil).Bytes())
		typeValue = strings.Trim(typeValue, ` "`)
		parts := strings.Split(typeValue, "@")
		if len(parts) != 2 {
			return nil, fmt.Errorf("resource type is invalid: %s, filename: %s", typeValue, filename)
		}
		dep := Dependency{
			AzureResourceType:    parts[0],
			ApiVersion:           parts[1],
			ExampleConfiguration: string(data),
			ReferredProperty:     "id",
			ResourceKind:         lastBlock.Type(),
			ResourceName:         lastBlock.Labels()[0],
			ResourceLabel:        lastBlock.Labels()[1],
		}
		azapiDeps = append(azapiDeps, dep)
	}

	// add a special case for Microsoft.Resources/subscriptions
	azapiDeps = append(azapiDeps, Dependency{
		AzureResourceType: "Microsoft.Resources/subscriptions",
		ApiVersion:        "2020-06-01",
		ReferredProperty:  "id",
		ResourceKind:      "data",
		ResourceName:      "azapi_resource",
		ResourceLabel:     "subscription",
		ExampleConfiguration: `
data "azapi_resource" "subscription" {
  type                   = "Microsoft.Resources/subscriptions@2020-06-01"
  response_export_values = ["*"]
}
`,
	})
	return azapiDeps, nil
}