func getRefValueMap()

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
}