package org.zstack.network.service.eip;
import org.springframework.http.HttpMethod;
import org.zstack.core.db.SQL;
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;
import org.zstack.header.vm.VmInstanceVO;
import javax.persistence.Tuple;
/**
* @api
*
* detach eip from vm nic
*
* @category eip
*
* @since 0.1.0
*
* @cli
*
* @httpMsg
*{
"org.zstack.network.service.eip.APIDetachEipMsg": {
"uuid": "69198105fd7a40778fba1759b923545c",
"session": {
"uuid": "b8a93f786c474493b34e560b49a8da1f"
}
}
}
* @msg
* {
"org.zstack.network.service.eip.APIDetachEipMsg": {
"uuid": "69198105fd7a40778fba1759b923545c",
"session": {
"uuid": "b8a93f786c474493b34e560b49a8da1f"
},
"timeout": 1800000,
"id": "2bbc35d895b445da8b1a869f9b351458",
"serviceId": "api.portal"
}
}
*
* @result
* see :ref:`APIDetachEipEvent`
*/
@Action(category = EipConstant.ACTION_CATEGORY)
@RestRequest(
path = "/eips/{uuid}/vm-instances/nics",
method = HttpMethod.DELETE,
responseClass = APIDetachEipEvent.class
)
public class APIDetachEipMsg extends APIMessage implements EipMessage {
/**
* @desc eip uuid
*/
@APIParam(resourceType = EipVO.class, checkAccount = true, operationTarget = true)
private String uuid;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
@Override
public String getEipUuid() {
return uuid;
}
public static APIDetachEipMsg __example__() {
APIDetachEipMsg msg = new APIDetachEipMsg();
msg.setUuid(uuid());
return msg;
}
public ApiNotification __notification__() {
APIMessage that = this;
return new ApiNotification() {
String ip;
String vmUuid;
String vmNicUuid;
String eip;
@Override
public void before() {
Tuple tuple = SQL.New("select nic.ip, nic.vmInstanceUuid, nic.uuid, eip.vipIp from VmNicVO nic, EipVO eip" +
" where eip.vmNicUuid = nic.uuid and eip.uuid = :uuid", Tuple.class)
.param("uuid", getEipUuid()).find();
ip = tuple.get(0, String.class);
vmUuid = tuple.get(1, String.class);
vmNicUuid = tuple.get(2, String.class);
eip = tuple.get(3, String.class);
}
@Override
public void after(APIEvent evt) {
ntfy("detached from a nic[ip:%s] of the VM[uuid:%s]", ip, vmUuid)
.resource(getUuid(), EipVO.class.getSimpleName())
.context("vmUuid", vmUuid)
.context("vmNicUuid", vmNicUuid)
.messageAndEvent(that, evt)
.done();
ntfy("detached an EIP[%s] from the nic[ip:%s]", eip, ip)
.resource(vmUuid, VmInstanceVO.class.getSimpleName())
.context("eipUuid", getEipUuid())
.context("vmNicUuid", vmNicUuid)
.messageAndEvent(that, evt)
.done();
}
};
}
}