package org.zstack.network.service.virtualrouter.portforwarding; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Configurable; import org.zstack.appliancevm.ApplianceVmFacade; import org.zstack.appliancevm.ApplianceVmFirewallRuleInventory; import org.zstack.header.core.workflow.Flow; import org.zstack.header.core.workflow.FlowRollback; import org.zstack.header.core.workflow.FlowTrigger; import org.zstack.header.core.Completion; import org.zstack.header.errorcode.ErrorCode; import org.zstack.network.service.virtualrouter.VirtualRouterConstant; import org.zstack.network.service.virtualrouter.VirtualRouterVmInventory; import org.zstack.utils.Utils; import org.zstack.utils.gson.JSONObjectUtil; import org.zstack.utils.logging.CLogger; import java.util.Arrays; import java.util.Map; /** */ @Configurable(preConstruction = true, autowire = Autowire.BY_TYPE) public class PortForwardingRemoveVirtualRouterFirewallFlow implements Flow { private static final CLogger logger = Utils.getLogger(PortForwardingRemoveVirtualRouterFirewallFlow.class); @Autowired private ApplianceVmFacade apvmf; @Override public void run(final FlowTrigger trigger, final Map data) { final PortForwardingRuleTO to = (PortForwardingRuleTO) data.get(VirtualRouterConstant.VR_PORT_FORWARDING_RULE); final VirtualRouterVmInventory vr = (VirtualRouterVmInventory) data.get(VirtualRouterConstant.VR_RESULT_VM); final String targetL3 = (String) data.get(VirtualRouterConstant.VR_VIP_L3NETWORK); final ApplianceVmFirewallRuleInventory rule = new ApplianceVmFirewallRuleInventory(); rule.setProtocol(to.getProtocolType().toLowerCase()); rule.setDestIp(to.getVipIp()); rule.setEndPort(to.getPrivatePortEnd()); rule.setStartPort(to.getPrivatePortStart()); rule.setAllowCidr(to.getAllowedCidr()); apvmf.removeFirewall(vr.getUuid(), targetL3, Arrays.asList(rule), new Completion(trigger) { @Override public void success() { logger.debug(String.format("successfully removed firewall on virtual route[uuid:%s, name:%s] for port forwarding, firewall rule: %s", vr.getUuid(), vr.getName(), JSONObjectUtil.toJsonString(rule))); trigger.next(); } @Override public void fail(ErrorCode errorCode) { trigger.fail(errorCode); } }); } @Override public void rollback(final FlowRollback trigger, Map data) { trigger.rollback(); } }