Skip to content

Commit a3a5862

Browse files
author
Murali Reddy
committed
CLOUDSTACK-2317: NPE while cloudstack trying to get system ip and enable
static nat for the vm VM splitting enableStaticNat() method in to a service and manager layer method. So as to ensure action event annotation is present only on service layer method.
1 parent 3ae4819 commit a3a5862

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

api/src/com/cloud/network/rules/RulesService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public interface RulesService {
6767

6868
boolean applyPortForwardingRules(long ipAdddressId, Account caller) throws ResourceUnavailableException;
6969

70-
boolean enableStaticNat(long ipAddressId, long vmId, long networkId, boolean isSystemVm, String vmGuestIp) throws NetworkRuleConflictException, ResourceUnavailableException;
70+
boolean enableStaticNat(long ipAddressId, long vmId, long networkId, String vmGuestIp) throws NetworkRuleConflictException, ResourceUnavailableException;
7171

7272
PortForwardingRule getPortForwardigRule(long ruleId);
7373

server/src/com/cloud/network/rules/RulesManagerImpl.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,14 @@
8080
import com.cloud.vm.Nic;
8181
import com.cloud.vm.NicSecondaryIp;
8282
import com.cloud.vm.UserVmVO;
83+
import com.cloud.vm.VMInstanceVO;
8384
import com.cloud.vm.VirtualMachine;
8485
import com.cloud.vm.VirtualMachine.Type;
8586
import com.cloud.vm.dao.NicDao;
8687
import com.cloud.vm.dao.NicSecondaryIpDao;
8788
import com.cloud.vm.dao.NicSecondaryIpVO;
8889
import com.cloud.vm.dao.UserVmDao;
90+
import com.cloud.vm.dao.VMInstanceDao;
8991

9092
@Component
9193
@Local(value = { RulesManager.class, RulesService.class })
@@ -103,6 +105,8 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
103105
@Inject
104106
UserVmDao _vmDao;
105107
@Inject
108+
VMInstanceDao _vmInstanceDao;
109+
@Inject
106110
AccountManager _accountMgr;
107111
@Inject
108112
NetworkManager _networkMgr;
@@ -416,7 +420,12 @@ public StaticNatRule createStaticNatRule(StaticNatRule rule, boolean openFirewal
416420

417421
@Override
418422
@ActionEvent(eventType = EventTypes.EVENT_ENABLE_STATIC_NAT, eventDescription = "enabling static nat")
419-
public boolean enableStaticNat(long ipId, long vmId, long networkId, boolean isSystemVm, String vmGuestIp)
423+
public boolean enableStaticNat(long ipId, long vmId, long networkId, String vmGuestIp)
424+
throws NetworkRuleConflictException, ResourceUnavailableException {
425+
return enableStaticNat(ipId, vmId, networkId, false, vmGuestIp);
426+
}
427+
428+
private boolean enableStaticNat(long ipId, long vmId, long networkId, boolean isSystemVm, String vmGuestIp)
420429
throws NetworkRuleConflictException, ResourceUnavailableException {
421430
UserContext ctx = UserContext.current();
422431
Account caller = ctx.getCaller();
@@ -1370,7 +1379,7 @@ protected List<StaticNat> createStaticNatForIp(IpAddress sourceIp, Account calle
13701379
throw new CloudRuntimeException("Ip address is not associated with any network");
13711380
}
13721381

1373-
UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId());
1382+
VMInstanceVO vm = _vmInstanceDao.findById(sourceIp.getAssociatedWithVmId());
13741383
Network network = _networkModel.getNetwork(networkId);
13751384
if (network == null) {
13761385
CloudRuntimeException ex = new CloudRuntimeException("Unable to find an ip address to map to specified vm id");

server/test/com/cloud/network/MockRulesManagerImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ public boolean applyPortForwardingRules(long ipAdddressId, Account caller)
7676

7777
@Override
7878
public boolean enableStaticNat(long ipAddressId, long vmId, long networkId,
79-
boolean isSystemVm, String ipAddr) throws NetworkRuleConflictException,
80-
ResourceUnavailableException {
79+
String ipAddr) throws NetworkRuleConflictException, ResourceUnavailableException {
8180
// TODO Auto-generated method stub
8281
return false;
8382
}

0 commit comments

Comments
 (0)