'Creates or updates a record set within a DNS zone.
:param resource_group_name: The name of the resource group.
:type resource_group_name: str
:param zone_name: The name of the DNS zone (without a terminating
dot).
:type zone_name: str
:param relative_record_set_name: The name of the record set, relative
to the name of the zone.
:type relative_record_set_name: str
:param record_type: The type of DNS record in this record set. Record
sets of type SOA can be updated but not created (they are created when
the DNS zone is created). Possible values include: \'A\', \'AAAA\',
\'CNAME\', \'MX\', \'NS\', \'PTR\', \'SOA\', \'SRV\', \'TXT\'
:type record_type: str or :class:`RecordType
<azure.mgmt.dns.models.RecordType>`
:param parameters: Parameters supplied to the CreateOrUpdate
operation.
:type parameters: :class:`RecordSet <azure.mgmt.dns.models.RecordSet>`
:param if_match: The etag of the record set. Omit this value to always
overwrite the current record set. Specify the last-seen etag value to
prevent accidentally overwritting any concurrent changes.
:type if_match: str
:param if_none_match: Set to \'*\' to allow a new record set to be
created, but to prevent updating an existing record set. Other values
will be ignored.
:type if_none_match: str
:param dict custom_headers: headers that will be added to the request
:param bool raw: returns the direct response alongside the
deserialized response
:param operation_config: :ref:`Operation configuration
overrides<msrest:optionsforoperations>`.
:rtype: :class:`RecordSet <azure.mgmt.dns.models.RecordSet>`
:rtype: :class:`ClientRawResponse<msrest.pipeline.ClientRawResponse>`
if raw=true
:raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`'

def create_or_update(self, resource_group_name, zone_name, relative_record_set_name, record_type, parameters, if_match=None, if_none_match=None, custom_headers=None, raw=False, **operation_config):

    url = '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/dnsZones/{zoneName}/{recordType}/{relativeRecordSetName}'
    path_format_arguments = {'resourceGroupName': self._serialize.url('resource_group_name', resource_group_name, 'str'), 'zoneName': self._serialize.url('zone_name', zone_name, 'str'), 'relativeRecordSetName': self._serialize.url('relative_record_set_name', relative_record_set_name, 'str', skip_quote=True), 'recordType': self._serialize.url('record_type', record_type, 'RecordType'), 'subscriptionId': self._serialize.url('self.config.subscription_id', self.config.subscription_id, 'str')}
    url = self._client.format_url(url, **path_format_arguments)
    query_parameters = {}
    query_parameters['api-version'] = self._serialize.query('self.api_version', self.api_version, 'str')
    header_parameters = {}
    header_parameters['Content-Type'] = 'application/json;    charset=utf-8'
    if self.config.generate_client_request_id:
        header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    if custom_headers:
        header_parameters.update(custom_headers)
    if (if_match is not None):
        header_parameters['If-Match'] = self._serialize.header('if_match', if_match, 'str')
    if (if_none_match is not None):
        header_parameters['If-None-Match'] = self._serialize.header('if_none_match', if_none_match, 'str')
    if (self.config.accept_language is not None):
        header_parameters['accept-language'] = self._serialize.header('self.config.accept_language', self.config.accept_language, 'str')
    body_content = self._serialize.body(parameters, 'RecordSet')
    request = self._client.put(url, query_parameters)
    response = self._client.send(request, header_parameters, body_content, **operation_config)
    if (response.status_code not in [201, 200]):
        exp = CloudError(response)
        exp.request_id = response.headers.get('x-ms-request-id')
        raise exp
    deserialized = None
    if (response.status_code == 201):
        deserialized = self._deserialize('RecordSet', response)
    if (response.status_code == 200):
        deserialized = self._deserialize('RecordSet', response)
    if raw:
        client_raw_response = ClientRawResponse(deserialized, response)
        return client_raw_response
    return deserialized
