package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.ApproveVdsParameters;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSStatus;
import org.ovirt.engine.core.common.businessentities.VDSType;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.vdscommands.SetVdsStatusVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.dal.VdcBllMessages;
@NonTransactiveCommandAttribute
public class ApproveVdsCommand<T extends ApproveVdsParameters> extends InstallVdsCommand<T> {
public ApproveVdsCommand(T parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
ApproveVds(getVds());
setSucceeded(true);
}
@Override
protected boolean canDoAction() {
boolean returnValue = true;
if (getVds().getvds_type() != VDSType.oVirtNode) {
addCanDoActionMessage(VdcBllMessages.VDS_APPROVE_WRONG_VDS_TYPE);
returnValue = false;
} else {
if (getVds() == null) {
addCanDoActionMessage(VdcBllMessages.VDS_APPROVE_VDS_NOT_FOUND);
returnValue = false;
} else if (getVds().getstatus() != VDSStatus.PendingApproval
&& getVds().getstatus() != VDSStatus.InstallFailed) {
getReturnValue().getCanDoActionMessages()
.add(VdcBllMessages.VDS_APPROVE_VDS_IN_WRONG_STATUS.toString());
returnValue = false;
}
}
return returnValue ? super.canDoAction() : false;
}
private AuditLogType _failureLogTypeValue = AuditLogType.forValue(0);
@Override
public AuditLogType getAuditLogTypeValue() {
if (!getSucceeded()) {
if (_failureLogTypeValue == AuditLogType.VDS_INSTALL_FAILED) {
AddCustomValue("FailedInstallMessage", getErrorMessage(_vdsInstaller.getErrorMessage()));
}
return _failureLogTypeValue;
} else {
return AuditLogType.VDS_APPROVE;
}
}
public void ApproveVds(VDS vds) {
_failureLogTypeValue = AuditLogType.VDS_INSTALL_FAILED;
if (Config.<Boolean> GetValue(ConfigValues.PowerClientAutoInstallCertificateOnApprove)) {
super.executeCommand();
} else {
setSucceeded(true);
}
if (getSucceeded()) {
_failureLogTypeValue = AuditLogType.VDS_APPROVE_FAILED;
Backend.getInstance()
.getResourceManager()
.RunVdsCommand(VDSCommandType.SetVdsStatus,
new SetVdsStatusVDSCommandParameters(vds.getvds_id(), VDSStatus.Unassigned));
} else if (getParameters().isApprovedByRegister()) {
// In case of Approval of oVirt host process, the status of the host is re-initialized to PendingApproval
Backend.getInstance()
.getResourceManager()
.RunVdsCommand(VDSCommandType.SetVdsStatus,
new SetVdsStatusVDSCommandParameters(vds.getvds_id(), VDSStatus.PendingApproval));
}
}
}