func migrateObject()

in dev/import-beats/kibana.go [299:397]


func migrateObject(object mapStr, moduleName string, dataStreamNames []string) (data []byte, newID string, err error) {
	err = object.delete("updated_at")
	if err != nil {
		return nil, "", errors.Wrapf(err, "removing field updated_at failed")
	}

	err = object.delete("version")
	if err != nil {
		return nil, "", errors.Wrapf(err, "removing field version failed")
	}

	object, err = decodeFields(object)
	if err != nil {
		return nil, "", errors.Wrapf(err, "decoding fields failed")
	}

	object, err = stripReferencesToEventModule(object, moduleName, dataStreamNames)
	if err != nil {
		return nil, "", errors.Wrapf(err, "stripping references to event module failed")
	}

	id, err := object.getValue("id")
	if err != nil {
		return nil, "", errors.Wrapf(err, "retrieving id failed")
	}
	origID, ok := id.(string)
	if !ok {
		return nil, "", errors.New("expected id to be a string")
	}
	newID = updateObjectID(origID, moduleName)
	_, err = object.put("id", newID)
	if err != nil {
		return nil, "", errors.Wrapf(err, "putting new ID failed")
	}

	// Update any references to other objects in this object
	refs, err := object.getValue("references")
	if err != nil {
		return nil, "", errors.Wrap(err, "retrieving references failed")
	}

	references, ok := refs.([]interface{})
	if !ok {
		return nil, "", errors.New("expected references to be an array of objects")
	}

	for _, r := range references {
		ref, ok := r.(map[string]interface{})
		if !ok {
			return nil, "", errors.New("expected reference to be an object")
		}

		reference := mapStr(ref)

		// Exclude index pattern references
		rt, err := reference.getValue("type")
		if err != nil {
			return nil, "", errors.Wrap(err, "retrieving reference type failed")
		}
		refType, ok := rt.(string)
		if !ok {
			return nil, "", errors.New("expected reference type to be a string")
		}
		if refType == "index-pattern" {
			continue
		}

		refID, err := reference.getValue("id")
		if err != nil {
			return nil, "", errors.Wrapf(err, "retrieving reference id failed")
		}

		origRefID, ok := refID.(string)
		if !ok {
			return nil, "", errors.New("expected reference id to be a string")
		}

		newRefID := updateObjectID(origRefID, moduleName)

		if _, err := reference.put("id", newRefID); err != nil {
			return nil, "", errors.Wrapf(err, "putting new reference ID failed")
		}
	}

	data, err = json.MarshalIndent(object, "", "    ")
	if err != nil {
		return nil, "", errors.Wrapf(err, "marshalling object failed")
	}

	data = replaceFieldEventDatasetWithDataStreamDataset(data)
	data = replaceBlacklistedWords(data)
	data = removeECSTextualSuffixes(data)
	err = verifyKibanaObjectConvertion(data)
	if err != nil {
		return nil, "", errors.Wrapf(err, "Kibana object convertion failed")
	}

	return data, newID, nil
}