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
}