package org.ovirt.engine.core.bll; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.EngineMessage; /** * Contains methods used to validate VDS status to execute some operation on it */ public class VdsValidator { /** * Vds instance */ private VDS vds; /** * Creates an instance with specified VDS * * @param vds * specified VDS */ public VdsValidator(VDS vds) { this.vds = vds; } /** * Determines if the VDS status is legal for execute fencing on host (either SSH Soft Fencing or real one) * * @return {@code true}, if fencing should be executed, otherwise {@code false} */ public boolean shouldVdsBeFenced() { boolean result = false; // Not using exists() here in order not to add validate message if (vds == null) { return false; } switch (vds.getStatus()) { case Down: case InstallFailed: case Maintenance: case NonOperational: case NonResponsive: case Kdumping: // it should happen only after restart when host is stuck in status Kdumping result = true; break; default: break; } return result; } public ValidationResult exists() { if (vds == null) { return new ValidationResult(EngineMessage.VDS_DOES_NOT_EXIST); } return ValidationResult.VALID; } public ValidationResult validateStatusForActivation() { ValidationResult existsValidation = exists(); if (!existsValidation.isValid()) { return existsValidation; } if (VDSStatus.Up == vds.getStatus()) { return new ValidationResult(EngineMessage.VDS_ALREADY_UP); } if (VDSStatus.NonResponsive == vds.getStatus()) { return new ValidationResult(EngineMessage.VDS_NON_RESPONSIVE); } return ValidationResult.VALID; } public ValidationResult validateUniqueId() { if (StringUtils.isBlank(vds.getUniqueId()) && Config.<Boolean> getValue(ConfigValues.InstallVds)) { return new ValidationResult(EngineMessage.VDS_NO_UUID); } return ValidationResult.VALID; } public ValidationResult validateStatus(VDSStatus vdsStatus, EngineMessage hostStatus) { return vdsStatus == vds.getStatus() ? ValidationResult.VALID : new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL, hostStatus.toString()); } public ValidationResult isUp() { return validateStatus(VDSStatus.Up, EngineMessage.VAR__HOST_STATUS__UP); } }