func()

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
}