mirror of https://github.com/apache/cloudstack.git
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:
commit
b69dff7905
|
|
@ -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 "";
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue