CLOUDSTACK-737
         support multiple NICs in Security group in java side


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/20907e20
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/20907e20
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/20907e20

Branch: refs/heads/advancedsg-leaseweb
Commit: 20907e2081879a236dfb869691e33a13fc94035e
Parents: 9edfd4b
Author: Anthony Xu <anthony@anthony-dev.(none)>
Authored: Thu Jan 31 15:45:52 2013 -0800
Committer: Wei Zhou <[email protected]>
Committed: Tue Jun 11 11:57:57 2013 +0200

----------------------------------------------------------------------
 .../com/cloud/network/NetworkManagerImpl.java   |  2 +-
 .../VirtualNetworkApplianceManagerImpl.java     |  3 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  | 93 +++++---------------
 3 files changed, 23 insertions(+), 75 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/20907e20/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java 
b/server/src/com/cloud/network/NetworkManagerImpl.java
index 41f64ed..8eaea88 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -1890,7 +1890,7 @@ public class NetworkManagerImpl extends ManagerBase 
implements NetworkManager, L
                 if ( 
_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), 
Service.SourceNat)) {
                     throw new InvalidParameterValueException("Service 
SourceNat is not allowed in security group enabled zone");
                 }
-                if ( 
_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), 
Service.SecurityGroup)) {
+                if ( ! 
_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), 
Service.SecurityGroup)) {
                     throw new InvalidParameterValueException("network must 
have SecurityGroup provider in security group enabled zone");
                 }
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/20907e20/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index dd8297a..9bcdc5f 100755
--- 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -3128,8 +3128,7 @@ public class VirtualNetworkApplianceManagerImpl extends 
ManagerBase implements V
     private void createDhcpEntryCommand(VirtualRouter router, UserVm vm, NicVO 
nic, Commands cmds) {
         DhcpEntryCommand dhcpCommand = new 
DhcpEntryCommand(nic.getMacAddress(), nic.getIp4Address(), vm.getHostName(), 
nic.getIp6Address());
         DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
-        Nic defaultNic = findGatewayIp(vm.getId());
-        String gatewayIp = defaultNic.getGateway();
+        String gatewayIp = findGatewayIp(vm.getId());
         if (gatewayIp != null && !gatewayIp.equals(nic.getGateway())) {
             gatewayIp = "0.0.0.0";
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/20907e20/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 865a1d3..9be4cbc 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -2866,94 +2866,44 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Use
 
         Account caller = UserContext.current().getCaller();
         List<NetworkVO> networkList = new ArrayList<NetworkVO>();
-        boolean isSecurityGroupEnabledNetworkUsed = false;
         boolean isVmWare = (template.getHypervisorType() == 
HypervisorType.VMware || (hypervisor != null && hypervisor == 
HypervisorType.VMware));
+        if (isVmWare) {
+            throw new InvalidParameterValueException("Security group feature 
is not supported for vmWare hypervisor");
+        }
 
         // Verify that caller can perform actions in behalf of vm owner
         _accountMgr.checkAccess(caller, null, true, owner);
-
-        // If no network is specified, find system security group enabled
-        // network
         if (networkIdList == null || networkIdList.isEmpty()) {
-            Network networkWithSecurityGroup = 
_networkModel.getNetworkWithSecurityGroupEnabled(zone.getId());
-            if (networkWithSecurityGroup == null) {
-                throw new InvalidParameterValueException(
-                        "No network with security enabled is found in zone id="
-                                + zone.getId());
-            }
-
-            
networkList.add(_networkDao.findById(networkWithSecurityGroup.getId()));
-            isSecurityGroupEnabledNetworkUsed = true;
-
-        } else if (securityGroupIdList != null
-                && !securityGroupIdList.isEmpty()) {
-            if (isVmWare) {
-                throw new InvalidParameterValueException(
-                        "Security group feature is not supported for vmWare 
hypervisor");
-            }
-            // Only one network can be specified, and it should be security
-            // group enabled
-            if (networkIdList.size() > 1) {
-                throw new InvalidParameterValueException(
-                        "Only support one network per VM if security group 
enabled");
-            }
-
-            NetworkVO network = _networkDao.findById(networkIdList.get(0)
-                    .longValue());
-
+            throw new InvalidParameterValueException("need to specify 
networkIDs");
+        }
+        // Verify that all the networks are Shared/Guest; can't create 
combination of SG enabled and disabled networks 
+        for (Long networkId : networkIdList) {
+            NetworkVO network = _networkDao.findById(networkId);
             if (network == null) {
                 throw new InvalidParameterValueException(
                         "Unable to find network by id "
                                 + networkIdList.get(0).longValue());
             }
 
-            if (!_networkModel.isSecurityGroupSupportedInNetwork(network)) {
-                throw new InvalidParameterValueException("Network is not 
security group enabled: " + network.getId());
-            }
-
-            networkList.add(network);
-            isSecurityGroupEnabledNetworkUsed = true;
+            boolean isSecurityGroupEnabled = 
_networkModel.isSecurityGroupSupportedInNetwork(network);
+            if ( ! isSecurityGroupEnabled) {
+                 throw new InvalidParameterValueException("Only support 
Security Group enabled networks in Security enabled zone, network " + 
network.getUuid() + " doesn't support security group ");
+            }            
 
-        } else {
-            // Verify that all the networks are Shared/Guest; can't create 
combination of SG enabled and disabled networks 
-            for (Long networkId : networkIdList) {
-                NetworkVO network = _networkDao.findById(networkId);
-
-                if (network == null) {
-                    throw new InvalidParameterValueException(
-                            "Unable to find network by id "
-                                    + networkIdList.get(0).longValue());
-                }
-
-                boolean isSecurityGroupEnabled = 
_networkModel.isSecurityGroupSupportedInNetwork(network);
-                if (isSecurityGroupEnabled) {
-                    if (networkIdList.size() > 1) {
-                        throw new InvalidParameterValueException("Can't create 
a vm with multiple networks one of" +
-                                       " which is Security Group enabled");
-                    }
-
-                    isSecurityGroupEnabledNetworkUsed = true;
-                }            
-
-                if (!(network.getTrafficType() == TrafficType.Guest && 
network.getGuestType() == Network.GuestType.Shared)) {
-                    throw new InvalidParameterValueException("Can specify only 
Shared Guest networks when" +
+            if (!(network.getTrafficType() == TrafficType.Guest && 
network.getGuestType() == Network.GuestType.Shared)) {
+                 throw new InvalidParameterValueException("Can specify only 
Shared Guest networks when" +
                                " deploy vm in Advance Security Group enabled 
zone");
-                }
+            }
 
-                // Perform account permission check
-                if (network.getAclType() == ACLType.Account) {
-                    _accountMgr.checkAccess(caller, AccessType.UseNetwork, 
false, network);
-                }
-                networkList.add(network);
+            // Perform account permission check
+            if (network.getAclType() == ACLType.Account) {
+                _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, 
network);
             }
+            networkList.add(network);
         }
-
         // if network is security group enabled, and no security group is 
specified, then add the default security group automatically
-        if (isSecurityGroupEnabledNetworkUsed && !isVmWare && 
_networkModel.canAddDefaultSecurityGroup()) {
-            
-            // add the default securityGroup only if no security group is
-            // specified
-            if (securityGroupIdList == null || securityGroupIdList.isEmpty()) {
+        if ( _networkModel.canAddDefaultSecurityGroup()) {           
+            if(securityGroupIdList == null || securityGroupIdList.isEmpty()){
                 if (securityGroupIdList == null) {
                     securityGroupIdList = new ArrayList<Long>();
                 }
@@ -2977,7 +2927,6 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Use
                 }
             }
         }
-
         return createVirtualMachine(zone, serviceOffering, template, hostName, 
displayName, owner, diskOfferingId,
                 diskSize, networkList, securityGroupIdList, group, userData, 
sshKeyPair, hypervisor, caller, requestedIps, defaultIps, keyboard);
     }

Reply via email to