bug 10971: support vSphere 5

This commit is contained in:
Kelven Yang 2011-09-26 12:15:26 -07:00
parent cfc24c49f4
commit d32241ec9c
5 changed files with 60 additions and 16 deletions

View File

@ -143,6 +143,7 @@ import com.cloud.hypervisor.vmware.mo.CustomFieldConstants;
import com.cloud.hypervisor.vmware.mo.CustomFieldsManagerMO;
import com.cloud.hypervisor.vmware.mo.DatacenterMO;
import com.cloud.hypervisor.vmware.mo.DatastoreMO;
import com.cloud.hypervisor.vmware.mo.HostFirewallSystemMO;
import com.cloud.hypervisor.vmware.mo.HostMO;
import com.cloud.hypervisor.vmware.mo.HostVirtualNicType;
import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper;
@ -187,6 +188,8 @@ import com.vmware.vim25.ClusterDasConfigInfo;
import com.vmware.vim25.ComputeResourceSummary;
import com.vmware.vim25.DatastoreSummary;
import com.vmware.vim25.DynamicProperty;
import com.vmware.vim25.HostFirewallInfo;
import com.vmware.vim25.HostFirewallRuleset;
import com.vmware.vim25.HostNetworkTrafficShapingPolicy;
import com.vmware.vim25.HostPortGroupSpec;
import com.vmware.vim25.ManagedObjectReference;
@ -3790,6 +3793,28 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
if (_serviceContext == null) {
try {
_serviceContext = VmwareContextFactory.create(_vCenterAddress, _username, _password);
VmwareHypervisorHost hyperHost = getHyperHost(_serviceContext, cmd);
assert(hyperHost instanceof HostMO);
HostFirewallSystemMO firewallMo = ((HostMO)hyperHost).getHostFirewallSystemMO();
boolean bRefresh = false;
if(firewallMo != null) {
HostFirewallInfo firewallInfo = firewallMo.getFirewallInfo();
if(firewallInfo != null) {
for(HostFirewallRuleset rule : firewallInfo.getRuleset()) {
if("vncServer".equalsIgnoreCase(rule.getKey())) {
bRefresh = true;
firewallMo.enableRuleset("vncServer");
} else if("gdbserver".equalsIgnoreCase(rule.getKey())) {
bRefresh = true;
firewallMo.enableRuleset("gdbserver");
}
}
}
if(bRefresh)
firewallMo.refreshFirewall();
}
} catch (Exception e) {
s_logger.error("Unable to connect to vSphere server: " + _vCenterAddress, e);
throw new CloudRuntimeException("Unable to connect to vSphere server: " + _vCenterAddress);
@ -3810,7 +3835,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
@Override
public VmwareHypervisorHost getHyperHost(VmwareContext context, Command cmd) {
if (_morHyperHost.getType().equalsIgnoreCase("HostSystem")) {
return new HostMO(context, _morHyperHost);
return new HostMO(context, _morHyperHost);
}
return new ClusterMO(context, _morHyperHost);
}

View File

@ -7,6 +7,7 @@ package com.cloud.hypervisor.vmware.mo;
import org.apache.log4j.Logger;
import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.cloud.serializer.GsonHelper;
import com.cloud.utils.testcase.Log4jEnabledTestCase;
import com.google.gson.Gson;
import com.vmware.vim25.ManagedObjectReference;
@ -19,12 +20,13 @@ public class TestVmwareMO extends Log4jEnabledTestCase {
public void test() {
try {
VmwareContext context = TestVmwareContextFactory.create(
"192.168.190.18", "Administrator", "Suite219");
"10.223.80.29", "Administrator", "Suite219");
VirtualMachineMO vmMo = new VirtualMachineMO(context, "VirtualMachine", "vm-700");
System.out.println("state " + vmMo.getPowerState().toString());
HostMO hostMo = new HostMO(context, "HostSystem", "host-9");
System.out.println("host Type " + hostMo.getHostType());
Gson gson = GsonHelper.getGsonLogger();
System.out.println(gson.toJson(hostMo.getHostFirewallSystemMO().getFirewallInfo()));
context.close();
} catch(Exception e) {

View File

@ -224,7 +224,7 @@ public enum Config {
VmwareGuestNetworkVSwitch("Advanced", ManagementServer.class, String.class, "vmware.guest.vswitch", null, "Specify the vSwitch on host for guest network", null),
VmwareServiceConsole("Advanced", ManagementServer.class, String.class, "vmware.service.console", "Service Console", "Specify the service console network name(for ESX hosts)", null),
VmwareManagementPortGroup("Advanced", ManagementServer.class, String.class, "vmware.management.portgroup", "Management Network", "Specify the management network name(for ESXi hosts)", null),
VmwareAdditionalVncPortRangeStart("Advanced", ManagementServer.class, Integer.class, "vmware.additional.vnc.portrange.start", "59000", "Start port number of additional VNC port range", null),
VmwareAdditionalVncPortRangeStart("Advanced", ManagementServer.class, Integer.class, "vmware.additional.vnc.portrange.start", "50000", "Start port number of additional VNC port range", null),
VmwareAdditionalVncPortRangeSize("Advanced", ManagementServer.class, Integer.class, "vmware.additional.vnc.portrange.size", "1000", "Start port number of additional VNC port range", null),
//VmwareGuestNicDeviceType("Advanced", ManagementServer.class, String.class, "vmware.guest.nic.device.type", "E1000", "Ethernet card type used in guest VM, valid values are E1000, PCNet32, Vmxnet2, Vmxnet3", null),
VmwarePerClusterHostMax("Advanced", ManagementServer.class, Integer.class, "vmware.percluster.host.max", "8", "maxmium hosts per vCenter cluster(do not let it grow over 8)", "1-8"),

View File

@ -75,6 +75,7 @@ import com.cloud.utils.script.Script;
import com.cloud.vm.DomainRouterVO;
import com.google.gson.Gson;
import com.vmware.apputils.vim25.ServiceUtil;
import com.vmware.vim25.AboutInfo;
import com.vmware.vim25.HostConnectSpec;
import com.vmware.vim25.HostPortGroupSpec;
import com.vmware.vim25.ManagedObjectReference;
@ -301,8 +302,10 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
HostMO hostMo = new HostMO(serviceContext, hosts[0]);
HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO();
if(firewallMo != null) {
firewallMo.enableRuleset("vncServer");
firewallMo.refreshFirewall();
if(hostMo.getHostType() == VmwareHostType.ESX) {
firewallMo.enableRuleset("vncServer");
firewallMo.refreshFirewall();
}
}
// prepare at least one network on the vswitch to enable OVF importing
@ -332,8 +335,10 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
HostMO hostMo = new HostMO(serviceContext, morHost);
HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO();
if(firewallMo != null) {
firewallMo.enableRuleset("vncServer");
firewallMo.refreshFirewall();
if(hostMo.getHostType() == VmwareHostType.ESX) {
firewallMo.enableRuleset("vncServer");
firewallMo.refreshFirewall();
}
}
String managementPortGroupName = hostMo.getPortGroupNameByNicType(HostVirtualNicType.management);
@ -354,8 +359,10 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
HostMO hostMo = new HostMO(serviceContext, mor);
HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO();
if(firewallMo != null) {
firewallMo.enableRuleset("vncServer");
firewallMo.refreshFirewall();
if(hostMo.getHostType() == VmwareHostType.ESX) {
firewallMo.enableRuleset("vncServer");
firewallMo.refreshFirewall();
}
}
String managementPortGroupName = hostMo.getPortGroupNameByNicType(HostVirtualNicType.management);

View File

@ -7,6 +7,8 @@ package com.cloud.hypervisor.vmware.mo;
import org.apache.log4j.Logger;
import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.vmware.vim25.HostFirewallDefaultPolicy;
import com.vmware.vim25.HostFirewallInfo;
import com.vmware.vim25.ManagedObjectReference;
public class HostFirewallSystemMO extends BaseMO {
@ -20,6 +22,14 @@ public class HostFirewallSystemMO extends BaseMO {
super(context, morType, morValue);
}
public HostFirewallInfo getFirewallInfo() throws Exception {
return (HostFirewallInfo)_context.getServiceUtil().getDynamicProperty(_mor, "firewallInfo");
}
public void updateDefaultPolicy(HostFirewallDefaultPolicy policy) throws Exception {
_context.getService().updateDefaultPolicy(_mor, policy);
}
public void enableRuleset(String rulesetName) throws Exception {
_context.getService().enableRuleset(_mor, rulesetName);
}