package org.zstack.network.service.portforwarding;
import org.springframework.http.HttpMethod;
import org.zstack.header.identity.Action;
import org.zstack.header.message.APICreateMessage;
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.VmNicVO;
import org.zstack.network.service.vip.VipVO;
/**
* @api
*
* create port forwarding rule
*
* @category port forwarding
*
* @since 0.1.0
*
* @cli
*
* @httpMsg
* {
"org.zstack.network.service.portforwarding.APICreatePortForwardingRuleMsg": {
"vipUuid": "ad6c5c53e9c6322e8425d1c7a7d41094",
"vipPortStart": 22,
"vipPortEnd": 100,
"privatePortStart": 22,
"privatePortEnd": 100,
"protocolType": "TCP",
"vmNicUuid": "bbfec28df38c426c974e37fc85c98b45",
"name": "pfRule1",
"session": {
"uuid": "4ead370e6a4a444a95155cf65d870b98"
}
}
}
*
* @msg
* {
"org.zstack.network.service.portforwarding.APICreatePortForwardingRuleMsg": {
"vipUuid": "ad6c5c53e9c6322e8425d1c7a7d41094",
"vipPortStart": 22,
"vipPortEnd": 100,
"privatePortStart": 22,
"privatePortEnd": 100,
"protocolType": "TCP",
"vmNicUuid": "bbfec28df38c426c974e37fc85c98b45",
"name": "pfRule1",
"session": {
"uuid": "4ead370e6a4a444a95155cf65d870b98"
},
"timeout": 1800000,
"id": "d6e1b111a0b541d29f10a84a97c05d3e",
"serviceId": "api.portal"
}
}
*
* @result
*
* see :ref:`APICreatePortForwardingRuleEvent`
*/
@Action(category = PortForwardingConstant.ACTION_CATEGORY)
@RestRequest(
path = "/port-forwarding",
method = HttpMethod.POST,
responseClass = APICreatePortForwardingRuleEvent.class,
parameterName = "params"
)
public class APICreatePortForwardingRuleMsg extends APICreateMessage {
/**
* @desc uuid of vip the rule is being created on
*/
@APIParam(resourceType = VipVO.class, checkAccount = true, operationTarget = true)
private String vipUuid;
/**
* @desc start port to be mapped
* @choices 1 - 65535
*/
@APIParam(numberRange = {1, 65535})
private Integer vipPortStart;
/**
* @desc end port to be mapped. Null means equaling to vipPortStart
* @choices 1 - 65535
* @optional
*/
@APIParam(required = false, numberRange = {1, 65535})
private Integer vipPortEnd;
/**
* @desc start port vipPortStart maps to
* @choices 1 - 65535
*/
@APIParam(required = false, numberRange = {1, 65535})
private Integer privatePortStart;
/**
* @desc end port vipPortEnd maps to. Null means equaling to privatePortEnd
* @choices 1 - 65535
* @optional
*/
@APIParam(required = false, numberRange = {1, 65535})
private Integer privatePortEnd;
/**
* @desc network prototype the rule applies to
* @choices - TCP
* - UDP
*/
@APIParam(validValues = {"TCP", "UDP"})
private String protocolType;
/**
* @desc uuid of vm nic(see :ref:`VmNicInventory) the rule attaches to. If omitted, the rule is created without attaching
* to any vm nic
* @optional
*/
@APIParam(required = false, resourceType = VmNicVO.class, operationTarget = true)
private String vmNicUuid;
/**
* @desc if not null, the rule only applies to traffic from this CIDR, other traffic are denied
* @optional
*/
private String allowedCidr;
/**
* @desc max length of 255 characters
*/
@APIParam(maxLength = 255)
private String name;
/**
* @desc max length of 2048 characters
* @optional
*/
@APIParam(required = false, maxLength = 2048)
private String description;
public String getVipUuid() {
return vipUuid;
}
public void setVipUuid(String vipUuid) {
this.vipUuid = vipUuid;
}
public Integer getVipPortStart() {
return vipPortStart;
}
public void setVipPortStart(Integer vipPortStart) {
this.vipPortStart = vipPortStart;
}
public Integer getVipPortEnd() {
return vipPortEnd;
}
public void setVipPortEnd(Integer vipPortEnd) {
this.vipPortEnd = vipPortEnd;
}
public Integer getPrivatePortStart() {
return privatePortStart;
}
public void setPrivatePortStart(Integer privatePortStart) {
this.privatePortStart = privatePortStart;
}
public Integer getPrivatePortEnd() {
return privatePortEnd;
}
public void setPrivatePortEnd(Integer privatePortEnd) {
this.privatePortEnd = privatePortEnd;
}
public String getProtocolType() {
return protocolType;
}
public void setProtocolType(String protocolType) {
this.protocolType = protocolType;
}
public String getVmNicUuid() {
return vmNicUuid;
}
public void setVmNicUuid(String vmNicUuid) {
this.vmNicUuid = vmNicUuid;
}
public String getAllowedCidr() {
return allowedCidr;
}
public void setAllowedCidr(String allowedCidr) {
this.allowedCidr = allowedCidr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static APICreatePortForwardingRuleMsg __example__() {
APICreatePortForwardingRuleMsg msg = new APICreatePortForwardingRuleMsg();
msg.setName("pf1");
msg.setVipPortStart(22);
msg.setVipUuid(uuid());
msg.setProtocolType("TCP");
msg.setVmNicUuid(uuid());
return msg;
}
public ApiNotification __notification__() {
APIMessage that = this;
return new ApiNotification() {
@Override
public void after(APIEvent evt) {
if (evt.isSuccess()) {
ntfy("Created").resource(((APICreatePortForwardingRuleEvent)evt).getInventory().getUuid(),PortForwardingRuleVO.class.getSimpleName())
.messageAndEvent(that, evt).done();
}
}
};
}
}