bug 13021: add a global configuration variable to let control default network adapter type inside system VMs

This commit is contained in:
Kelven Yang 2012-01-12 14:08:39 -08:00
parent 50d166fe0d
commit 5d3cc153a9
5 changed files with 16 additions and 3 deletions

View File

@ -10,7 +10,6 @@ import java.util.Map;
//import com.cloud.cluster.CheckPointManager;
import com.cloud.hypervisor.vmware.mo.HostMO;
import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType;
import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.cloud.utils.Pair;
import com.vmware.vim25.ManagedObjectReference;
@ -25,6 +24,8 @@ public interface VmwareManager {
String composeWorkerName();
String getSystemVMIsoFileNameOnDatastore();
String getSystemVMDefaultNicAdapterType();
void prepareSecondaryStorageStore(String strStorageUrl);
void setupResourceStartupParams(Map<String, Object> params);

View File

@ -242,6 +242,7 @@ public enum Config {
VmwareReserveCpu("Advanced", ManagementServer.class, Boolean.class, "vmware.reserve.cpu", "false", "Specify whether or not to reserve CPU based on CPU overprovisioning factor", null),
VmwareReserveMem("Advanced", ManagementServer.class, Boolean.class, "vmware.reserve.mem", "false", "Specify whether or not to reserve memory based on memory overprovisioning factor", null),
VmwareRootDiskControllerType("Advanced", ManagementServer.class, String.class, "vmware.root.disk.controller", "ide", "Specify the default disk controller for root volumes, valid values are scsi, ide", null),
VmwareSystemVmNicDeviceType("Advanced", ManagementServer.class, String.class, "vmware.systemvm.nic.device.type", "E1000", "Specify the default network device type for system VMs, valid values are E1000, PCNet32, Vmxnet2, Vmxnet3", null),
// KVM
KvmPublicNetwork("Advanced", ManagementServer.class, String.class, "kvm.public.network.device", null, "Specify the public bridge on host for public network", null),

View File

@ -97,9 +97,8 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru {
if(vm.getVirtualMachine() instanceof DomainRouterVO || vm.getVirtualMachine() instanceof ConsoleProxyVO
|| vm.getVirtualMachine() instanceof SecondaryStorageVmVO) {
// for system VMs, use Vmxnet3 as default
if(nicDeviceType == null) {
details.put(VmDetailConstants.NIC_ADAPTER, VirtualEthernetCardType.Vmxnet3.toString());
details.put(VmDetailConstants.NIC_ADAPTER, _vmwareMgr.getSystemVMDefaultNicAdapterType());
} else {
try {
VirtualEthernetCardType.valueOf(nicDeviceType);

View File

@ -54,6 +54,7 @@ import com.cloud.hypervisor.vmware.mo.HostMO;
import com.cloud.hypervisor.vmware.mo.HostVirtualNicType;
import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper;
import com.cloud.hypervisor.vmware.mo.TaskMO;
import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType;
import com.cloud.hypervisor.vmware.mo.VmwareHostType;
import com.cloud.hypervisor.vmware.resource.SshHelper;
import com.cloud.hypervisor.vmware.util.VmwareContext;
@ -111,6 +112,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
String _guestNetworkVSwitchName;
String _serviceConsoleName;
String _managemetPortGroupName;
String _defaultSystemVmNicAdapterType = VirtualEthernetCardType.E1000.toString();
int _additionalPortRangeStart;
int _additionalPortRangeSize;
int _maxHostsPerCluster;
@ -217,6 +219,10 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
_managemetPortGroupName = "Management Network";
}
_defaultSystemVmNicAdapterType = configDao.getValue(Config.VmwareSystemVmNicDeviceType.key());
if(_defaultSystemVmNicAdapterType == null)
_defaultSystemVmNicAdapterType = VirtualEthernetCardType.E1000.toString();
_additionalPortRangeStart = NumbersUtil.parseInt(configDao.getValue(Config.VmwareAdditionalVncPortRangeStart.key()), 59000);
if(_additionalPortRangeStart > 65535) {
s_logger.warn("Invalid port range start port (" + _additionalPortRangeStart + ") for additional VNC port allocation, reset it to default start port 59000");
@ -542,6 +548,11 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
return fileName.replace(':', '-');
}
@Override
public String getSystemVMDefaultNicAdapterType() {
return this._defaultSystemVmNicAdapterType;
}
private File getSystemVMPatchIsoFile() {
// locate systemvm.iso
URL url = ComponentLocator.class.getProtectionDomain().getCodeSource().getLocation();

View File

@ -19,3 +19,4 @@ CREATE TABLE `cloud`.`mshost_peer` (
UNIQUE `i_mshost_peer__owner_peer_runid`(`owner_mshost`, `peer_mshost`, `peer_runid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT IGNORE INTO configuration (category, instance, component, name, value, description) VALUES ('Advanced', 'DEFAULT', 'management-server', 'vmware.systemvm.nic.device.type', 'E1000', 'Specify the default network device type for system VMs, valid values are E1000, PCNet32, Vmxnet2, Vmxnet3');