Merge pull request #973 from DaanHoogland/interfacePatternCheck

CLOUDSTACK-8838 Interface pattern checkthsi closes #812 and #966 as well

* pr/973:
  unit test for interface patterns in libvirt compute resource
  Added support for KVM teamd devices to LibvirtComputingResource.java.  This will allow users to utilze teamd nic teaming devices named team*.
  CLOUDSTACK-8838: Allow ensX enoX enpX enxX format for nics in CentOS 7

Signed-off-by: Remi Bergsma <github@remi.nl>
This commit is contained in:
Remi Bergsma 2015-10-25 21:02:57 +01:00
commit b69dff7905
2 changed files with 44 additions and 4 deletions

View File

@ -1160,16 +1160,43 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
for (int i = 0; i < interfaces.length; i++) {
final String fname = interfaces[i].getName();
s_logger.debug("matchPifFileInDirectory: file name '" + fname + "'");
if (fname.startsWith("eth") || fname.startsWith("bond") || fname.startsWith("vlan") || fname.startsWith("vx") || fname.startsWith("em") ||
fname.matches("^p\\d+p\\d+.*")) {
if (isInterface(fname)) {
return fname;
}
}
s_logger.debug("failing to get physical interface from bridge " + bridgeName + ", did not find an eth*, bond*, vlan*, em*, or p*p* in " + brif.getAbsolutePath());
s_logger.debug("failing to get physical interface from bridge " + bridgeName + ", did not find an eth*, bond*, team*, vlan*, em*, p*p*, ens*, eno*, enp*, or enx* in " + brif.getAbsolutePath());
return "";
}
String [] _ifNamePrefixes = {
"eth",
"bond",
"vlan",
"vx",
"em",
"ens",
"eno",
"enp",
"team",
"enx",
"^p\\d+p\\d+"
};
/**
* @param fname
* @return
*/
boolean isInterface(final String fname) {
StringBuffer commonPattern = new StringBuffer();
for (String ifNamePrefix : _ifNamePrefixes) {
commonPattern.append("|(").append(ifNamePrefix).append(".*)");
}
if(fname.matches(commonPattern.toString())) {
return true;
}
return false;
}
public boolean checkNetwork(final String networkName) {
if (networkName == null) {
return true;
@ -1450,7 +1477,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
if (!matcher.group(4).isEmpty()) {
return BroadcastDomainType.Vlan.toUri(matcher.group(4)).toString();
} else {
//untagged or not matching (eth|bond)#.#
//untagged or not matching (eth|bond|team)#.#
s_logger.debug("failed to get vNet id from bridge " + brName
+ "attached to physical interface" + pif + ", perhaps untagged interface");
return "";

View File

@ -4999,4 +4999,17 @@ public class LibvirtComputingResourceTest {
assertFalse(answer.getResult());
}
@Test
public void testIsInterface () {
LibvirtComputingResource lvcr = new LibvirtComputingResource();
assertFalse(lvcr.isInterface("bla"));
assertTrue(lvcr.isInterface("p99p00"));
for (String ifNamePrefix : lvcr._ifNamePrefixes) {
// excluding regexps as "\\\\d+" won't replace with String.replaceAll(String,String);
if (!ifNamePrefix.contains("\\")) {
assertTrue(lvcr.isInterface(ifNamePrefix + "0"));
}
}
}
}