package org.ovirt.engine.core.vdsbroker.vdsbroker; import java.util.HashMap; import java.util.Map; import org.ovirt.engine.core.common.vdscommands.SetVmTicketVDSCommandParameters; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class SetVmTicketVDSCommand<P extends SetVmTicketVDSCommandParameters> extends VdsBrokerCommand<P> { private String connectionAction = "disconnect"; public SetVmTicketVDSCommand(P parameters) { super(parameters, DbFacade.getInstance().getVdsDao().get(parameters.getVdsId())); } @Override protected void executeVdsBrokerCommand() { setTicketUsingUpdateDevice(); proceedProxyReturnValue(); } /** * Sets console ticket using updateDevice command. This is used in VDSMs that support graphics framebuffer * as a device. */ private void setTicketUsingUpdateDevice() { Map<String, Object> devStruct = new HashMap<>(); devStruct.put("deviceType", "graphics"); devStruct.put("graphicsType", getParameters().getGraphicsType().name().toLowerCase()); devStruct.put("password", getParameters().getTicket()); devStruct.put("ttl", getParameters().getValidTime()); if (getParameters().getCompatibilityVersion().less(Version.v4_0)) { // Older Vdsm versions crash when this parameter is not present. devStruct.put("existingConnAction", connectionAction); } devStruct.put("disconnectAction", getParameters().getDisconnectAction()); devStruct.put("params", getUidParams()); status = getBroker().vmUpdateDevice(getParameters().getVmId().toString(), devStruct); } private Map<String, String> getUidParams() { Map<String, String> params = new HashMap<>(); params.put("userName", getParameters().getUserName()); params.put("userId", getParameters().getUserId().toString()); return params; } }