CLOUDSTACK-7593: allow nic type to be fetched from vm's details

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2015-04-13 14:25:34 +05:30
parent dcb6d7c778
commit 43db75c319
3 changed files with 24 additions and 2 deletions

View File

@ -22,11 +22,14 @@ package com.cloud.agent.api;
import com.cloud.agent.api.to.NicTO;
import com.cloud.vm.VirtualMachine;
import java.util.Map;
public class PlugNicCommand extends Command {
NicTO nic;
String instanceName;
VirtualMachine.Type vmType;
Map<String, String> details;
public NicTO getNic() {
return nic;
@ -46,6 +49,13 @@ public class PlugNicCommand extends Command {
this.vmType = vmtype;
}
public PlugNicCommand(NicTO nic, String instanceName, VirtualMachine.Type vmtype, Map<String, String> details) {
this.nic = nic;
this.instanceName = instanceName;
this.vmType = vmtype;
this.details = details;
}
public String getVmName() {
return instanceName;
}
@ -53,4 +63,8 @@ public class PlugNicCommand extends Command {
public VirtualMachine.Type getVMType() {
return vmType;
}
public Map<String, String> getDetails() {
return this.details;
}
}

View File

@ -148,6 +148,7 @@ import com.cloud.network.Network;
import com.cloud.network.NetworkModel;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.rules.RulesManager;
import com.cloud.offering.DiskOfferingInfo;
import com.cloud.offering.ServiceOffering;
@ -609,6 +610,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
} catch (InsufficientCapacityException e) {
throw new CloudRuntimeException("Unable to start a VM due to insufficient capacity", e).add(VirtualMachine.class, vmUuid);
} catch (ResourceUnavailableException e) {
if (e.getScope() != null && e.getScope().equals(VirtualRouter.class)) {
throw new CloudRuntimeException("Network is not available. Please contact admin.", e).add(VirtualMachine.class, vmUuid);
}
throw new CloudRuntimeException("Unable to start a VM due to concurrent operation", e).add(VirtualMachine.class, vmUuid);
}
}
@ -3399,7 +3403,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
VMInstanceVO router = _vmDao.findById(vm.getId());
if (router.getState() == State.Running) {
try {
PlugNicCommand plugNicCmd = new PlugNicCommand(nic, vm.getName(), vm.getType());
PlugNicCommand plugNicCmd = new PlugNicCommand(nic, vm.getName(), vm.getType(), vm.getDetails());
Commands cmds = new Commands(Command.OnError.Stop);
cmds.addCommand("plugnic", plugNicCmd);

View File

@ -916,8 +916,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return new PlugNicAnswer(cmd, false, "Unable to execute PlugNicCommand due to " + errMsg);
}
*/
// TODO need a way to specify the control of NIC device type
// Fallback to E1000 if no specific nicAdapter is passed
VirtualEthernetCardType nicDeviceType = VirtualEthernetCardType.E1000;
Map details = cmd.getDetails();
if (details != null) {
nicDeviceType = VirtualEthernetCardType.valueOf((String) details.get("nicAdapter"));
}
// find a usable device number in VMware environment
VirtualDevice[] nicDevices = vmMo.getNicDevices();