func getReferencesForAddress()

in types/utils.go [45:87]


func getReferencesForAddress(address string, p *tfjson.Plan, refValueMap map[string]interface{}) []Reference {
	res := make([]Reference, 0)
	for _, r := range p.Config.RootModule.Resources {
		if r.Address == address {
			for _, expression := range r.Expressions {
				res = append(res, listReferences(expression)...)
			}
			temp := make([]Reference, 0)
			for _, ref := range res {
				// if it refers to some resource's id before, after migration, it will refer to its name now
				// TODO: use regex
				if len(strings.Split(ref.Name, ".")) == 3 && strings.HasSuffix(ref.Name, "id") {
					temp = append(temp, Reference{
						Name: ref.Name[0:strings.LastIndex(ref.Name, ".")] + ".name",
					})
					if strings.HasPrefix(ref.Name, "azurerm_resource_group") {
						temp = append(temp, Reference{
							Name: ref.Name[0:strings.LastIndex(ref.Name, ".")] + ".location",
						})
					}
				}
				if len(strings.Split(ref.Name, ".")) == 3 && strings.HasSuffix(ref.Name, "name") {
					temp = append(temp, Reference{
						Name: ref.Name[0:strings.LastIndex(ref.Name, ".")] + ".id",
					})
				}
			}
			res = append(res, temp...)
			break
		}
	}

	refSet := make(map[string]Reference)
	for i := range res {
		refSet[res[i].Name] = res[i]
	}
	res = make([]Reference, 0)
	for _, ref := range refSet {
		ref.Value = refValueMap[ref.Name]
		res = append(res, ref)
	}
	return res
}