package org.zstack.test.deployer; import org.zstack.header.identity.SessionInventory; import org.zstack.header.network.l3.L3NetworkInventory; import org.zstack.header.vm.VmInstanceInventory; import org.zstack.header.vm.VmNicInventory; import org.zstack.network.service.portforwarding.PortForwardingRuleInventory; import org.zstack.network.service.vip.VipInventory; import org.zstack.test.ApiSenderException; import org.zstack.test.deployer.schema.DeployerConfig; import org.zstack.test.deployer.schema.PortForwardingConfig; import java.util.List; public class DefaultPortForwardingDeployer implements PortForwardingDeployer<PortForwardingConfig> { @Override public Class<PortForwardingConfig> getSupportedDeployerClassType() { return PortForwardingConfig.class; } private VmNicInventory getVmNicUuidForL3OfVm(String l3Uuid, VmInstanceInventory vm) { for (VmNicInventory nic : vm.getVmNics()) { if (nic.getL3NetworkUuid().equals(l3Uuid)) { return nic; } } return null; } @Override public void deploy(List<PortForwardingConfig> portForwardingRules, DeployerConfig config, Deployer deployer) throws ApiSenderException { for (PortForwardingConfig pf : portForwardingRules) { VmInstanceInventory vm = deployer.vms.get(pf.getVmRef()); L3NetworkInventory publicL3 = deployer.l3Networks.get(pf.getPublicL3NetworkRef()); String vmNicUuid = null; if (vm != null) { L3NetworkInventory l3 = deployer.l3Networks.get(pf.getPrivateL3NetworkRef()); assert l3 != null; VmNicInventory nic = getVmNicUuidForL3OfVm(l3.getUuid(), vm); assert nic != null; vmNicUuid = nic.getUuid(); } VipInventory pubIp = deployer.getApi().acquireIp(publicL3.getUuid()); PortForwardingRuleInventory pfinv = new PortForwardingRuleInventory(); pfinv.setAllowedCidr(pf.getAllowedCidr()); pfinv.setDescription(pf.getDescription()); pfinv.setName(pf.getName()); pfinv.setPrivatePortEnd((int) pf.getPrivatePortEnd()); pfinv.setPrivatePortStart(pf.getPrivatePortStart().intValue()); pfinv.setProtocolType(pf.getProtocolType()); pfinv.setVipUuid(pubIp.getUuid()); pfinv.setVipPortEnd((int) pf.getPublicPortEnd()); pfinv.setVipPortStart(pf.getPublicPortStart().intValue()); pfinv.setVmNicUuid(vmNicUuid); SessionInventory session = pf.getAccountRef() == null ? null : deployer.loginByAccountRef(pf.getAccountRef(), config); pfinv = deployer.getApi().createPortForwardingRuleByFullConfig(pfinv, session); deployer.portForwardingRules.put(pfinv.getName(), pfinv); } } }