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);
