mirror of https://github.com/apache/cloudstack.git
kvm is working now
This commit is contained in:
parent
bc88d2eee3
commit
2e79da0ce5
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -224,6 +224,7 @@ Requires: %{name}-daemonize
|
|||
Requires: /sbin/service
|
||||
Requires: /sbin/chkconfig
|
||||
Requires: jna
|
||||
Requires: ebtables
|
||||
Group: System Environment/Libraries
|
||||
|
||||
Requires: kvm
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -253,4 +253,7 @@ public interface NetworkManager extends NetworkService {
|
|||
|
||||
PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(
|
||||
long physicalNetworkId);
|
||||
|
||||
List<PhysicalNetworkSetupInfo> getPhysicalNetworkInfo(long dcId,
|
||||
HypervisorType hypervisorType);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue