diff --git a/core/src/com/cloud/agent/api/PlugNicCommand.java b/core/src/com/cloud/agent/api/PlugNicCommand.java index e68931d5e36..322b755b86a 100644 --- a/core/src/com/cloud/agent/api/PlugNicCommand.java +++ b/core/src/com/cloud/agent/api/PlugNicCommand.java @@ -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 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 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 getDetails() { + return this.details; + } } diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 609aa5b36bc..387abda1699 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -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); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 315b1619f4a..0777201eb3b 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -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();