'Terminates the specified job, marking it as completed.
When a Terminate Job request is received, the Batch service sets the
job to the terminating state. The Batch service then terminates any
active or running tasks associated with the job, and runs any required
Job Release tasks. The job then moves into the completed state.
:param job_id: The ID of the job to terminate.
:type job_id: str
:param job_terminate_options: Additional parameters for the operation
:type job_terminate_options: :class:`JobTerminateOptions
<azure.batch.models.JobTerminateOptions>`
:param terminate_reason: The text you want to appear as the job\'s
TerminateReason. The default is \'UserTerminate\'.
:type terminate_reason: 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: None
:rtype: :class:`ClientRawResponse<msrest.pipeline.ClientRawResponse>`
if raw=true
:raises:
:class:`BatchErrorException<azure.batch.models.BatchErrorException>`'

def terminate(self, job_id, job_terminate_options=None, terminate_reason=None, custom_headers=None, raw=False, **operation_config):

    timeout = None
    if (job_terminate_options is not None):
        timeout = job_terminate_options.timeout
    client_request_id = None
    if (job_terminate_options is not None):
        client_request_id = job_terminate_options.client_request_id
    return_client_request_id = None
    if (job_terminate_options is not None):
        return_client_request_id = job_terminate_options.return_client_request_id
    ocp_date = None
    if (job_terminate_options is not None):
        ocp_date = job_terminate_options.ocp_date
    if_match = None
    if (job_terminate_options is not None):
        if_match = job_terminate_options.if_match
    if_none_match = None
    if (job_terminate_options is not None):
        if_none_match = job_terminate_options.if_none_match
    if_modified_since = None
    if (job_terminate_options is not None):
        if_modified_since = job_terminate_options.if_modified_since
    if_unmodified_since = None
    if (job_terminate_options is not None):
        if_unmodified_since = job_terminate_options.if_unmodified_since
    job_terminate_parameter = None
    if (terminate_reason is not None):
        job_terminate_parameter = models.JobTerminateParameter(terminate_reason=terminate_reason)
    url = '/jobs/{jobId}/terminate'
    path_format_arguments = {'jobId': self._serialize.url('job_id', job_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')
    if (timeout is not None):
        query_parameters['timeout'] = self._serialize.query('timeout', timeout, 'int')
    header_parameters = {}
    header_parameters['Content-Type'] = 'application/json;    odata=minimalmetadata;    charset=utf-8'
    if self.config.generate_client_request_id:
        header_parameters['client-request-id'] = str(uuid.uuid1())
    if custom_headers:
        header_parameters.update(custom_headers)
    if (self.config.accept_language is not None):
        header_parameters['accept-language'] = self._serialize.header('self.config.accept_language', self.config.accept_language, 'str')
    if (client_request_id is not None):
        header_parameters['client-request-id'] = self._serialize.header('client_request_id', client_request_id, 'str')
    if (return_client_request_id is not None):
        header_parameters['return-client-request-id'] = self._serialize.header('return_client_request_id', return_client_request_id, 'bool')
    if (ocp_date is not None):
        header_parameters['ocp-date'] = self._serialize.header('ocp_date', ocp_date, 'rfc-1123')
    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 (if_modified_since is not None):
        header_parameters['If-Modified-Since'] = self._serialize.header('if_modified_since', if_modified_since, 'rfc-1123')
    if (if_unmodified_since is not None):
        header_parameters['If-Unmodified-Since'] = self._serialize.header('if_unmodified_since', if_unmodified_since, 'rfc-1123')
    if (job_terminate_parameter is not None):
        body_content = self._serialize.body(job_terminate_parameter, 'JobTerminateParameter')
    else:
        body_content = None
    request = self._client.post(url, query_parameters)
    response = self._client.send(request, header_parameters, body_content, **operation_config)
    if (response.status_code not in [202]):
        raise models.BatchErrorException(self._deserialize, response)
    if raw:
        client_raw_response = ClientRawResponse(None, response)
        client_raw_response.add_headers({'client-request-id': 'str', 'request-id': 'str', 'ETag': 'str', 'Last-Modified': 'rfc-1123', 'DataServiceId': 'str'})
        return client_raw_response
