@Override
  public boolean sshAgent(AgentFilter agentFilter, String command) {
    URI uri = agentFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("v1/admin/agent"));
    Request request = RequestBuilder.prepareGet().setUri(uri).build();

    List<AgentStatusRepresentation> agents =
        client.execute(request, createJsonResponseHandler(AGENTS_CODEC));
    if (agents.isEmpty()) {
      return false;
    }
    Exec.execRemote(agents.get(0).getExternalHost(), command);
    return true;
  }
  @Override
  public CommanderResponse<List<AgentStatusRepresentation>> showAgents(AgentFilter agentFilter) {
    URI uri = agentFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("v1/admin/agent"));
    Request request = RequestBuilder.prepareGet().setUri(uri).build();

    JsonResponse<List<AgentStatusRepresentation>> response =
        client.execute(request, createFullJsonResponseHandler(AGENTS_CODEC));
    if (response.getStatusCode() != 200) {
      throw new RuntimeException(response.getStatusMessage());
    }
    return CommanderResponse.createCommanderResponse(
        response.getHeader(GALAXY_AGENTS_VERSION_HEADER), response.getValue());
  }
  @Override
  public List<SlotStatusRepresentation> install(
      AgentFilter agentFilter, int count, Assignment assignment, String expectedVersion) {
    URI uri =
        agentFilter.toUri(
            uriBuilderFrom(coordinatorUri)
                .replacePath("/v1/slot")
                .addParameter("limit", String.valueOf(count)));
    RequestBuilder requestBuilder =
        RequestBuilder.preparePost()
            .setUri(uri)
            .setHeader("Content-Type", "application/json")
            .setBodyGenerator(
                jsonBodyGenerator(ASSIGNMENT_CODEC, AssignmentRepresentation.from(assignment)));
    if (expectedVersion != null) {
      requestBuilder.setHeader(GALAXY_SLOTS_VERSION_HEADER, expectedVersion);
    }

    List<SlotStatusRepresentation> slots =
        client.execute(requestBuilder.build(), createJsonResponseHandler(SLOTS_CODEC));
    return slots;
  }