Skip to content
This repository was archived by the owner on Jan 15, 2020. It is now read-only.

Commit 2e79da0

Browse files
Edison SuEdison Su
authored andcommitted
kvm is working now
1 parent bc88d2e commit 2e79da0

6 files changed

Lines changed: 84 additions & 2 deletions

File tree

agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@
7272
import com.cloud.agent.api.BackupSnapshotCommand;
7373
import com.cloud.agent.api.CheckHealthAnswer;
7474
import com.cloud.agent.api.CheckHealthCommand;
75+
import com.cloud.agent.api.CheckNetworkAnswer;
76+
import com.cloud.agent.api.CheckNetworkCommand;
7577
import com.cloud.agent.api.CheckStateCommand;
7678
import com.cloud.agent.api.CheckVirtualMachineAnswer;
7779
import com.cloud.agent.api.CheckVirtualMachineCommand;
@@ -179,6 +181,7 @@
179181
import com.cloud.network.Networks.BroadcastDomainType;
180182
import com.cloud.network.Networks.RouterPrivateIpStrategy;
181183
import com.cloud.network.Networks.TrafficType;
184+
import com.cloud.network.PhysicalNetworkSetupInfo;
182185
import com.cloud.resource.ServerResource;
183186
import com.cloud.resource.ServerResourceBase;
184187
import com.cloud.storage.Storage;
@@ -718,6 +721,15 @@ private Pair<String, String> getPifs() {
718721
}
719722
return new Pair<String, String>(privPif, pubPif);
720723
}
724+
725+
private boolean checkNetwork(String networkName) {
726+
String name = Script.runSimpleBashScript("brctl show | grep " + networkName + " | awk '{print $4}'");
727+
if (name == null) {
728+
return false;
729+
} else {
730+
return true;
731+
}
732+
}
721733
private String getVnetId(String vnetId) {
722734
return vnetId;
723735
}
@@ -935,6 +947,8 @@ public Answer executeRequest(Command cmd) {
935947
return execute((CleanupNetworkRulesCmd)cmd);
936948
} else if (cmd instanceof CopyVolumeCommand) {
937949
return execute((CopyVolumeCommand)cmd);
950+
} else if (cmd instanceof CheckNetworkCommand) {
951+
return execute((CheckNetworkCommand)cmd);
938952
} else {
939953
s_logger.warn("Unsupported command ");
940954
return Answer.createUnsupportedCommandAnswer(cmd);
@@ -944,7 +958,28 @@ public Answer executeRequest(Command cmd) {
944958
}
945959
}
946960

947-
961+
private CheckNetworkAnswer execute(CheckNetworkCommand cmd) {
962+
List<PhysicalNetworkSetupInfo> phyNics = cmd.getPhysicalNetworkInfoList();
963+
String errMsg = null;
964+
for (PhysicalNetworkSetupInfo nic : phyNics) {
965+
if (!checkNetwork(nic.getGuestNetworkName())) {
966+
errMsg = "Can not find network: " + nic.getGuestNetworkName();
967+
break;
968+
} else if (!checkNetwork(nic.getPrivateNetworkName())) {
969+
errMsg = "Can not find network: " + nic.getPrivateNetworkName();
970+
break;
971+
} else if (!checkNetwork(nic.getPublicNetworkName())) {
972+
errMsg = "Can not find network: " + nic.getPublicNetworkName();
973+
break;
974+
}
975+
}
976+
977+
if (errMsg != null) {
978+
return new CheckNetworkAnswer(cmd, false, errMsg);
979+
} else {
980+
return new CheckNetworkAnswer(cmd, true, null);
981+
}
982+
}
948983
private CopyVolumeAnswer execute(CopyVolumeCommand cmd) {
949984
boolean copyToSecondary = cmd.toSecondaryStorage();
950985
String volumePath = cmd.getVolumePath();

cloud.spec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ Requires: %{name}-daemonize
224224
Requires: /sbin/service
225225
Requires: /sbin/chkconfig
226226
Requires: jna
227+
Requires: ebtables
227228
Group: System Environment/Libraries
228229

229230
Requires: kvm

python/lib/cloudutils/syscfg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def check(self):
7272

7373
class sysConfigAgent(sysConfig):
7474
def __init__(self, env):
75-
super(sysConfigServer, self).__init__(env)
75+
super(sysConfigAgent, self).__init__(env)
7676

7777
def check(self):
7878
if self.env.debug:

server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
import com.cloud.hypervisor.Hypervisor;
5555
import com.cloud.hypervisor.Hypervisor.HypervisorType;
5656
import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase;
57+
import com.cloud.network.NetworkManager;
58+
import com.cloud.network.PhysicalNetworkSetupInfo;
59+
import com.cloud.network.PhysicalNetworkVO;
5760
import com.cloud.resource.Discoverer;
5861
import com.cloud.resource.DiscovererBase;
5962
import com.cloud.resource.ResourceManager;
@@ -83,6 +86,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
8386
@Inject ClusterDao _clusterDao;
8487
@Inject ResourceManager _resourceMgr;
8588
@Inject AgentManager _agentMgr;
89+
@Inject NetworkManager _networkMgr;
8690

8791
@Override
8892
public boolean processAnswers(long agentId, long seq, Answer[] answers) {
@@ -177,6 +181,19 @@ public Map<? extends ServerResource, Map<String, String>> find(long dcId,
177181
return null;
178182
}
179183

184+
List<PhysicalNetworkSetupInfo> networks = _networkMgr.getPhysicalNetworkInfo(dcId, HypervisorType.KVM);
185+
if (networks.size() < 1) {
186+
_kvmPublicNic = "cloudbr0";
187+
_kvmPrivateNic = "cloudbr0";
188+
_kvmGuestNic = "cloudbr0";
189+
s_logger.debug("Can't find physical network devices on zone: " + dcId + ", use the default cloudbr0");
190+
} else {
191+
PhysicalNetworkSetupInfo network = networks.get(0);
192+
_kvmPublicNic = network.getPublicNetworkName();
193+
_kvmPrivateNic = network.getPrivateNetworkName();
194+
_kvmGuestNic = network.getGuestNetworkName();
195+
}
196+
180197
String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
181198

182199
if (_kvmPublicNic != null) {

server/src/com/cloud/network/NetworkManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,4 +253,7 @@ boolean reallocate(VirtualMachineProfile<? extends VMInstanceVO> vm,
253253

254254
PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(
255255
long physicalNetworkId);
256+
257+
List<PhysicalNetworkSetupInfo> getPhysicalNetworkInfo(long dcId,
258+
HypervisorType hypervisorType);
256259
}

server/src/com/cloud/network/NetworkManagerImpl.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4750,6 +4750,32 @@ public boolean processCommands(long agentId, long seq, Command[] commands) {
47504750
public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) {
47514751
return null;
47524752
}
4753+
4754+
@Override
4755+
public List<PhysicalNetworkSetupInfo> getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) {
4756+
List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
4757+
List<PhysicalNetworkVO> physicalNtwkList = _physicalNetworkDao.listByZone(dcId);
4758+
for(PhysicalNetworkVO pNtwk : physicalNtwkList){
4759+
String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType);
4760+
String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType);
4761+
String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType);
4762+
String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType);
4763+
//String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType);
4764+
PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo();
4765+
info.setPhysicalNetworkId(pNtwk.getId());
4766+
info.setGuestNetworkName(guestName);
4767+
info.setPrivateNetworkName(privateName);
4768+
info.setPublicNetworkName(publicName);
4769+
info.setStorageNetworkName(storageName);
4770+
PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management);
4771+
if(mgmtTraffic != null){
4772+
String vlan = mgmtTraffic.getVlan();
4773+
info.setMgmtVlan(vlan);
4774+
}
4775+
networkInfoList.add(info);
4776+
}
4777+
return networkInfoList;
4778+
}
47534779

47544780
@Override
47554781
public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {

0 commit comments

Comments
 (0)