func()

in internal/meta/base_meta.go [914:950]


func (meta *baseMeta) importItem_tf(ctx context.Context, item *ImportItem, importIdx int) {
	moduleDir := meta.importModuleDirs[importIdx]
	tf := meta.importTFs[importIdx]

	// Construct the empty cfg file for importing
	cfgFile := filepath.Join(moduleDir, "tmp.aztfexport.tf")
	tpl := fmt.Sprintf(`resource "%s" "%s" {}`, item.TFAddr.Type, item.TFAddr.Name)
	// #nosec G306
	if err := os.WriteFile(cfgFile, []byte(tpl), 0644); err != nil {
		err := fmt.Errorf("generating resource template file for %s: %w", item.TFAddr, err)
		meta.Logger().Error("Failed to generate resource template file", "error", err, "tf_addr", item.TFAddr)
		item.ImportError = err
		return
	}
	defer os.Remove(cfgFile)

	// Import resources
	addr := item.TFAddr.String()
	if meta.moduleAddr != "" {
		addr = meta.moduleAddr + "." + addr
	}

	meta.Logger().Info("Importing a resource", "tf_id", item.TFResourceId, "tf_addr", addr)
	// The actual resource type names in telemetry is redacted
	meta.tc.Trace(telemetry.Info, fmt.Sprintf("Importing %s as %s", item.AzureResourceID.TypeString(), addr))

	err := tf.Import(ctx, addr, item.TFResourceId)
	if err != nil {
		meta.Logger().Error("Terraform import failed", "tf_addr", item.TFAddr, "error", err)
		meta.tc.Trace(telemetry.Error, fmt.Sprintf("Importing %s failed", item.AzureResourceID.TypeString()))
		meta.tc.Trace(telemetry.Error, fmt.Sprintf("Error detail: %v", err))
	} else {
		meta.tc.Trace(telemetry.Info, fmt.Sprintf("Importing %s as %s successfully", item.AzureResourceID.TypeString(), addr))
	}
	item.ImportError = err
	item.Imported = err == nil
}