in internal/meta/base_meta.go [1010:1078]
func (meta baseMeta) stateToConfig(ctx context.Context, list ImportList) (ConfigInfos, error) {
var out []ConfigInfo
var bs [][]byte
importedList := list.Imported()
providerName := "registry.terraform.io/hashicorp/azurerm"
if meta.useAzAPI() {
providerName = "registry.terraform.io/azure/azapi"
}
if meta.tfclient != nil {
for _, item := range importedList {
schResp, diags := meta.tfclient.GetProviderSchema()
if diags.HasErrors() {
return nil, fmt.Errorf("get provider schema: %v", diags)
}
rsch, ok := schResp.ResourceTypes[item.TFAddr.Type]
if !ok {
return nil, fmt.Errorf("no resource schema for %s found in the provider schema", item.TFAddr.Type)
}
b, err := tfadd.GenerateForOneResource(
&rsch,
tfstate.StateResource{
Mode: tfjson.ManagedResourceMode,
Address: item.TFAddr.String(),
Type: item.TFAddr.Type,
ProviderName: providerName,
Value: item.State,
},
tfadd.Full(meta.fullConfig),
tfadd.MaskSenstitive(meta.maskSensitive),
)
if err != nil {
return nil, fmt.Errorf("generating state for resource %s: %v", item.TFAddr, err)
}
bs = append(bs, b)
}
} else {
var addrs []string
for _, item := range importedList {
addr := item.TFAddr.String()
if meta.moduleAddr != "" {
addr = meta.moduleAddr + "." + addr
}
addrs = append(addrs, addr)
}
var err error
bs, err = tfadd.StateForTargets(ctx, meta.tf, addrs, tfadd.Full(meta.fullConfig), tfadd.MaskSenstitive(meta.maskSensitive))
if err != nil {
return nil, fmt.Errorf("converting terraform state to config: %w", err)
}
}
for i, b := range bs {
tpl := meta.cleanupTerraformAdd(string(b))
f, diag := hclwrite.ParseConfig([]byte(tpl), "", hcl.InitialPos)
if diag.HasErrors() {
return nil, fmt.Errorf("parsing the HCL generated by \"terraform add\" of %s: %s", importedList[i].TFAddr, diag.Error())
}
out = append(out, ConfigInfo{
ImportItem: importedList[i],
hcl: f,
})
}
return out, nil
}