code: @PUT
    @Path("/{host}/jobs/{job}")
    @Produces(APPLICATION_JSON)
    @Timed
    @ExceptionMetered
    public JobDeployResponse jobPut(
        @PathParam("host") final String host,
        @PathParam("job") final JobId jobId,
        @Valid final Deployment deployment,
        @RequestUser final String username,
        @QueryParam("token") @DefaultValue(EMPTY_TOKEN) final String token) {
      if (!jobId.isFullyQualified()) {
        throw badRequest(new JobDeployResponse(JobDeployResponse.Status.INVALID_ID, host, jobId));
      }
      try {
        final Deployment actualDeployment = deployment.toBuilder().setDeployerUser(username).build();
        model.deployJob(host, actualDeployment, token);
        return new JobDeployResponse(JobDeployResponse.Status.OK, host, jobId);
      } catch (JobAlreadyDeployedException e) {
        throw badRequest(new JobDeployResponse(JobDeployResponse.Status.JOB_ALREADY_DEPLOYED, host,
            jobId));
      } catch (HostNotFoundException e) {
        throw badRequest(new JobDeployResponse(JobDeployResponse.Status.HOST_NOT_FOUND, host, jobId));
      } catch (JobDoesNotExistException e) {
        throw badRequest(new JobDeployResponse(JobDeployResponse.Status.JOB_NOT_FOUND, host, jobId));
      } catch (JobPortAllocationConflictException e) {
        throw badRequest(new JobDeployResponse(JobDeployResponse.Status.PORT_CONFLICT, host, jobId));
      } catch (TokenVerificationException e) {
        throw forbidden(new JobDeployResponse(JobDeployResponse.Status.FORBIDDEN, host, jobId));
      }
    }
docs: Sets the deployment of the job identified by its {@link JobId} on the host named by
  {@code host} to {@code deployment}.
  
  @param host       The host to deploy to.
  @param jobId      The job to deploy.
  @param deployment Deployment information.
  @param username   The user deploying.
  @param token      The authorization token for this deployment.
  
  @return The response.