package org.zstack.header.vm;
import org.springframework.http.HttpMethod;
import org.zstack.header.host.HostVO;
import org.zstack.header.identity.Action;
import org.zstack.header.message.APIEvent;
import org.zstack.header.message.APIMessage;
import org.zstack.header.message.APIParam;
import org.zstack.header.notification.ApiNotification;
import org.zstack.header.rest.RestRequest;
/**
* @api live migrate vm to another host
* @cli
* @httpMsg {
* "org.zstack.header.vm.APIMigrateVmMsg": {
* "vmInstanceUuid": "7fed8055cc004d8fbafd2918efdb2fcc",
* "hostUuid": "4796eba438884c49b6d754b33f84d582",
* "session": {
* "uuid": "f16d128c42eb4e90b0490499c4e51e67"
* }
* }
* }
* @msg {
* "org.zstack.header.vm.APIMigrateVmMsg": {
* "vmInstanceUuid": "7fed8055cc004d8fbafd2918efdb2fcc",
* "hostUuid": "4796eba438884c49b6d754b33f84d582",
* "session": {
* "uuid": "f16d128c42eb4e90b0490499c4e51e67"
* },
* "timeout": 1800000,
* "id": "9fab8a857fe941beaaef2d5d2c30cb50",
* "serviceId": "api.portal"
* }
* }
* @result See :ref:`APIMigrateVmEvent`
* @since 0.1.0
*/
@Action(category = VmInstanceConstant.ACTION_CATEGORY)
@RestRequest(
path = "/vm-instances/{vmInstanceUuid}/actions",
isAction = true,
responseClass = APIMigrateVmEvent.class,
method = HttpMethod.PUT
)
public class APIMigrateVmMsg extends APIMessage implements VmInstanceMessage {
/**
* @desc vm uuid
*/
@APIParam(resourceType = VmInstanceVO.class, checkAccount = true, operationTarget = true)
private String vmInstanceUuid;
/**
* @desc uuid of host the vm is migrating to. If omitted, zstack will try to find
* an available host itself
* @optional
*/
@APIParam(required = false, resourceType = HostVO.class)
private String hostUuid;
public void setVmInstanceUuid(String vmInstanceUuid) {
this.vmInstanceUuid = vmInstanceUuid;
}
public String getVmUuid() {
return vmInstanceUuid;
}
public void setVmUuid(String vmInstanceUuid) {
this.vmInstanceUuid = vmInstanceUuid;
}
public String getHostUuid() {
return hostUuid;
}
public void setHostUuid(String hostUuid) {
this.hostUuid = hostUuid;
}
@Override
public String getVmInstanceUuid() {
return getVmUuid();
}
public static APIMigrateVmMsg __example__() {
APIMigrateVmMsg msg = new APIMigrateVmMsg();
msg.vmInstanceUuid = uuid();
msg.hostUuid = uuid();
return msg;
}
public ApiNotification __notification__() {
APIMessage that = this;
return new ApiNotification() {
@Override
public void after(APIEvent evt) {
ntfy("Migrated").resource(vmInstanceUuid, VmInstanceVO.class.getSimpleName())
.messageAndEvent(that, evt).done();
}
};
}
}