in types/utils.go [104:140]
func getRefValueMap(p *tfjson.Plan) map[string]interface{} {
refValueMap := make(map[string]interface{})
for _, resourceChange := range p.ResourceChanges {
if resourceChange == nil || resourceChange.Change == nil || resourceChange.Change.Before == nil {
continue
}
prefix := resourceChange.Address
if strings.HasPrefix(prefix, "azapi") {
if beforeMap, ok := resourceChange.Change.Before.(map[string]interface{}); ok && beforeMap["output"] != nil {
if output, ok := beforeMap["output"].(string); ok {
var outputObj interface{}
if err := json.Unmarshal([]byte(output), &outputObj); err == nil {
propValueMap := getPropValueMap(outputObj, fmt.Sprintf("jsondecode(%s.output)", prefix))
for key, value := range propValueMap {
refValueMap[key] = value
}
} else {
if outputObj := beforeMap["output"]; outputObj != nil {
propValueMap := getPropValueMap(outputObj, fmt.Sprintf("%s.output", prefix))
for key, value := range propValueMap {
refValueMap[key] = value
}
}
}
}
}
}
propValueMap := getPropValueMap(resourceChange.Change.Before, prefix)
for key, value := range propValueMap {
refValueMap[key] = value
}
}
for key, variable := range p.Variables {
refValueMap["var."+key] = variable.Value
}
return refValueMap
}