func()

in pkg/resource_schema.go [27:78]


func (t TerraformCliProviderSchemaRetriever) Get(providerSource, versionConstraint string) (*tfjson.ProviderSchema, error) {
	tmpFolder, err := os.MkdirTemp("", "*")
	if err != nil {
		return nil, fmt.Errorf("error creating temp TF code folder: %s", err)
	}
	defer func() {
		_ = os.RemoveAll(tmpFolder)
	}()

	tfProviderCode := fmt.Sprintf(`
terraform {
  required_providers {
    provider = {
      source = "%s"
      version = "%s"
    }
  }
}
`, providerSource, versionConstraint)

	err = os.WriteFile(filepath.Join(tmpFolder, "main.tf"), []byte(tfProviderCode), 0600)
	if err != nil {
		return nil, fmt.Errorf("error writing temp TF code file: %s", err)
	}

	execPath, err := t.getTerraformPath()
	if err != nil {
		return nil, err
	}
	workingDir := tmpFolder
	tf, err := tfexec.NewTerraform(workingDir, execPath)
	if err != nil {
		return nil, fmt.Errorf("error running NewTerraform: %w", err)
	}

	err = tf.Init(t.ctx, tfexec.Upgrade(true))
	if err != nil {
		return nil, fmt.Errorf("error running Init: %s", err)
	}
	schema, err := tf.ProvidersSchema(t.ctx)
	if err != nil {
		return nil, fmt.Errorf("error running providers: %w", err)
	}
	src := fmt.Sprintf("registry.terraform.io/%s", providerSource)
	r, ok := schema.Schemas[src]
	if !ok {
		src = providerSource
		r = schema.Schemas[src]
	}

	return r, nil
}