func()

in internal/meta/meta_res.go [60:150]


func (meta *MetaResource) ListResource(ctx context.Context) (ImportList, error) {
	var resources []resourceset.AzureResource
	for _, id := range meta.AzureIds {
		resources = append(resources, resourceset.AzureResource{Id: id})
	}

	rset := &resourceset.AzureResourceSet{
		Resources: resources,
	}

	meta.Logger().Debug("Azure Resource set map to TF resource set")

	var rl []resourceset.TFResource
	if meta.useAzAPI() {
		rl = rset.ToTFAzAPIResources()
	} else {
		rl = rset.ToTFAzureRMResources(meta.Logger(), meta.parallelism, meta.azureSDKCred, meta.azureSDKClientOpt)
	}

	var l ImportList

	// The ResourceName and ResourceType are only honored for single resource
	if len(rl) == 1 {
		res := rl[0]

		// Honor the ResourceName
		name := meta.ResourceName
		if name == "" {
			name = fmt.Sprintf("%s%d%s", meta.resourceNamePrefix, 0, meta.resourceNameSuffix)
		}

		// Honor the ResourceType
		tftype := res.TFType
		tfid := res.TFId
		if meta.ResourceType != "" && meta.ResourceType != res.TFType {
			// res.TFType can be either empty (if aztft failed to query), or not.
			// If the user has specified a different type, then use it.
			tftype = meta.ResourceType

			// Also use this resource type to requery its resource id.
			var err error
			tfid, err = aztft.QueryId(res.AzureId.String(), meta.ResourceType,
				&aztft.APIOption{
					Cred:         meta.azureSDKCred,
					ClientOption: meta.azureSDKClientOpt,
				})
			if err != nil {
				return nil, err
			}
		}

		tfAddr := tfaddr.TFAddr{
			Type: tftype,
			Name: name,
		}

		item := ImportItem{
			AzureResourceID: res.AzureId,
			TFResourceId:    tfid,
			TFAddr:          tfAddr,
			TFAddrCache:     tfAddr,
		}
		l = append(l, item)
	} else {
		// Multi-resource mode only honors the resourceName[Pre|Suf]fix
		for i, res := range rl {
			tfAddr := tfaddr.TFAddr{
				Type: "",
				Name: fmt.Sprintf("%s%d%s", meta.resourceNamePrefix, i, meta.resourceNameSuffix),
			}
			item := ImportItem{
				AzureResourceID: res.AzureId,
				TFResourceId:    res.TFId,
				TFAddr:          tfAddr,
				TFAddrCache:     tfAddr,
			}
			if res.TFType != "" {
				item.TFAddr.Type = res.TFType
				item.TFAddrCache.Type = res.TFType
				item.Recommendations = []string{res.TFType}
				item.IsRecommended = true
			}

			l = append(l, item)
		}
	}

	l = meta.excludeImportList(l)

	return l, nil
}