@classmethod
    def validate_update(cls, data, existing_obj):
        """Validate single IP address entry update information.

        :param data: new data
        :type data: dict
        :param existing_obj: existing object
        :type existing_obj: instance if fuel.objects.IPAddr
        :return: validated data
        :rtype: dict
        """
        if isinstance(data, six.string_types):
            data = cls.validate_json(data)

        existing_data = dict(existing_obj)

        bad_fields = []
        for field, value in six.iteritems(data):
            old_value = existing_data.get(field)
            # field that not allowed to be changed is changed
            if value != old_value and field not in cls.updatable_fields:
                bad_fields.append(field)

        if bad_fields:
            bad_fields_verbose = ", ".join(repr(bf) for bf in bad_fields)
            raise errors.InvalidData(
                "\n".join([
                    "The following fields: {0} are not allowed to be "
                    "updated for record: {1}".format(
                        bad_fields_verbose,
                        jsonutils.dumps(data)
                    )
                ])
            )

        # we have to check if user defined vip is not intersecting
        # with other ips from existing clusters
        if data.get('is_user_defined') and data.get('ip_addr'):
            cls._check_vip_addr_intersection(existing_obj,
                                             data['ip_addr'])

        return data
dataset/ETHPy150Open openstack/fuel-web/nailgun/nailgun/extensions/network_manager/validators/ip_addr.py/IPAddrValidator.validate_update/original