kvm is working now

This commit is contained in:
Edison Su 2011-12-05 18:06:48 -08:00
parent bc88d2eee3
commit 2e79da0ce5
6 changed files with 84 additions and 2 deletions

View File

@ -72,6 +72,8 @@ import com.cloud.agent.api.BackupSnapshotAnswer;
import com.cloud.agent.api.BackupSnapshotCommand;
import com.cloud.agent.api.CheckHealthAnswer;
import com.cloud.agent.api.CheckHealthCommand;
import com.cloud.agent.api.CheckNetworkAnswer;
import com.cloud.agent.api.CheckNetworkCommand;
import com.cloud.agent.api.CheckStateCommand;
import com.cloud.agent.api.CheckVirtualMachineAnswer;
import com.cloud.agent.api.CheckVirtualMachineCommand;
@ -179,6 +181,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.RouterPrivateIpStrategy;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetworkSetupInfo;
import com.cloud.resource.ServerResource;
import com.cloud.resource.ServerResourceBase;
import com.cloud.storage.Storage;
@ -718,6 +721,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
return new Pair<String, String>(privPif, pubPif);
}
private boolean checkNetwork(String networkName) {
String name = Script.runSimpleBashScript("brctl show | grep " + networkName + " | awk '{print $4}'");
if (name == null) {
return false;
} else {
return true;
}
}
private String getVnetId(String vnetId) {
return vnetId;
}
@ -935,6 +947,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return execute((CleanupNetworkRulesCmd)cmd);
} else if (cmd instanceof CopyVolumeCommand) {
return execute((CopyVolumeCommand)cmd);
} else if (cmd instanceof CheckNetworkCommand) {
return execute((CheckNetworkCommand)cmd);
} else {
s_logger.warn("Unsupported command ");
return Answer.createUnsupportedCommandAnswer(cmd);
@ -944,7 +958,28 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
private CheckNetworkAnswer execute(CheckNetworkCommand cmd) {
List<PhysicalNetworkSetupInfo> phyNics = cmd.getPhysicalNetworkInfoList();
String errMsg = null;
for (PhysicalNetworkSetupInfo nic : phyNics) {
if (!checkNetwork(nic.getGuestNetworkName())) {
errMsg = "Can not find network: " + nic.getGuestNetworkName();
break;
} else if (!checkNetwork(nic.getPrivateNetworkName())) {
errMsg = "Can not find network: " + nic.getPrivateNetworkName();
break;
} else if (!checkNetwork(nic.getPublicNetworkName())) {
errMsg = "Can not find network: " + nic.getPublicNetworkName();
break;
}
}
if (errMsg != null) {
return new CheckNetworkAnswer(cmd, false, errMsg);
} else {
return new CheckNetworkAnswer(cmd, true, null);
}
}
private CopyVolumeAnswer execute(CopyVolumeCommand cmd) {
boolean copyToSecondary = cmd.toSecondaryStorage();
String volumePath = cmd.getVolumePath();

View File

@ -224,6 +224,7 @@ Requires: %{name}-daemonize
Requires: /sbin/service
Requires: /sbin/chkconfig
Requires: jna
Requires: ebtables
Group: System Environment/Libraries
Requires: kvm

View File

@ -72,7 +72,7 @@ class sysConfig(object):
class sysConfigAgent(sysConfig):
def __init__(self, env):
super(sysConfigServer, self).__init__(env)
super(sysConfigAgent, self).__init__(env)
def check(self):
if self.env.debug:

View File

@ -54,6 +54,9 @@ import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase;
import com.cloud.network.NetworkManager;
import com.cloud.network.PhysicalNetworkSetupInfo;
import com.cloud.network.PhysicalNetworkVO;
import com.cloud.resource.Discoverer;
import com.cloud.resource.DiscovererBase;
import com.cloud.resource.ResourceManager;
@ -83,6 +86,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
@Inject ClusterDao _clusterDao;
@Inject ResourceManager _resourceMgr;
@Inject AgentManager _agentMgr;
@Inject NetworkManager _networkMgr;
@Override
public boolean processAnswers(long agentId, long seq, Answer[] answers) {
@ -177,6 +181,19 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
return null;
}
List<PhysicalNetworkSetupInfo> networks = _networkMgr.getPhysicalNetworkInfo(dcId, HypervisorType.KVM);
if (networks.size() < 1) {
_kvmPublicNic = "cloudbr0";
_kvmPrivateNic = "cloudbr0";
_kvmGuestNic = "cloudbr0";
s_logger.debug("Can't find physical network devices on zone: " + dcId + ", use the default cloudbr0");
} else {
PhysicalNetworkSetupInfo network = networks.get(0);
_kvmPublicNic = network.getPublicNetworkName();
_kvmPrivateNic = network.getPrivateNetworkName();
_kvmGuestNic = network.getGuestNetworkName();
}
String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
if (_kvmPublicNic != null) {

View File

@ -253,4 +253,7 @@ public interface NetworkManager extends NetworkService {
PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(
long physicalNetworkId);
List<PhysicalNetworkSetupInfo> getPhysicalNetworkInfo(long dcId,
HypervisorType hypervisorType);
}

View File

@ -4750,6 +4750,32 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) {
return null;
}
@Override
public List<PhysicalNetworkSetupInfo> getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) {
List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
List<PhysicalNetworkVO> physicalNtwkList = _physicalNetworkDao.listByZone(dcId);
for(PhysicalNetworkVO pNtwk : physicalNtwkList){
String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType);
String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType);
String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType);
String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType);
//String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType);
PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo();
info.setPhysicalNetworkId(pNtwk.getId());
info.setGuestNetworkName(guestName);
info.setPrivateNetworkName(privateName);
info.setPublicNetworkName(publicName);
info.setStorageNetworkName(storageName);
PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management);
if(mgmtTraffic != null){
String vlan = mgmtTraffic.getVlan();
info.setMgmtVlan(vlan);
}
networkInfoList.add(info);
}
return networkInfoList;
}
@Override
public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {