Updated Branches:
  refs/heads/add_remove_nics 7de4583d8 -> 072521c35

Summary: Make calls async, add sanity checks on vm state and zone location

Submitted-by: Brian Angus <[email protected]>
Signed-off-by: Marcus Sorensen <[email protected]> 1359154458 -0700


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

Branch: refs/heads/add_remove_nics
Commit: 072521c35878c9731bb0dba919b2d412eb9a2a9d
Parents: 7de4583
Author: Marcus Sorensen <[email protected]>
Authored: Fri Jan 25 15:54:18 2013 -0700
Committer: Marcus Sorensen <[email protected]>
Committed: Fri Jan 25 15:54:18 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/event/EventTypes.java            |    5 +++
 .../api/command/user/vm/AddNicToVMCmd.java         |   14 +++++++++-
 .../api/command/user/vm/RemoveNicFromVMCmd.java    |   13 +++++++++-
 .../command/user/vm/UpdateDefaultNicForVMCmd.java  |   13 +++++++++-
 server/src/com/cloud/vm/UserVmManagerImpl.java     |   20 ++++++++++----
 5 files changed, 55 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/072521c3/api/src/com/cloud/event/EventTypes.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/event/EventTypes.java 
b/api/src/com/cloud/event/EventTypes.java
index 87eddca..03d30bf 100755
--- a/api/src/com/cloud/event/EventTypes.java
+++ b/api/src/com/cloud/event/EventTypes.java
@@ -63,6 +63,11 @@ public class EventTypes {
     public static final String EVENT_FIREWALL_OPEN = "FIREWALL.OPEN";
     public static final String EVENT_FIREWALL_CLOSE = "FIREWALL.CLOSE";
 
+    //NIC Events
+    public static final String EVENT_NIC_CREATE = "NIC.CREATE";
+    public static final String EVENT_NIC_DELETE = "NIC.DELETE";
+    public static final String EVENT_NIC_UPDATE = "NIC.UPDATE";
+
     // Load Balancers
     public static final String EVENT_ASSIGN_TO_LOAD_BALANCER_RULE = 
"LB.ASSIGN.TO.RULE";
     public static final String EVENT_REMOVE_FROM_LOAD_BALANCER_RULE = 
"LB.REMOVE.FROM.RULE";

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/072521c3/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
----------------------------------------------------------------------
diff --git 
a/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java 
b/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
index af73328..4334000 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
@@ -36,7 +36,7 @@ import com.cloud.uservm.UserVm;
 
 @APICommand(name = "addNicToVirtualMachine", description="Adds VM to specified 
network by creating a NIC", responseObject=UserVmResponse.class)
 
-public class AddNicToVMCmd extends BaseCmd {
+public class AddNicToVMCmd extends BaseAsyncCmd {
     public static final Logger s_logger = 
Logger.getLogger(AddNicToVMCmd.class);
     private static final String s_name = "addnictovirtualmachineresponse";
 
@@ -83,6 +83,16 @@ public class AddNicToVMCmd extends BaseCmd {
     public static String getResultObjectName() {
         return "virtualmachine";
     }
+
+    @Override
+    public String getEventType() {
+        return EventTypes.EVENT_NIC_CREATE;
+    }
+
+    @Override
+    public String getEventDescription() {
+        return  "Adding network " + getNetworkId() + " to user vm: " + 
getVmId();
+    }
     
     @Override
     public long getEntityOwnerId() {
@@ -95,7 +105,7 @@ public class AddNicToVMCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getVmId());
+        UserContext.current().setEventDetails("Vm Id: " + getVmId() + " 
Network Id: " + getNetworkId());
         UserVm result = _userVmService.addNicToVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/072521c3/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
----------------------------------------------------------------------
diff --git 
a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java 
b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
index b728f91..b1a870e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
@@ -36,7 +36,7 @@ import com.cloud.uservm.UserVm;
 
 @APICommand(name = "removeNicFromVirtualMachine", description="Removes VM from 
specified network by deleting a NIC", responseObject=UserVmResponse.class)
 
-public class RemoveNicFromVMCmd extends BaseCmd {
+public class RemoveNicFromVMCmd extends BaseAsyncCmd {
     public static final Logger s_logger = 
Logger.getLogger(RemoveNicFromVMCmd.class);
     private static final String s_name = "removenicfromvirtualmachineresponse";
 
@@ -76,6 +76,17 @@ public class RemoveNicFromVMCmd extends BaseCmd {
     public static String getResultObjectName() {
         return "virtualmachine";
     }
+
+    @Override
+    public String getEventType() {
+        return EventTypes.EVENT_NIC_DELETE;
+    }
+
+    @Override
+    public String getEventDescription() {
+        return  "Removing NIC " + getNicId() + " from user vm: " + getVmId();
+    }
+    
     
     @Override
     public long getEntityOwnerId() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/072521c3/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
----------------------------------------------------------------------
diff --git 
a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
 
b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
index f7a8a0b..07518c9 100644
--- 
a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
+++ 
b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
@@ -36,7 +36,7 @@ import com.cloud.uservm.UserVm;
 
 @APICommand(name = "updateDefaultNicForVirtualMachine", description="Changes 
the default NIC on a VM", responseObject=UserVmResponse.class)
 
-public class UpdateDefaultNicForVMCmd extends BaseCmd {
+public class UpdateDefaultNicForVMCmd extends BaseAsyncCmd {
     public static final Logger s_logger = 
Logger.getLogger(UpdateDefaultNicForVMCmd.class);
     private static final String s_name = 
"updatedefaultnicforvirtualmachineresponse";
 
@@ -78,6 +78,17 @@ public class UpdateDefaultNicForVMCmd extends BaseCmd {
     }
     
     @Override
+    public String getEventType() {
+        return EventTypes.EVENT_NIC_UPDATE;
+    }
+
+    @Override
+    public String getEventDescription() {
+        return  "Updating NIC " + getNicId() + " on user vm: " + getVmId();
+    }
+    
+    
+    @Override
     public long getEntityOwnerId() {
         UserVm vm = _responseGenerator.findUserVmById(getVmId());
         if (vm == null) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/072521c3/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 e838258..1fb033f 100644
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -954,7 +954,15 @@ public class UserVmManagerImpl implements UserVmManager, 
UserVmService, Manager
         }
         
         //todo: any security group related checks
-        //todo: ensure network belongs in zone
+        //ensure network belongs in zone
+        if (network.getDataCenterId() != 
vmInstance.getDataCenterIdToDeployIn()) {
+            throw new CloudRuntimeException(vmInstance + " is in zone:" + 
vmInstance.getDataCenterIdToDeployIn() + " but " + network + " is in zone:" + 
network.getDataCenterId());
+        }
+
+        if(_networkModel.getNicInNetwork(vmInstance.getId(),network.getId()) 
!= null){
+            s_logger.debug(vmInstance + " already in " + network + " going to 
add another NIC");
+        }
+
         //todo: check other nics for VPC networks (can only belong to one?)
         //todo: verify unique hostname in network domain?
         
@@ -1013,10 +1021,6 @@ public class UserVmManagerImpl implements UserVmManager, 
UserVmService, Manager
             }
         }
         
-        //todo: any security group related checks
-        //todo: ensure network belongs in zone
-        //todo: check other nics for VPC networks (can only belong to one?)
-        //todo: verify unique hostname in network domain?
         boolean nicremoved = false;
 
         try {
@@ -1071,6 +1075,11 @@ public class UserVmManagerImpl implements UserVmManager, 
UserVmService, Manager
         if (nic.isDefaultNic()){
             throw new CloudRuntimeException("refusing to set default nic 
because chosen nic is already the default");
         }
+
+        //make sure the VM is Running or Stopped
+        if ((vmInstance.getState() != State.Running) || (vmInstance.getState() 
!= State.Stopped)) {
+            throw new CloudRuntimeException("refusing to set default " + 
vmInstance + " is not Running or Stopped");
+        }
         
         NicProfile existing = null;
         List<NicProfile> nicProfiles = _networkMgr.getNicProfiles(vmInstance);
@@ -3879,7 +3888,6 @@ public class UserVmManagerImpl implements UserVmManager, 
UserVmService, Manager
             InsufficientCapacityException {
         UserVmVO vmVO = _vmDao.findById(vm.getId());
         if (vmVO.getState() == State.Running) {
-            s_logger.warn("plugNic called need to plug in the NIC!!!! vm " + 
vmVO);
             try {
                 PlugNicCommand plugNicCmd = new 
PlugNicCommand(nic,vm.getName());
                 Commands cmds = new Commands(OnError.Stop);

Reply via email to