private MachineDetails[] locateManagementMachines() throws CLIStatusException {
    if (provisioning instanceof ManagementLocator) {
      final ManagementLocator locator = (ManagementLocator) provisioning;
      MachineDetails[] mds;
      try {
        mds = locator.getExistingManagementServers();
      } catch (final CloudProvisioningException e) {
        throw new CLIStatusException(
            e, CloudifyErrorMessages.MANAGEMENT_SERVERS_FAILED_TO_READ.getName(), e.getMessage());
      }
      if (mds.length == 0) {
        throw new CLIStatusException(
            CloudifyErrorMessages.MANAGEMENT_SERVERS_NOT_LOCATED.getName());
      }
      if (mds.length != this.cloud.getProvider().getNumberOfManagementMachines()) {
        throw new CLIStatusException(
            CloudifyErrorMessages.MANAGEMENT_SERVERS_NUMBER_NOT_MATCH.getName(),
            cloud.getProvider().getNumberOfManagementMachines(),
            mds.length);
      }

      return mds;
    } else {
      throw new CLIStatusException(
          CloudifyErrorMessages.MANAGEMENT_LOCATOR_NOT_SUPPORTED.getName(), this.cloud.getName());
    }
  }
  private MachineDetails[] locateManagementMachinesFromFile() throws CLIStatusException {
    if (provisioning instanceof ManagementLocator) {
      ObjectMapper mapper = new ObjectMapper();
      ControllerDetails[] controllers = null;
      try {
        controllers =
            mapper.readValue(
                this.existingManagersFile, TypeFactory.arrayType(ControllerDetails.class));
      } catch (IOException e) {
        throw new IllegalArgumentException(
            "Failed to read managers file: "
                + this.existingManagersFile.getAbsolutePath()
                + ". Error was: "
                + e.getMessage(),
            e);
      }
      final ManagementLocator locator = (ManagementLocator) provisioning;
      MachineDetails[] mds;
      try {
        mds = locator.getExistingManagementServers(controllers);
      } catch (final CloudProvisioningException e) {
        throw new CLIStatusException(
            e, CloudifyErrorMessages.MANAGEMENT_SERVERS_FAILED_TO_READ.getName(), e.getMessage());
      }
      if (mds.length == 0) {
        throw new CLIStatusException(
            CloudifyErrorMessages.MANAGEMENT_SERVERS_NOT_LOCATED.getName());
      }
      if (mds.length != this.cloud.getProvider().getNumberOfManagementMachines()) {
        throw new CLIStatusException(
            CloudifyErrorMessages.MANAGEMENT_SERVERS_NUMBER_NOT_MATCH.getName(),
            cloud.getProvider().getNumberOfManagementMachines(),
            mds.length);
      }

      return mds;
    } else {
      throw new CLIStatusException(
          CloudifyErrorMessages.MANAGEMENT_LOCATOR_NOT_SUPPORTED.getName(), this.cloud.getName());
    }
  }