mirror of https://github.com/apache/cloudstack.git
VO should not contain any DAO. Transient should be loaded by the caller using the Dao.
This commit is contained in:
parent
3cc9f3ff06
commit
02185d4240
|
|
@ -80,8 +80,10 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderVO;
|
|||
import com.cloud.network.dao.PhysicalNetworkVO;
|
||||
import com.cloud.network.dao.VpnUserDao;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
import com.cloud.network.rules.dao.PortForwardingRulesDao;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
|
|
@ -536,6 +538,9 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl
|
|||
List<FirewallRuleTO> rulesTO = new ArrayList<FirewallRuleTO>();
|
||||
|
||||
for (FirewallRule rule : rules) {
|
||||
if (rule.getSourceCidrList() == null && (rule.getPurpose() == Purpose.Firewall || rule.getPurpose() == Purpose.NetworkACL)) {
|
||||
_fwRulesDao.loadSourceCidrs((FirewallRuleVO)rule);
|
||||
}
|
||||
IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId());
|
||||
FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, sourceIp.getAddress().addr());
|
||||
rulesTO.add(ruleTO);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.cloud.network.dao;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
|
@ -58,4 +59,6 @@ public interface FirewallRulesDao extends GenericDao<FirewallRuleVO, Long> {
|
|||
List<FirewallRuleVO> listByNetworkPurposeTrafficTypeAndNotRevoked(long networkId, FirewallRule.Purpose purpose, FirewallRule.TrafficType trafficType);
|
||||
|
||||
List<FirewallRuleVO> listByIpAndPurposeWithState(Long addressId, FirewallRule.Purpose purpose, FirewallRule.State state);
|
||||
|
||||
void loadSourceCidrs(FirewallRuleVO rule);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ public class FirewallRulesDaoImpl extends GenericDaoBase<FirewallRuleVO, Long> i
|
|||
|
||||
FirewallRuleVO dbfirewallRule = super.persist(firewallRule);
|
||||
saveSourceCidrs(firewallRule, firewallRule.getSourceCidrList());
|
||||
loadSourceCidrs(dbfirewallRule);
|
||||
|
||||
txn.commit();
|
||||
return dbfirewallRule;
|
||||
|
|
@ -326,4 +327,10 @@ public class FirewallRulesDaoImpl extends GenericDaoBase<FirewallRuleVO, Long> i
|
|||
|
||||
return listBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadSourceCidrs(FirewallRuleVO rule) {
|
||||
List<String> sourceCidrs = _firewallRulesCidrsDao.getSourceCidrs(rule.getId());
|
||||
rule.setSourceCidrList(sourceCidrs);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -164,6 +164,10 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne
|
|||
@Override
|
||||
public FirewallRule createFirewallRule(FirewallRule rule) throws NetworkRuleConflictException {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
|
||||
if (rule.getSourceCidrList() == null && (rule.getPurpose() == Purpose.Firewall || rule.getPurpose() == Purpose.NetworkACL)) {
|
||||
_firewallDao.loadSourceCidrs((FirewallRuleVO)rule);
|
||||
}
|
||||
|
||||
return createFirewallRule(rule.getSourceIpAddressId(), caller, rule.getXid(), rule.getSourcePortStart(),
|
||||
rule.getSourcePortEnd(), rule.getProtocol(), rule.getSourceCidrList(), rule.getIcmpCode(),
|
||||
|
|
@ -318,6 +322,9 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne
|
|||
boolean duplicatedCidrs = false;
|
||||
if (bothRulesFirewall) {
|
||||
// Verify that the rules have different cidrs
|
||||
_firewallDao.loadSourceCidrs(rule);
|
||||
_firewallDao.loadSourceCidrs((FirewallRuleVO)newRule);
|
||||
|
||||
List<String> ruleCidrList = rule.getSourceCidrList();
|
||||
List<String> newRuleCidrList = newRule.getSourceCidrList();
|
||||
|
||||
|
|
@ -789,6 +796,9 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne
|
|||
List<FirewallRuleVO> systemRules = _firewallDao.listSystemRules();
|
||||
for (FirewallRuleVO rule : systemRules) {
|
||||
try {
|
||||
if (rule.getSourceCidrList() == null && (rule.getPurpose() == Purpose.Firewall || rule.getPurpose() == Purpose.NetworkACL)) {
|
||||
_firewallDao.loadSourceCidrs(rule);
|
||||
}
|
||||
this.createFirewallRule(ip.getId(), acct, rule.getXid(), rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getProtocol(),
|
||||
rule.getSourceCidrList(), rule.getIcmpCode(), rule.getIcmpType(), rule.getRelated(), FirewallRuleType.System, rule.getNetworkId());
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -172,6 +172,7 @@ import com.cloud.network.router.VirtualRouter.RedundantState;
|
|||
import com.cloud.network.router.VirtualRouter.Role;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.RulesManager;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
|
|
@ -3253,7 +3254,10 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||
if (rules != null) {
|
||||
rulesTO = new ArrayList<FirewallRuleTO>();
|
||||
for (FirewallRule rule : rules) {
|
||||
IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId());
|
||||
IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId());
|
||||
if (rule.getSourceCidrList() == null && (rule.getPurpose() == Purpose.Firewall || rule.getPurpose() == Purpose.NetworkACL)) {
|
||||
_rulesDao.loadSourceCidrs((FirewallRuleVO)rule);
|
||||
}
|
||||
FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, sourceIp.getAddress().addr());
|
||||
rulesTO.add(ruleTO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,6 +91,8 @@ import com.cloud.network.dao.Site2SiteVpnConnectionDao;
|
|||
import com.cloud.network.dao.Site2SiteVpnGatewayDao;
|
||||
import com.cloud.network.dao.Site2SiteVpnGatewayVO;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
import com.cloud.network.vpc.NetworkACLManager;
|
||||
import com.cloud.network.vpc.PrivateGateway;
|
||||
import com.cloud.network.vpc.PrivateIpAddress;
|
||||
|
|
@ -733,6 +735,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
|
|||
rulesTO = new ArrayList<NetworkACLTO>();
|
||||
|
||||
for (FirewallRule rule : rules) {
|
||||
if (rule.getSourceCidrList() == null && (rule.getPurpose() == Purpose.Firewall || rule.getPurpose() == Purpose.NetworkACL)) {
|
||||
_firewallDao.loadSourceCidrs((FirewallRuleVO)rule);
|
||||
}
|
||||
NetworkACLTO ruleTO = new NetworkACLTO(rule, guestVlan, rule.getTrafficType());
|
||||
rulesTO.add(ruleTO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ import com.cloud.utils.net.NetUtils;
|
|||
@Inheritance(strategy=InheritanceType.JOINED)
|
||||
@DiscriminatorColumn(name="purpose", discriminatorType=DiscriminatorType.STRING, length=32)
|
||||
public class FirewallRuleVO implements FirewallRule {
|
||||
@Inject protected FirewallRulesCidrsDao _firewallRulesCidrsDao;
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||
|
|
@ -121,9 +120,6 @@ public class FirewallRuleVO implements FirewallRule {
|
|||
|
||||
@Override
|
||||
public List<String> getSourceCidrList() {
|
||||
if (sourceCidrs == null && (purpose == Purpose.Firewall || purpose == Purpose.NetworkACL)) {
|
||||
return _firewallRulesCidrsDao.getSourceCidrs(id);
|
||||
}
|
||||
return sourceCidrs;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -117,6 +117,9 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
|
|||
|
||||
@Override
|
||||
public FirewallRule createNetworkACL(FirewallRule acl) throws NetworkRuleConflictException {
|
||||
if (acl.getSourceCidrList() == null && (acl.getPurpose() == Purpose.Firewall || acl.getPurpose() == Purpose.NetworkACL)) {
|
||||
_firewallDao.loadSourceCidrs((FirewallRuleVO)acl);
|
||||
}
|
||||
return createNetworkACL(UserContext.current().getCaller(), acl.getXid(), acl.getSourcePortStart(),
|
||||
acl.getSourcePortEnd(), acl.getProtocol(), acl.getSourceCidrList(), acl.getIcmpCode(),
|
||||
acl.getIcmpType(), null, acl.getType(), acl.getNetworkId(), acl.getTrafficType());
|
||||
|
|
@ -249,6 +252,7 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
|
|||
// if one cidr overlaps another, do port veirficatino
|
||||
boolean duplicatedCidrs = false;
|
||||
// Verify that the rules have different cidrs
|
||||
_firewallDao.loadSourceCidrs(rule);
|
||||
List<String> ruleCidrList = rule.getSourceCidrList();
|
||||
List<String> newRuleCidrList = newRule.getSourceCidrList();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue