You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ja...@apache.org on 2014/05/06 16:51:59 UTC
[4/4] git commit: updated refs/heads/master to 59bf355
CLOUDSTACK-6364 Added ip address validation
Also updated to assign vm primary ip to lb rule when vmid is passed virtualmachineid
and vm id ip details in vmidipmap
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/11591582
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/11591582
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/11591582
Branch: refs/heads/master
Commit: 11591582d5fe27a824bb148e5a405724c0a6a614
Parents: 59eed9e
Author: Jayapal <ja...@apache.org>
Authored: Wed Apr 9 16:38:02 2014 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Tue May 6 20:08:30 2014 +0530
----------------------------------------------------------------------
.../AssignToLoadBalancerRuleCmd.java | 6 ++
.../lb/LoadBalancingRulesManagerImpl.java | 61 ++++++++++++--------
2 files changed, 43 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11591582/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
index a519993..db4d70e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
@@ -23,6 +23,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import com.cloud.utils.net.NetUtils;
import org.apache.log4j.Logger;
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -142,6 +143,11 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd {
throw new InvalidParameterValueException("Unable to find virtual machine ID: " + vmId);
}
+ //check wether the given ip is valid ip or not
+ if (vmIp == null || !NetUtils.isValidIp(vmIp)) {
+ throw new InvalidParameterValueException("Invalid ip address "+ vmIp +" passed in vmidipmap for " +
+ "vmid " + vmId);
+ }
Long longVmId = lbvm.getId();
List<String> ipsList = null;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11591582/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index 44047bf..dd0ac5e 100755
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@ -986,20 +986,6 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
// check for conflict
Set<Long> passedInstanceIds = vmIdIpMap.keySet();
for (Long instanceId : passedInstanceIds) {
- if (existingVmIdIps.containsKey(instanceId)) {
- // now check for ip address
- List<String> mappedIps = existingVmIdIps.get(instanceId);
- List<String> newIps = vmIdIpMap.get(instanceId);
-
- if (newIps != null) {
- for (String newIp: newIps) {
- if (mappedIps.contains(newIp)) {
- throw new InvalidParameterValueException("VM " + instanceId + " with " + newIp +" is already mapped to load balancer.");
- }
- }
- }
- }
-
UserVm vm = _vmDao.findById(instanceId);
if (vm == null || vm.getState() == State.Destroyed || vm.getState() == State.Expunging) {
InvalidParameterValueException ex = new InvalidParameterValueException("Invalid instance id specified");
@@ -1036,28 +1022,55 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
}
String priIp = nicInSameNetwork.getIp4Address();
+
+ if (existingVmIdIps.containsKey(instanceId)) {
+ // now check for ip address
+ List<String> mappedIps = existingVmIdIps.get(instanceId);
+ List<String> newIps = vmIdIpMap.get(instanceId);
+
+ if (newIps == null) {
+ newIps = new ArrayList<String>();
+ newIps.add(priIp);
+ }
+
+ for (String newIp: newIps) {
+ if (mappedIps.contains(newIp)) {
+ throw new InvalidParameterValueException("VM " + instanceId + " with " + newIp +" is already mapped to load balancer.");
+ }
+ }
+ }
+
List<String> vmIpsList = vmIdIpMap.get(instanceId);
String vmLbIp = null;
- if (vmIpsList == null) {
- vmIpsList = new ArrayList<String>();
- vmIpsList.add(priIp);
- vmIdIpMap.put(instanceId, vmIpsList);
- } else {
- // skip the primary ip from vm secondary ip comparisions
- if (vmIpsList.contains(priIp)) {
- vmIpsList.remove(priIp);
- }
+ if (vmIpsList != null) {
//check if the ips belongs to nic secondary ip
for (String ip: vmIpsList) {
+ // skip the primary ip from vm secondary ip comparisions
+ if (ip.equals(priIp)) {
+ continue;
+ }
if(_nicSecondaryIpDao.findByIp4AddressAndNicId(ip,nicInSameNetwork.getId()) == null) {
throw new InvalidParameterValueException("VM ip "+ ip + " specified does not belong to " +
"nic in network " + nicInSameNetwork.getNetworkId());
}
}
+ } else {
+ vmIpsList = new ArrayList<String>();
+ vmIpsList.add(priIp);
+ }
+
+ // when vm id is passed in instance ids and in vmidipmap
+ // assign for primary ip and ip passed in vmidipmap
+ if (instanceIds != null ) {
+ if (instanceIds.contains(instanceId)) {
+ vmIpsList.add(priIp);
+ }
}
+ vmIdIpMap.put(instanceId, vmIpsList);
+
if (s_logger.isDebugEnabled()) {
s_logger.debug("Adding " + vm + " to the load balancer pool");
}
@@ -1072,7 +1085,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
public void doInTransactionWithoutResult(TransactionStatus status) {
for (Long vmId : vmIds) {
- final List<String> lbVmIps = newMap.get(vmId);
+ final Set<String> lbVmIps = new HashSet<String>(newMap.get(vmId));
for (String vmIp: lbVmIps) {
LoadBalancerVMMapVO map = new LoadBalancerVMMapVO(loadBalancer.getId(), vmId, vmIp, false);
map = _lb2VmMapDao.persist(map);