<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def subnet_update(auth=None, **kwargs):
    '''
    Update a subnet

    name_or_id
        Name or ID of the subnet to update

    subnet_name
        The new name of the subnet

    enable_dhcp
        Set to ``True`` if DHCP is enabled and ``False`` if disabled

    gateway_ip
        The gateway IP address. When you specify both allocation_pools and
        gateway_ip, you must ensure that the gateway IP does not overlap with
        the specified allocation pools.

    disable_gateway_ip : False
        Set to ``True`` if gateway IP address is disabled and False if enabled.
        It is not allowed with ``gateway_ip``.

    allocation_pools
        A list of dictionaries of the start and end addresses for the
        allocation pools.

    dns_nameservers
        A list of DNS name servers for the subnet

    host_routes
        A list of host route dictionaries for the subnet

    .. code-block:: bash

        salt '*' neutronng.subnet_update name=subnet1 subnet_name=subnet2
        salt '*' neutronng.subnet_update name=subnet1 dns_nameservers='["8.8.8.8", "8.8.8.7"]'

    '''
    cloud = get_operator_cloud(auth)
    kwargs = _clean_kwargs(**kwargs)
    return cloud.update_subnet(**kwargs)