/**
  * Reconfig properties associated with a list of tags
  *
  * @param propertyTags space separated list of property tags
  * @throws LocalRepositoryException
  */
 public void reconfigProperties(String propertyTags) throws LocalRepositoryException {
   final String prefix = String.format("reconfigProperty(%s): ", propertyTags);
   _log.debug(prefix);
   final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_RECONFIG_PROPS, propertyTags};
   final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
   checkFailure(result, prefix);
 }
 /**
  * Reconfig local coordinatorsvc to observer(default mode), or pariticpant(when active site is
  * down) For DR standby site only.
  *
  * @param type
  * @throws LocalRepositoryException
  */
 public void reconfigCoordinator(String type) throws LocalRepositoryException {
   final String prefix = String.format("reconfigCoordinator(%s): ", type);
   _log.debug(prefix);
   final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_RECONFIG_COORDINATOR, type};
   final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
   checkFailure(result, prefix);
 }
 /**
  * Reconfig throw LocalRepositoryException if exit value = 66 or exit value != 0 also throw
  * LocalRepositoryException if not exited normally
  *
  * @throws LocalRepositoryException
  */
 public void reconfig() throws LocalRepositoryException {
   final String prefix = "reconfig(): ";
   _log.debug(prefix);
   final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_RECONFIG};
   final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
   checkFailure(result, prefix);
 }
 /**
  * Poweroff throw LocalRepositoryException if exit value = 66 or exit value != 0 also throw
  * LocalRepositoryException if not exited normally
  *
  * @throws LocalRepositoryException
  */
 public void poweroff() throws LocalRepositoryException {
   final String prefix = "poweroff(): ";
   _log.debug(prefix);
   final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_POWEROFF};
   final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
   checkFailure(result, prefix);
 }
  /**
   * Notify a service to reload configs after /etc/genconfig regenerates them. The notification is
   * done via systool since the service is not owned by storageos.
   *
   * @throws LocalRepositoryException
   */
  public void reload(final String svcName) throws LocalRepositoryException {
    final String prefix = String.format("reload %s(): ", svcName);
    _log.debug(prefix);

    final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_RELOAD, svcName};
    final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
    checkFailure(result, prefix);
  }
  /**
   * Stop a service
   *
   * @param serviceName service name
   * @throws LocalRepositoryException
   */
  public void stop(final String serviceName) throws LocalRepositoryException {
    final String prefix = "stop(): serviceName=" + serviceName + " ";
    _log.debug(prefix);

    final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_STOP, serviceName};
    final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
    checkFailure(result, prefix);
  }
  /**
   * check if local ipsec configurations are synced between vdc properties and ipsec configuration
   * files.
   *
   * @return
   */
  public boolean isLocalIpsecConfigSynced() {
    final String prefix = "isLocalIpsecConfigSynced(): ";
    _log.debug(prefix);

    final String[] cmd = {_IPSECTOOL_CMD, IPSEC_CHECK_LOCAL};
    final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
    _log.debug(prefix + result);

    return result.getExitValue() == 0;
  }
  /**
   * Restart a service on remote node
   *
   * @param nodeId
   * @throws LocalRepositoryException
   */
  public void remoteRestartCoordinator(String nodeId, String type) throws LocalRepositoryException {
    final String prefix = String.format("restart(): type=%s on %s", type, nodeId);
    _log.debug(prefix);

    final String[] cmd = {
      _SYSTOOL_CMD, _SYSTOOL_REMOTE_SYSTOOL, nodeId, _SYSTOOL_RESTART_COORDINATOR, type
    };
    final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, cmd);
    checkFailure(result, prefix);
  }
 /** Gets used, available size for data and root with the help of df command. */
 public static DataDiskStats getDataDiskStats() {
   final String[] cmd = {DF_COMMAND};
   Exec.Result result = Exec.sudo(DF_COMMAND_TIMEOUT, cmd);
   if (!result.exitedNormally() || result.getExitValue() != 0) {
     _log.error(
         "getDataDiskStats() is unsuccessful. Command exit value is: {}", result.getExitValue());
     return null;
   }
   _log.info("df result: {}", result.getStdOutput());
   return parseDFResults(result.getStdOutput());
 }
  private static String[] exec(final String prefix, String outputMaskPatternStr, String[] cmd)
      throws LocalRepositoryException {
    Pattern maskFilter = null;
    if (!StringUtils.isEmpty(outputMaskPatternStr)) {
      maskFilter = Pattern.compile(outputMaskPatternStr);
    }

    final Exec.Result result = Exec.sudo(_SYSTOOL_TIMEOUT, maskFilter, cmd);
    if (!result.exitedNormally() || result.getExitValue() != 0) {
      _log.info(prefix + "Command failed. Result exit value: " + result.getExitValue());
      throw SyssvcException.syssvcExceptions.localRepoError(prefix + "Command failed: " + result);
    }

    return result.getStdOutput().split(LINE_DELIMITER);
  }
 public void poweroffCluster() {
   log.info("powering off the cluster!");
   final String[] cmd = {POWEROFFTOOL_COMMAND};
   Exec.sudo(SHUTDOWN_TIMEOUT_MILLIS, cmd);
 }
 public void genDHParam() {
   final String prefix = String.format("gen DHParam: ");
   final String[] cmd = {_SYSTOOL_CMD, _SYSTOOL_GEN_DHPARAM};
   final Exec.Result result = Exec.sudo(_SYSTOOL_LONG_TIMEOUT, cmd);
   checkFailure(result, prefix);
 }