def zone_create_or_update(name, resource_group, **kwargs):
    '''
    .. versionadded:: Fluorine

    Creates or updates a DNS zone. Does not modify DNS records within the zone.

    :param name: The name of the DNS zone to create (without a terminating dot).

    :param resource_group: The name of the resource group.

    CLI Example:

    .. code-block:: bash

        salt-call azurearm_dns.zone_create_or_update myzone testgroup

    '''
    # DNS zones are global objects
    kwargs['location'] = 'global'

    dnsconn = __utils__['azurearm.get_client']('dns', **kwargs)

    # Convert list of ID strings to list of dictionaries with id key.
    if isinstance(kwargs.get('registration_virtual_networks'), list):
        kwargs['registration_virtual_networks'] = [{'id': vnet} for vnet in kwargs['registration_virtual_networks']]

    if isinstance(kwargs.get('resolution_virtual_networks'), list):
        kwargs['resolution_virtual_networks'] = [{'id': vnet} for vnet in kwargs['resolution_virtual_networks']]

    try:
        zone_model = __utils__['azurearm.create_object_model']('dns', 'Zone', **kwargs)
    except TypeError as exc:
        result = {'error': 'The object model could not be built. ({0})'.format(str(exc))}
        return result

    try:
        zone = dnsconn.zones.create_or_update(
            zone_name=name,
            resource_group_name=resource_group,
            parameters=zone_model,
            if_match=kwargs.get('if_match'),
            if_none_match=kwargs.get('if_none_match')
        )
        result = zone.as_dict()
    except CloudError as exc:
        __utils__['azurearm.log_cloud_error']('dns', str(exc), **kwargs)
        result = {'error': str(exc)}
    except SerializationError as exc:
        result = {'error': 'The object model could not be parsed. ({0})'.format(str(exc))}

    return result