private UpdateHostResponse suspend(RestApi.RequestContext context) {
        String hostNameString = context.pathParameters().getStringOrThrow("hostname");
        HostName hostName = new HostName(hostNameString);
        try {
            orchestrator.suspend(hostName);
        } catch (HostNameNotFoundException e) {
            log.log(Level.FINE, () -> "Host not found: " + hostName);
            throw new RestApiException.NotFound(e);
        } catch (UncheckedTimeoutException e) {
            log.log(Level.FINE, () -> "Failed to suspend " + hostName + ": " + e.getMessage());
            throw restApiExceptionFromTimeout("suspend", hostName, e);
        } catch (HostStateChangeDeniedException e) {
            log.log(Level.FINE, () -> "Failed to suspend " + hostName + ": " + e.getMessage());
            throw restApiExceptionWithDenialReason("suspend", hostName, e);
        }
        return new UpdateHostResponse(hostName.s(), null);
    }
Ask for permission to temporarily suspend all services on a host.

On success, none, some, or all services on the host may already have been effectively suspended,
e.g. as of Feb 2015, a content node would already be set in the maintenance state.

Once the host is ready to resume normal operations, it must finish with resume() (see below).

If the host has already been granted permission to suspend all services, requesting
suspension again is idempotent and will succeed.
orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/HostRequestHandler.java